• Как работает оператор &?

    vabka
    @vabka
    Токсичный шарпист
    То что вы написали в вопросе и в комментарии к моему встречному вопросу - это две совершенно разные вещи.

    То что в вопросе:
    const myVar = ClassCat & ClassDog;
    Тут работа идёт со значениями и & - это побитовое И.

    А вот кусок кода из вашего пояснения:
    export type CatDocument = Cat & Document;
    1. Это Typescript. В JS нет никакого Export type
    2. Тут работа идёт уже с типами (Не со значениями!). & - это пересечение типов
    CatDocument - это пересечение типов Cat и Document.

    На практике это значит, что переменная, которая имеет тип CatDocument должна иметь все поля из Cat и из Document, если Cat и Document - это объекты.
    Ответ написан
    Комментировать
  • Можно ли с контейнера достучаться до localhost?

    @mureevms
    Для контейнера localhost это и есть сам контейнер, поэтому да, можно ).
    Для обращения к материнской системе надо использовать шлюз контейнера по умолчанию.
    Можно найти двумя способами, первый это узнать адрес на интерфейсе dockerX:
    $ ip a | grep docker
    5: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
        inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0

    Или в контейнере сделать ip r
    $ sudo docker exec -it php-fpm sh
    / # ip r | grep default
    default via 172.18.0.1 dev eth0

    Где 172.17.0.1 и есть нужный IP адрес к которому надо обращаться из контейнера.
    Ответ написан
    Комментировать
  • Как сделать незаметными места стыков фигур?

    ArsenyMatytsyn
    @ArsenyMatytsyn Куратор тега CSS
    Руководитель frontend направления, предприниматель
    1. Не пытаться реализовать это на бордерах. Воспользуйся, например, SVG.
    2. Можно завернуть элементы в другие с расчётными размерами за вычетом вылетов и с помощью overflow: hidden обрезать их. Такой себе метод
    Ответ написан
    Комментировать
  • Как работать с конкурентным доступом к одной ячейке памяти?

    @Klars
    Mutexes
    Наглядный график с кодом https://golangbot.com/mutex/
    + обязательно для ридеров и врайтеров использовать RLock and RUnlock (блокировка на чтение значения или на запись)
    очень полезно
    Ответ написан
    Комментировать
  • Как правильно работать с сторонним api?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Сделайте сервис. В нем обращайтесь к этому api ну или к свой заглушке на время тестирования. Там же сможете трансформировать данные если они корявые. Обработку ошибок можно как вынести выше так и гасить по месту отправляя в логи сообщение и на вызов пустой объект
    Ответ написан
    Комментировать
  • Как создать xml c атрибутами golang?

    Примерно так: https://play.golang.com/p/TqlsfIV2BSF
    package main
    
    import (
    	"encoding/xml"
    	"fmt"
    )
    
    type MyData struct {
    	XMLName    xml.Name
    	Attributes []xml.Attr `xml:",attr"`
    }
    
    func main() {
    	v := MyData{
    		XMLName: xml.Name{Local: "somename"},
    		Attributes: []xml.Attr{
    			{Name: xml.Name{Local: "attr1"}, Value: "val1"},
    			{Name: xml.Name{Local: "attr2"}, Value: "val2"},
    		},
    	}
    
    	rawData, _ := xml.Marshal(v)
    	fmt.Println(string(rawData))
    }
    Ответ написан
    Комментировать
  • Какие есть достойные альтернативы жадному алгоритму (greedy)?

    ayazer
    @ayazer
    Sr. Software Engineer
    ну после всех выяснений выходит что у вас действительно задача про n рюкзаков. Тогда как уже заметили
    - это действительно np-полная задача со всеми вытекающими проблемами и подходами к решению. Ну и я уже писал что с использованием MIP солвера оно решается буквально в пару строчек (без использования - писать кода прийдется заметно больше). Вот тут https://python-mip.readthedocs.io/_/downloads/en/l... даже есть пример для решения рюкзака, его надо просто расширить с условием что рюкзаков много и нужно строгое совпадение.

    зы: может оказатся что данных сильно много и подход с использованием MIP "в лоб" будет работать сильно медленно. В таком случае уже можно будет думать и комбинировать разные подходы.

    зыы: питоновский код чисто для примера, обертки для cbc (https://github.com/coin-or/Cbc) есть уже наверно для всех языков где это может понадобится, потому менятся будет только синтаксис. под капотом там одни фиг будет плюсовая либа

    на вид должно выйти что-то такое

    from typing import List
    from mip import Model, minimize, xsum, BINARY
    
    
    def solve(input_values: List[int], target_values: List[int]):
    
        model = Model("m")
    
        bin_input_is_used_to_build_target = {}
    
        for index in range(0, len(input_values)):
            bin_input_is_used_to_build_target[index] = [model.add_var(var_type=BINARY) for _ in target_values]
    
    
        model.objective = minimize(
            xsum(
                bin_input_is_used_to_build_target[input_index][target_index] * input_values[input_index]
                    for input_index in range(0, len(input_values))
                    for target_index in range(0, len(target_values)))
        )
    
        for target_index in range(0, len(target_values)):
            model += xsum(bin_input_is_used_to_build_target[input_index][target_index] * input_values[input_index]
                           for input_index in range(0, len(input_values))) == target_values[target_index]
    
        for input_index in range(0, len(input_values)):
            model += xsum(bin_input_is_used_to_build_target[input_index][target_index] * input_values[input_index]
                          for target_index in range(0, len(target_values))) <= input_values[input_index]
    
        model.optimize()
    
        result = {}
    
        for target_index in range(0, len(target_values)):
            result[target_index] = [input_values[input_index]
                                        for input_index in range(0, len(input_values))
                                        if bin_input_is_used_to_build_target[input_index][target_index].x >= 0.99]
    
    
        return result
    
    
    if __name__ == "__main__":
    
        input_values = [1, 2, 1, 1, 1, 1, 3, 2, 5]
    
        target_values= [3, 4, 5, 5]
    
        result = solve(input_values, target_values)
    
        for i in range(0, len(result)):
            print(target_values[i], " : ", result[i])
    
        # 3: [2, 1]
        # 4: [1, 1, 2]
        # 5: [5]
        # 5: [1, 1, 3]
    Ответ написан
    2 комментария
  • Какие есть достойные альтернативы жадному алгоритму (greedy)?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Ваша задача - Мультипликативный 0-1 рюкзак. Тут надо упомянуть NP и другие страшные слова, которые означают, что хорошего решения тут нет. Жадность - если подойдет какая-то аппроксимация оптимального ответа. Стоит пытаться собирать числа с самых мелких, пытаясь засунуть туда как можно большие числа.
    Метод ветвей и границ (фактически полный перебор с оптимизациями и эвристиками).

    Можно записать задачу в виде целочисленного линейного программирования и натравить на нее любой из существующих решателей. Есть хорошие шансы, что это очень быстро найдет оптимальное решение.
    Ответ написан
    Комментировать
  • Почему Workerman видит все плдключения как одно?

    light-source
    @light-source
    Команда онлайн консультанта LightChat.org
    Потому что вы запускаете 4 процесса воркера, соответственно коннекты разбрасываются по ним равномерно и у одного процесса воркера ($tcp_worker->connections) в тот момент только одно соединение. А в консоли команда вернет кол-во коннектов для всех процессов. Более того вы не сможете просто отправить сообщение всем коннектам на разных воркерах, по этому если вам принципиально нет необходимости в 4 процессах, просто установите $tcp_worker->count = 1
    Ответ написан
    4 комментария
  • Как общатся с нативной средой через WebView?

    RomReed
    @RomReed
    JavaScript, Flutter, ReactNative, Redux, Firebase
    вам нужно использовать JavaScript custom method. Создаете html и функцию например
    <!DOCTYPE html>
    <html>
    <head>
    	<title>test</title>
    	<script type="text/javascript">
    		function sendMessage(bucketCount){
    			alert(bucketCount);
    		}
    	</script>
    </head>
    <body>
    </body>
    </html>


    И в react-native с помощью рефа на webview вызываете этот метод:
    this.webview && this.webview.injectJavaScript("sendMessage(5);");

    как результат вы вызовите функцию и увидите свой alert.

    Что касается того как получить ответ от страници то вы можете найти в официальной документации https://github.com/react-native-community/react-na...

    в двух словах вам надо отписать метод onMessage в рект нативе и вызвать функцию window.ReactNativeWebView.postMessage из javascript. Затем в onMessage метода повесить проверку и отловить ваш уникальный ключ, который вы послали в postMessage и вызвать необходимый функционал.
    Ответ написан
    Комментировать
  • Как можно подключить модули к совственному api?

    andead
    @andead
    друпал девелопер, фрилансер
    Сторонние php библиотеки в Drupal 8 инсталятся с помощью composer. Функционал библиотеки будет доступен везде.
    Ответ написан
    2 комментария
  • Как создать независимую страницу?

    andead
    @andead
    друпал девелопер, фрилансер
    function mymodule_menu() {
      $items['custom'] = array(
        'page callback' => 'mymodule_custom',
      );
      return $items;
    }
    
    function mymodule_custom() {
      echo 'custom';
    }


    https://api.drupal.org/api/drupal/modules%21system...
    Ответ написан
    Комментировать
  • Как запретить повторный клик по объекту js?

    Stalker_RED
    @Stalker_RED
    $(".input-group").one('click', function(){
        $(this).append("<span>11</span>");
    });

    .one() - одноразовый обработчик, который ликвидируется после первого срабатывания.
    Ответ написан
    2 комментария