• Где найти других программистов?

    @vvlch
    самое популярное сейчас - не дискорд или форумы, а телеграм-чаты. их много, людей там много, активного общения тоже много

    вот самый полный список со списками, есть группировка по тематике и всё такое.
    по плюсам, например, сразу несколько чатов нашлось поиском по странице
    https://github.com/goq/telegram-list
    Ответ написан
    Комментировать
  • Что стоит учить с или c++ или c#?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Это 3 совершенно различных, с точки зрения целей, языка. Лучше пойми что ТЫ хочешь, а потом выбери
    Ответ написан
    Комментировать
  • Как на c# организовать обмен сообщениями между сервером и клиентом, если нет белого айпи?

    @dronmaxman
    VoIP Administrator
    сервер в интернете нужен лишь чтобы себе компанию найти, а дальше хостем выступает один игрок.

    Не всегда, если клиенты не могут соединиться напрямую, то соединение идет через промежуточные сервера. Думаю что поможет понимание в работе upnp, STUN, TURN.
    Как пробивать НАТ?
    Ответ написан
    Комментировать
  • Можно ли написать приложение под Windows, а потом скомпилить под Linux?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Да, конечно. Можно компилировать либо в переносимую форму (так происходит по-умолчанию), либо в платформозависимый исполняемый файл (dotnet publish -r linux-x64)
    Ответ написан
  • Какой самый лучший способ передать информацию между формами?

    @OwDafuq
    Много решений.
    Пара самых популярных:
    1) Конструктор с параметром (или публичное свойство).
    //form2
    public Form2(string value)
    {
    	Value = value;
    	...
    }
    
    //form1
    public Form1()
    {
    	...
    }
    
    void OpenNewForm(...)
    {
    	var form2 = new Form2("myString"); 
    	var form2_2 = new Form2
    	{
    		Value = value
    	};
    }


    2) Singletone объект (но лучше, если у вас есть DI). Объявляете объект, который будет хранить нужные вам переменные в одном месте и вызываете его где вам угодно.
    Ответ написан
    Комментировать
  • Какую среду/язык выбрать для написания управляющей программы, работающей под Windows и Linux?

    @Quiensabe
    VR-разработчик
    Возможно странный вариант, но я такие штуки делаю на Unity.
    Работа с COM-портом везде плюс-минус одинаковая, а под Unity есть еще и готовые ассеты для этого.
    Написание логики - тоже разницы большой нет.

    Но зато в Unity (или Unreal) - большой плюс в крайне легком построении интерфейса, правках, и вообще любом визуале. Рано или поздно захочется добавить красивые кнопочки, тени, эффекты, трехмерные паровозики... А тут оно все из коробки, с кучей готового контента (в т.ч. бесплатного), и возможностью собрать билд хоть под линукс, хоть под мак или андроид...

    p.s. на малинке можно запустить только если поставить на нее андроид.
    Ответ написан
    3 комментария
  • Как защититься от двойного списания в многопоточном приложении?

    @Vitsliputsli
    Блокировки в базе - это всегда не очень хорошо, а с serializable производительность базы упадет в пол. Констрейнт как вариант, но поможет только для этой ситуации и получится, что логику перетащили в базу.
    Самый оптимальный вариант, просто поделить работу между отдельными потоками, т.е. конкретного пользователя обслуживает конкретный поток и никакой другой, тогда гонки не будет в принципе. Но это если у вас архитектура позволяет.
    Ответ написан
    Комментировать
  • Чем плохо использование статических функций в проекте для архитектуры?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    Вообще использование статистических функций это не плохо, если Вы понимаете их назначение и используете их правильно в простых вещах вроде Helper. Но не нужно превращать весь проект в статистическую бестию.

    Объекты инкапсулируют состояние и поведение, а статистическая функция лишина этого.

    Что сказано в документации PHP о статических функциях:

    Объявление свойств и методов класса статическими позволяет обращаться к ним без создания экземпляра класса. К ним также можно получить доступ статически в созданном экземпляре объекта класса.

    Так как статические методы вызываются без создания экземпляра класса, то псевдопеременная $this недоступна внутри статических методов. Поэтому важная причина, по которой Вам стоит избегать статических методов, заключается в том, что их использование теряет одно из преимуществ объектов. Объекты предназначены для инкапсуляции данных. Это предотвращает появление неожиданных побочных эффектов, которые позволяют избежать ошибок, улучшает тестирование. Статические методы не имеют инкапсулированных данных и поэтому не получают этого преимущества.

    Так же статические методы всегда создают экземпляр объекта при загрузке приложения, независимо от того будете ли Вы использовать этот объект или нет. Это увеличивает нагрузку на память.

    Что касаемо именно выборки из базы, то тут как минимум будет зависимость на одном хранилище. Что если вы сейчас хотите забирать данные из Mysql, а завтра из PosgreSQL. В вашем случае будет очень сложно перейти от одного хранилища к другому, но если бы вы использовали объект Repository, то вы бы просто написали новую реализацию и заменили бы через DI контейнер.
    Ответ написан
    1 комментарий
  • Почему Facebook отключил защиту от XSS-атак?

    PageAuditRU
    @PageAuditRU Автор вопроса
    Senior SEO Анализатор
    Итак, спасибо Евгению Глебову за комментарии. Теперь всё стало понятно.

    Защита с помощью заголовка (и соответствующей технологии) X-XSS-Protection скомпрометирована и создаёт ложное ощущение защищённости. В любом из режимов 0 или 1; mode=block реализуемы XS-атаки.

    Разработчикам рекомендовано:
    - явно отключить защиту, установив директиву 0,
    - перейти к использованию защиты, используя заголовок Content-Security-Policy,
    - самостоятельно обеспечить защиту сайта от XSS-атак.
    Ответ написан
    Комментировать
  • Какие реализации upsert для Postgresql 9.3 вы рекомендуете использовать?

    @vovik0134
    До версии 9.5 можно использовать следующее решение:
    WITH upsert AS ( 
    UPDATE tbl SET foo = 42 RETURNING * 
    ) 
    INSERT INTO tbl(foo) VALUES(42) WHERE tbl.id NOT IN (SELECT id FROM upsert);


    В 9.5 будет INSERT INTO ... ON CONFLICT
    Ответ написан
    1 комментарий
  • С помощью каких яп в 2020 делают браузерные игры?

    @fear-cry
    Frontend Developer
    Браузерные 2D/3D игры можно делать на движке Godot (возможно в Unity тоже), там есть экспорт под разные платформы, в том числе и под браузер (на выходе получается html с ресурсами js, спрайтами, звуками). Только нужно аккуратнее с тяжелой графикой, сжимать, чтобы браузер не тормозил.
    Кстати, на гитхабе есть примеры Tower Defence как на чистом js, так и под Godot.
    Ответ написан
    Комментировать
  • С помощью каких яп в 2020 делают браузерные игры?

    @cython
    ЯП: JavaScript, Typescript
    Фреймворки: Phaser, Pixi.js, ...

    Раньше Flash использовали, но сейчас он мёртв
    Ответ написан
    Комментировать
  • Взломали пароль от Mikrotik. Как?

    @Roc27 Автор вопроса
    Всем спасибо за ответы.
    Коллега все таки рассказал как это получилось у него.
    Я сам виноват, оставил дыру, а дело вот в чем:
    В этот день я настраивал тестовый вайфай на другом микротике, сразу не запаролил его. На этом микротике сделал пароль от вайфая qwertbhm (такой же пароль от админа на первом микротике).
    Он в Neighbors увидел второй микротик с вайфаем, попробовал тыкнуться в него без пароля, у него получилось. В нем он просмотрел пароль от вайфая и использовал для входа в первый микротик.
    Ну что ж, будет мне уроком, в следующий раз буду умнее.
    Ответ написан
    4 комментария
  • Как, чем, кем проверить сайт на уязвимости?

    @g0r0detskiy
    Ответ написан
    Комментировать
  • Какой ЯП для Десктопа?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Что-то странно, никто так Ява не упомянул, хотя как раз самый мощный кроссплатформ. Да, она часто используется в сегменте корпоративного рынка, но ничего не мешает настругать на ней нечто менее монструозное. Из ваших хотелок практически все покрывается, включая запуск из одного файла под вынь/линь.
    2.5. СОМ - ну тут я думаю все умеют
    Ну, допустим, не все, а только кто умеет в вин, ибо оно чисто виндовое.
    Ответ написан
    2 комментария
  • Удаленное подключение по ssh к железке?

    @Fixid Куратор тега Linux
    Из простого, но не бесплатного.
    1. Берете самый дешевый VPS.
    2. На железке делаете autossh до VPS
    3. На клиенте подключаетесь или к определенному внешнему порту VPS или просто заходите в систему и подключаетесь к локальному порту по ssh
    4. Пользуетесь железкой

    Гуглите Обратный ssh тунель
    MShNx.png

    P.S. вчитался в вопрос. Вам не нужен VPS, достаточно обратного туннеля до вашего сервера. На сервере будете подключаться через localhost
    Ответ написан
    1 комментарий
  • Есть ли разница между горутинами и await в C#?

    Tyranron
    @Tyranron
    Несмотря на то, что эти инструменты созданы для решения одних и тех же проблем, делают они это по-разному, как под капотом, так и в плане предлагаемых абстракций. Потому нельзя сказать что async/await в C# - это "просто обертка над горутинами".

    Горутины в Go - это концепция stackful coroutines (под капотом) + CSP (в абстракциях). Каждый раз, когда мы создаём горутину, под неё выделяется отдельный стек вызовов для её собственных нужд. При этом, когда происходит паника, то stack unwinding (размотка стека вызовов) происходит только в пределах этой горутины и не покидает границ её стека. Стек горутины полностью отвязан от стека её создания/вызова, потому горутина не может возвращать результат. Любое общение между горутинами выполняется либо посредством каналов, либо какой-то общей памяти.

    async/await в C# (то есть, Task'и) - это концепция stackless coroutines (под капотом) + futures (в абстракциях). Код с async/await'ами компилятор превращает в определенную стэйт-машину с yield point'ами. У них нет отдельного стека, они выполняются в том же стеке что и вызывающий их код. Соотвественно, есть возможность словить exception'ы (аналог panic'и) возникающие внутри асинхронного Task'а прямо в запускающем его коде. Так как выполнение идёт на том же стеке - Task нормально может возвращать результат и мы его можем считать в вызывающем коде без дополнительных примитивов/инструментов.

    При этом, если мы запустим Go с GOMAXPROCS=1, то мы получим однопоточный асинхронный код в Go (по умолчанию он многопоточный). Также и в C# мы можем выполнять Task'и как на одном потоке, так и на thread pool, получая аналогичные Go гарантии рантайма.

    С точки зрения абстракций/использования - это уже вкусовщина. Кому как больше нравится. У futures лучше дизайн в плане composability (их эргономичнее join'ить и select'ить), но они вынуждают писать везде async и await. У горутин надо постоянно городить чехарду с синхронизацией (попробуйте сделать аналог await для произвольной горутины), но если эту чехарду прятать под капот (как обычно и делают), то код вообще выглядит полностью синхронным и программисты радуются.
    Ответ написан
    4 комментария