С дизайнерами ведь можно всегда договориться. Я в свое время просто попросил сохранять мне макеты в svg и после этого проблем не знал (Дизайнер в Иллюстраторе работает).
Для нарезки макетов, мы будем использовать кроссплатформенную программу Avocode, она отлично справляется с psd и sketch макетами и позволяет вести командую работу
Насчет остальных скажу, что простые psd они переваривают как раз нормально. Ну, кроме Inkscape, ибо он векторный.
И вообще, psd — это фотошопный формат. Фотошоп, вон, вообще не открывает гимповские файлы, и что? Если нужны слои, то можно без проблем использовать tif вместо psd для обмена данными.
Да, я некорректно выразился насчет остановки. Но технически такое может произойти если два треда попадут на одно ядро. Их будет переключать планировщик ОС.
Я и хотел показать стандартное поведение, что у нас нет гарантии того, что в середину одной горутины не может врезаться другая, например в середине записи в map попытаться тоже получить доступ к этому мапу. Если мы об этом не позаботились.
Дак вот как раз если горутина слишком долго тупит (это может быть и не системный вызов), то создается еще тред, в который запихиваются другие горутины. Вот тогда мы и получаем возможные проблемы с одновременной записью в map, например, если не учтем этого.
Вот довольно тупой пример, иллюстрирующий ситуацию. pastebin.com/jkH1Nvp2
$ go run check.go
Count 10000; 25.437204715 - 25.484347422
Count 20000; 25.437177393 - 25.605745478
End
Как видим, горутины тут пересекаются по времени выполнения, хотя никаких блокирующих операций не делается.
На C# не пишу, почитал сейчас немного про acyns/await. Насколько успел разобраться, это все же разные подходы.
Го меня цепляет тем, что можно просто писать plain-код. Тот же async/await будет работать не с любой функцией, она должна это поддерживать, а в го можно любое действие дернуть через go… и оно не будет блокировать остальные потоки выполнения. Т.е., тут не асинхронная модель.
В совокупности с каналами и особенно с такой фичей как «select» это позволяет очень легко писать сложную логику управления кучей параллельных задач. Но за это мы платим тем, что нужно следить за потокобезопасностью кода, в го у нас нет гарантий, что в середине функции планировщик не переключится на выполнение другой функции.
Но в Скайпе же есть и HD и шаринг рабочего стола одновременно с камерой и конференции на много участников.
Если крупные видеоконференции много раз в день, то еще можно задуматься, но для остальных случаев слишком дорого.
Насколько знаю, в dev версии хрома сейчас включено экспериментальное midi api, которое умеет выполнять ввод с миди-устройств и вывод на миди-синтезатор ОС или внешний. Чтобы не валилось, надо или отключить это в chrome://flags или автору в коде указать явно, чтобы MIDI.js не использовало этот апи.
Задачи разные. Если нужна производительность и экономия, берем C++. Если же нужно сделать быстро или знаешь только веб-технологии, то nw. Ну и кроссплатформенность, конечно.
Для создания приложений есть отличнейшая штуковина node-webkit (ныне NW.js). Там скрешена нода и браузер. Файл вы без проблем прочитаете. И еще много всего сделаете. Позволяет как раз таки создавать exe-шники.
Вот со ждущим режимом да, у OpenVPN на винде жесткий косяк. Мне приходилось ставить триггер на перезапуск службы при выходе из сна.
А при выдергивании кабеля все нормально. Правда, я всегда OpenVPN использовал в качестве фоновой службы, может гуй-версия действительно вываливает балун с ошибкой вместо переподключения.
Запуск нескольких тоннелей решается созданием нескольких конфигов, OpenVPN при старте ищет в папке конфиги и запускает столько тоннелей, сколько конфигов положишь.
Насчет остальных скажу, что простые psd они переваривают как раз нормально. Ну, кроме Inkscape, ибо он векторный.
И вообще, psd — это фотошопный формат. Фотошоп, вон, вообще не открывает гимповские файлы, и что? Если нужны слои, то можно без проблем использовать tif вместо psd для обмена данными.
Вот довольно тупой пример, иллюстрирующий ситуацию. pastebin.com/jkH1Nvp2
Как видим, горутины тут пересекаются по времени выполнения, хотя никаких блокирующих операций не делается.
Го меня цепляет тем, что можно просто писать plain-код. Тот же async/await будет работать не с любой функцией, она должна это поддерживать, а в го можно любое действие дернуть через go… и оно не будет блокировать остальные потоки выполнения. Т.е., тут не асинхронная модель.
В совокупности с каналами и особенно с такой фичей как «select» это позволяет очень легко писать сложную логику управления кучей параллельных задач. Но за это мы платим тем, что нужно следить за потокобезопасностью кода, в го у нас нет гарантий, что в середине функции планировщик не переключится на выполнение другой функции.
Каналы вместе с горутинами по-идее призваны избавиться от callback-hell, который присутствует в некоторых языках.
Если крупные видеоконференции много раз в день, то еще можно задуматься, но для остальных случаев слишком дорого.
Он еще и опенсорсный.
А при выдергивании кабеля все нормально. Правда, я всегда OpenVPN использовал в качестве фоновой службы, может гуй-версия действительно вываливает балун с ошибкой вместо переподключения.
Запуск нескольких тоннелей решается созданием нескольких конфигов, OpenVPN при старте ищет в папке конфиги и запускает столько тоннелей, сколько конфигов положишь.