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

    @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 комментарий
  • Смысл модификаторов доступа к абстрактным методам в абстрактных классах?

    @ddd329
    У такого класса два интерфейса, один публичный для клиентов, а второй для наследников, т.е. говорит им что нужно реализовать.
    Ответ написан
    Комментировать
  • Почему Go НЕ подходит для декстопа?

    uvelichitel
    @uvelichitel Куратор тега Go
    habrahabr.ru/users/uvelichitel
    В стандартной библиотеке нет GUI. И нет de-facto стандарта GUI библиотеки.
    Кроме того в декстопных приложениях остаются невостребованными goroutines, легковесные потоки. Go -- massively concurrent, это лучшее что он может предложить. А GUI приложения принято писать в event loop стиле, ну или event driven как в QT. Высоко-конкуррентные графические приложения никто писать толком не умеет, нет такой практики и основное достоинство языка не используется.
    Многопоточная архитектура графической системы обрисована Rob Pike в "A Concurrent Window System" и реализована в редакторе аcme для Plan9. Возможно эта работа вдохновит вас на создание очень необычных GUI приложений нового поколения))
    Ответ написан
    4 комментария
  • С помощью каких яп в 2020 делают браузерные игры?

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

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

    Раньше Flash использовали, но сейчас он мёртв
    Ответ написан
    Комментировать
  • Самый эффективный метод борьбы с читерами в онлайн шутерах?

    saboteur_kiev
    @saboteur_kiev Куратор тега Разработка игр
    software engineer
    Один из самых эффективных - платный аккаунт, который в случае читерства банишь.

    Методы борьбы зависят от конкретной игры и ее реализации.
    Просто набор слов, без готовой игры или ее концепции - вам не поможет.
    Ответ написан
    2 комментария
  • Взломали пароль от 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 комментария
  • Как устроиться на нормальную работу в такой ситуации?

    @stratosmi
    На работу на full time едва ли возьмут(армия и ограничения по времени для 16-17 летних).

    Фирме нужна прибыль. Не когда нибудь через год, когда ты в армию пойдешь.
    А прямо сейчас.
    Будут рады взять хотя бы на год.
    Фирме нужно хоть сколько то прибыли - будут рады и на неполный рабочий.

    Если ты действительно соображаешь.

    Учиться в ВУЗе - нет средств, а в ССУЗах меня печалит "уровень" образования(учусь в лучшем ССУЗе своей области, знаю о чем говорю).

    Не важно для подавляющего большинства программистов - ВУЗ не нужен.

    Осталось саморазвитие, но я уже сам развиваюсь достаточно долго без выхлопа(если так продолжиться просто перегорю).

    Не стоит вариться только в собственном соку.
    Для развития нужна работа в хорошей фирме в оффлайне (не удаленка)
    Ответ написан
    2 комментария
  • Как организовать паттерн "репозиторий" с возможностью переключаться на разные СУБД, а именно в c#?

    @chibitko
    Нужно было использовать ORM - это уже и Generic Repository и Unit Of Work.
    Например Entity Framework. Используя EF Code First и разные Entity Configurations (в общем случае достаточно одних), можно легко решить вашу задачу переключения между БД, меняя строку подключения и DB-провайдер.
    И не будет проблем с JOIN.
    Не нравится EF - используйте Dapper.net, легкая и быстрая ORM, на ней целый stackoverflow работает
    Ответ написан
    Комментировать
  • Go IDE

    akzhan
    @akzhan
    Вот и появился JetBrains Gogland.
    Ответ написан
    Комментировать