• Как получить первую работу на upwork?

    lunaticman
    @lunaticman
    Дерзкий айтишник
    Привет.

    Я успешно забустил свой профайл на Апворке до 80 баксов в час (сейчас я уже апворком не пользуюсь), порекомендовал свою систему други друзьям которые удачно нашли проекты потом. Поэтому постараюсь коротенько объяснить:

    - Первый проект тяжелее всего найти, я искал около месяца.
    - Нужно искать что-то "безопасное", проект который не займет у вас много времени и которые вы уверены что сделаете.
    - Советую даже не думать о почасовых работах, шанс крайне маленький.
    - Если у вас есть возможность, попросите кого то из существующих клиентов нанять вас (либо просто дайте им сто баксов, чтобы они вам якобы оплатили вашу работу).
    - На апворке есть несколько "прайм таймов" - периоды в которые появляются новая работа, я обычно мониторил работу пару часов в день. Не стоит тратить на "охоту" много времени. :)
    - Отказаться от любых шаблонов письм, я рекомендую как наниматель , шаблонные письма видно сразу - доверия не вызывает.
    - Попробуйте записать видео в качестве cover letter - только это вам поможет выгодно отличится в ряду других кандитатов
    - Выделите самые важные элементы в предложении о работе и объясните как вы их хотите изящно решить. В конце предложите обсудить все требования, задайте какие-то наводящие вопросы, дайте советы (нужно чтобы ваш клиент, узнал что-то новое от вас). То что вы сразу по описанию составляете план работ и архитектуру - без каких-либо уточнений и вопросов - звучит крайне фантастично.
    Ответ написан
    21 комментарий
  • В каких случаях вы использовали Redis?

    @chronic86
    Ruby on Rails junior
    1. Хранилище сессий и профилей пользователей;
    2. Сервер очередей, плюс держим в уме механизм publish/subscribe;
    3. Полноценная замена Memcached, притом в случае с Redis мы получим репликацию, более длинные ключи и значения, возможность восстановления кэша с диска и тп;
    4. Место для хранения количества пользователей онлайн, кодов капч, различных флагов, саджестов поисковых запросов;
    5. СУБД для небольших приложений — сокращалок ссылок, имиджбордов, возможно даже блогов;
    6. Роль «словаря» в шардинге, то есть сервер, который знает, какие шарды на каких серверах искать;
    7. Хранилище промежуточных результатов вычислений при обработке больших объемов данных;


    eax.me/redis
    Ответ написан
    Комментировать
  • Как пишутся системы оплаты для сайта?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Как осуществляется написание платежной системы касательно visa и mastercard или для конкретного банка? что делается в данном случае? (Допустим требуется работа со сбербанком и альфабанком).

    Из личного опыта:
    a. Приезжаете в офис банка у которого есть услуга "интернет эквайринг", показываете своё юрлицо, уставные документы, бенефициаров, обороты от 50 млн в месяц.
    * некоторые работают и с меньшими оборотами, но % будет крайне не выгодным.
    ** без запущенного и работающего проекта идти в банк бессмысленно.
    b. Ждете 2-6 недель пока СБ банка проверит все.
    c. Ждете 2-4 недели пока банк подпишет договор
    d. Получаете реквизиты и документацию API конкретного банка.
    e. Реализуете
    f. Ждете 1-2 недели пока банк проверит что у Вас все согласно их протоколу.
    g. Получаете боевые реквизиты.

    Учтите что:
    1. Если Ваши объемы меньше чем 50млн+ в месяц - с вероятностью 99% Вам будет СИЛЬНО выгоднее работать через посредника. Посмотрите на uniteller.ru , payture.com/ru , payler.com - если Вы будете достаточно убедительны на переговорах, вполне реально сторговать их до 2-2.5% даже на маленьких оборотах (1млн-5млн)

    2. Прямые API банков мягко говоря не современны. Как правило там не будет ни удобного личного кабинета, ни вменяемой службы поддержки - ничего. Зато будут проверки, требования бумажной отчетности и прочие милые сердцу советского бюрократа вещи.

    3. Риски при работе через посредника - по факту минимальны. Все приведенные выше делают выплаты ежесуточно, т.е даже если посредник накроется - Вы максимум рискуете дневным оборотом.

    С учетом данных пунктов, по моему мнению прямой договор с банком имеет смысл если у Вас настолько большие обороты - что разница в десятые доли процента окупает весь этот геморрой.
    По факту есть море проектов с большими оборотами (mamba, badoo, etc) кто продолжает работать через агрегатор, минимизируя расходы на юристов, бухгалтеров, техническую поддержку работы шлюза итд итп.
    Ответ написан
    1 комментарий
  • Что нужно для анонимности в сети? Какие средства для этого имеются? Как скрыть своё местонахождение и действия с финансовыми операциями?

    @lakegull
    1. Скрывает IP, трафик не шифруется, соответственно провайдер всё про вас знает.
    2. Логи, мозги, наводки.
    3.Да, сведение фактов воедино, может способствовать разорению уютного гнёздышка.
    4. и 5. Воспользуйтесь услугами VPN-провайдеров, которые не ведут логи. Весь трафик будет зашифрован и со стороны провайдера невозможно будет определить что вы делали и куда заходили. Желательно, чтобы сервера VPN-провайдера находились в стране, где его законодательно невозможно обязать раскрыть логи ( при условии, что они всё таки ведутся).
    Становлению качественной анонимности предшествует процесс подготовки. Я очень надеюсь, что все ваши действия с финансовыми операциями легальны, поскольку мои советы предназначены для сохранения коммерческой тайны организации.

    Техническая сторона: если вы кому-то будете очень интересны, то успешность выхода на вас это в основном просто вопрос денег. К примеру заставить VPN-сервис раскрыть свои логи будешь стоить недёшево, а заставить сразу двух провайдеров в разных странах открыть свои карты будете стоить 10х недёшево, и не факт, что получится.
    Во этому поэтому есть смысл шифровать трафик последовательно, через 2 VPN-сервиса.

    "Социал-инженеринговая" сторона:
    На вас можно выйти по косвенным признакам: вдруг на пару часов шифранулись, чего обычно не делаете. Сообщение вроде безобидное отправили человеку, сразу образуется ненужная связь с вами, а те, кому надо, просто начинают копать дальше. А вы в курсе, что более половины аккаунтов в разных социальных сетях СНГ и почтовых ящиков взламывается за считанные часы и эти услуги стоят копейки - менее 15000 рублей?
    Советы следующие:
    Полностью прекращайте общение по бизнесу через социальные сети. Бизнес-партнёров в друзья не добавляете (даже в FB) и сообщения им не пишете, любые. Рабочую почту желательно завести у зарубежных сервисов, обычно они платные, но это всего то около 30$ в год. Покупаете VPN и шифрует весь свой трафик всегда, а не только когда проводите операции.

    UPD

    Твой Товарищ:
    Если мой айпи зашифрован, но трафик - нет. Местоположение пользователя вычисляется?
    IP не может быть зашифрован, он просто изменён на другой. Возможность вычисления местоположения зависит прежде всего от сервиса, который вы используете для смены IP-адреса. Доверять свою анонимность бесплатным прокси-серверам и всяким "анонимайзерам" - это себе дороже. Большинство платных прокси-серверов могут обеспечить вам смену IP-адреса и при этом, как я уже говорил, не ведут логов, поэтому технически вас найти будет либо очень сложно, либо вообще невозможно. Пара слов о работе прокси-сервера: он меняет ваш IP на свой. Этот "свой" он берёт у другого простого пользователя в интересующей вас стране, ПК которого заражён троянским ПО. То есть весь трафик от вас / к вам идёт через ПК этого пользователя.
    Помимо отсутствия шифрования, у прокси-серверов есть и другие минусы, это нестабильная скорость и обрыв соединения (когда пользователь с троянским ПО перезагружается или выключает ПК).
    Приоритет, чтоб локация моего устройства была недоступно для других глаз

    Если это смартфон с сим-картой внутри, то тут всё сложнее. Дело в том, что оператор связи может определить местонахождение любого абонента с точностью в несколько десятков метров (в городе). Но на смартфоне так-же можно настроить VPN (OpenVPN) и работать анонимно. GSM-анонимность - это отдельная тема, слишком большая, чтобы раскрывать её здесь. Многие прошаренные бизнесмены общаются по бизнесу только с отдельного аппарата, сим-карта которого зарегистрирована на кого-нибудь из своих охранников. В РФ пробивается любая информация, даже просушка телефонных разговоров, это лишь вопрос цены.
    И если я правильно понимаю, то трафик - это поток информации и деятельности в сети?
    Это те самые мегабайты и гигабайты информации, которую вы скачиваете с сети или наоборот отправляете в сеть. Информация разбивается на небольшие "пакеты", и они гуляют от сервера к серверу.
    И и очень важное что такое ЛОГИ?
    Это журнал протоколирования, который находится на каком-либо сервере, в нём ведётся учёт того, с какого сервера и во сколько пришёл пакет с данными и на какой сервер он был переадресован впоследствии. Это цепочка, следы на снегу, которые могут в итоге привести к вашему реальному местоположению. Эта цепочка обрывается на том месте, где сервер (в данном случае VPN-провайдер), не ведёт логи.
    Насчет по социал-инжиниринговой стороне мало понял, если есть время, то можете раскрыть?
    Социальная инженерия, это способ с помощью которого можно обойти технические средства защиты информации и получить желаемую информацию, опираясь на человеческий фактор и человеческие слабости. Если по простому - это развод кого-либо из ваших знакомых, с целью получить какую-либо информацию о вас. Если это делает профессионал, который предварительно собрал о вас информацию из открытых источников, то скорее всего вы даже не заметите, когда у вас из под носа уведут конфиденциальные данные. Эта тема ещё более огромная, чем GSM-анонимность.
    И насколько я знаю, то сторонние интерне-ресурсы обязаны по закону держать сервера с информацией на территории России. "Закон о персональных данных" который обязывает интернет-компании хранить личные данные российских пользователей внутри страны.
    VPN-провайдеры, у которых вы шифруете свой трафик, не хранят у себя на серверах скаченные вами данные. Они лишь обеспечивают транзитный трафик + его шифрование, ну и смену IP, конечно. Соответственно по действие закона о персональных данных не попадают.

    VPN работает, как показано на схеме:
    78d40072cea44952aa92a74e31288455.JPG

    По данной схеме ваш IP-адрес будет заменён на IP-адрес сервера в Нидерландах. То есть для владельца сайта, который вы посещаете, вы будите определяться как посетитель из Нидерландов.

    При VPN-соединении, провайдер, который предоставляет вам доступ в интернет может лишь посчитать объём скаченных вам данных, но не может определить их содержимое. Так-же не может определить происхождение этих данных.

    Напоследок.
    У любой анонимности есть две фазы:
    1) до того момента, как вашу личность начали ассоциировать с определённым событием
    2) после этого момента.

    В первом случае вам будет достаточно просто шифрования с последовательным соединением через двух VPN- провайдеров.
    Во втором случае риск утечки конфиденциальных данных многократно увеличивается. Если есть возможность не делиться конфиденциальной информацией с партнёрами по бизнесу, то не делитесь ею. Большинство людей взламывается на на раз-два.

    UPD2
    еще тут человек выше вашего комментария пишет, что провайдер и так знает, где пользователь находится, если пользоваться вашими советами, то можно этого же избежать.?То вроде всё понятно с ваших слов, но встречаются некоторые разноглася между комментаторами.


    Видимо человек подразумевает что для провайдера вы не являетесь анонимным пользователем. Это верно, поскольку он вам предоставляет доступ в интернет по договору, оформленному на паспортные данные реального человека. На ваш или нет - это не важно. Физический доступ к ПК может быть у нескольких людей, но спрашивать прежде всего будут с того, чья фамилия в договоре. Разумеется это случиться только при условии что логи приведут к вам. Если всё сделать грамотно, то это не произойдёт никогда. А пока нету прецедента - никто никого искать не будет. Я повторюсь - попытка найти хвосты из IP-адресов, выстроить всю цепочку и выйти на реального человека, это очень недешёвое занятие и не факт, что будет хоть какой-нибудь результат. Браться за это дело заинтересованные лица будут только в том случае, если есть хоть какие-то гарантии, что результат покроет потраченные ресурсы. А пока вы не долларовый миллионер - никто такой марш бросок ради вас делать не будет.

    Вопрос о провайдере, который о вас знает иллюстрируется следующей аналогией:
    Вот вы идете по улице и видите вокруг себя людей, верно? Вы видите лица людей, возможно некоторые из этих лиц вам встречались ранее, возможно некоторых вы знаете по имени и даже знаете их паспортные данные (допустим коллегу по прошлой работе встретили). Вы знаете где эти люди сейчас находятся (в поле вашего зрения!), вы видите с кем они сейчас общаются, при желании вы даже можете запомнить номера и марку машины, куда они сели. Вопрос: ДАЛЬШЕ ТО ЧТО!
    Вы же не можете утверждать, что человек проходящий мимо вас в чёрных очках надел их потому, что хочет скрыть глаза, поскольку вам кажется, что очки в пасмурную погоду могут одевать только те, кто совершил какое-то преступление. Это всего лишь ваша интерпретация.
    Тоже самое и с провайдером - он не может утверждать, что вы занимаетесь чем-то нелегальным просто на основании того, что начали шифровать весь трафик. В мире любая вменяемая организация шифрует весь свой трафик. Это коммерческая тайна! Так должно быть! В противном в голове у службы безопасности такой организации - СОВОК.

    Последуйте моим рекомендациям: шифруйте ваши конфиденциальные данные и ни пускайте за штурвал ваших ПК и мобильных устройств людей, кого недостаточно хорошо знаете. Высыпаться станете лучше.
    Ответ написан
    19 комментариев
  • Как пишете unit тесты для Android приложения?

    TranE91
    @TranE91
    Senior Android Engineer
    Раньше использовал Robolectric при тестировании ORMLight функционала более чем хватало.
    С выходом AndroidStudio Beta 2.0 отказался от либ(возникли проблемы с Realm интеграцией для Robolectric - использование нативной либы) и исопльзую только коробочные методы. + теперь нету звездоплясок с внедрением jacoco для CodeCoverage, он уже в коробке. В целом, по мере необходимостей, перешел на TDD разработку и она себя очень окупает. А с новыми плюшками в AndoridStudio это делается в 2 клика и с большей простотой.

    Если в 2х словах про тесты. В директории вашего проекта имеется 2 папочки - androidTest и test. androidTest - те тесты, которые необходимо запускать только на телефоне(эмуляторе) и никак иначе, test - те которые не требуют обязательной эмуляции android у-ва, но с помощью вспомогательных утил robolectric, robotium... это очень может облегчить жизнь. В целом, для себя, убедился в одном - если у вас не стоит задачи развертывания continuous integration, то можете спокойно дерзать androidTest, если же есть такая задача, то стоит сразу переходить в директорию test и крутить все тесты там(хотя миграция тестов не займет много времени, костылей с интеграцией robolectric будет хватать)

    Для себя убедился, что писать тесты нужно, ибо при поддержке продукта без тестов вы рано или поздно сдохнете )
    Ответ написан
    3 комментария
  • Через что лучше осуществлять вставку/обновление большого количества записей в YII2, DAO, или AR?

    Akdmeh
    @Akdmeh
    PHP, Yii2, Music
    Вы знаете, разница между AR и DAO была тогда, когда в первой версии Yii AR обновляла все поля в модели при запросе на UPDATE независимо от того, какие из них были изменены.
    Во второй версии Yii2 над оптимизацией была проведена замечательная работа, поэтому если разница в количестве памяти и есть, то не слишком большая, а запросы, по сути, будут отправляться те же.
    Поэтому если не критично время исполнения, и вы грамотно будете использовать ModelName::find()->each(), и при этом не забудете выключить режим debug, то используйте AR.
    Это, конечно, если нет экзотических и специфических запросов.
    Ответ написан
    Комментировать
  • Какие есть крупные open-source проекты на PHP?

    27cm
    @27cm
    TODO: Написать статус
    fideloper/fideloper.com
    jasonlewis/website
    Блоги на Laravel.

    yhbyun/laravel-bookmark
    Менеджер закладок на Laravel.

    DotPlant 2
    CMS для интернет-магазинов на Yii 2 (примеры сайтов).

    Piwik
    Система аналитики, альтернатива Google Analytics.

    Magento 2
    CMS для интернет-магазинов на Zend Framework 2 (примеры сайтов).

    И ещё кучу популярных сайтов с открытым исходным кодом можно найти на GitHub:
    https://github.com/search?l=PHP&o=desc&q=website&r...
    (laravel-tricks.com, packagist.org, elementary.io, joind.in...)
    Ответ написан
    1 комментарий
  • Что мой провайдер знает обо мне?

    @nirvimel
    Когда я захожу на определенный сайт, провайдер видит URL?

    Да.

    А если я захожу на https?

    Известен IP сервера и имя домена. Больше ничего.

    Откуда провайдер узнает, что я скачиваю определенный фильм/программу через torrent?

    Торрент-клиент общается с трекером по HTTP. Все видно насквозь: конкретные торренты + вся статистика (когда начато скачивание, когда закончено, когда пошла раздача, сколько роздано). Возможно подключение к трекеру и по HTTPS, но rutracker.org такой возможности не дает (мне тоже интересно почему).

    Все пакеты которые я получаю и раздаю значит провайдер скачивает себе, чтобы узнать что это за фильм/программа?

    Провайдер не хранит у себя весь трафик. Это технически невозможно. Но трафик обрабатывается, классифицируется и ведутся логи о том какой тип трафика когда входил/уходил от абонента.

    Или он отслеживает факт скачивания .torrent файла, а затем делает вывод по идущим пакетам, что это скачивается?

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

    Когда я пользуюсь VPN, что видит провайдер?

    Видит шифрованный траффик на конкретный IP. По IP можно узнать, что этот диапазон продается под VPSы. Сам факт шифрованного трафика вешает абонента в списки тех, "кому есть что скрывать", а значит подозреваемых при любом розыске.

    Что я зашел на определенный IP и с него идут зашифрованные потоки?

    Дальнейшее направление трафика от VPN-сервера отследить невозможно (по крайней мере, на оборудовании провайдера в автоматическом режиме). Но при целенаправленной слежке за абонентом в принципе возможно по временным меткам сопоставить трафик абонента с трафиком любого сервера.

    OpenVPN будет работать через VPN IP и в браузере и при обновлении Windows, драйверов, ...?

    В зависимости от настройки. Но в общем случае, да, так.

    Читал, что в Windows есть такая особенность, что если провайдер как-то урезает пакет, то VPN отключается и сайту показывается мой реальный IP?

    Это не связанно с провайдером. Это особенность Windows. Когда VPN отваливается, весь трафик вылетает наружу в открытом виде. Опять же зависит от настроек. Но это еще одна цена "удобства" при использовании Windows.

    При этом провайдер видит на каком я сайте, что скачиваю?

    VPN отвалился - хацкер спалился.

    Таких фишек много?

    Смотря о чем речь. В сфере сетевой безопасности и анонимности различных нюансов вообще много.

    Как от них защитится?

    Учить мат.часть. Разбираться в сетевых протоколах и в устройстве ОС.

    Если пользуюсь каким-то расширением типа ZenMate, dotvpn, провайдер аналогично как и с VPN видит что что-то отправляется и приходит на определенный VPN IP?

    Расширения очень разные. Они могут базироваться на совершенно разных технологиях. Ни один специалист вам не скажет за все расширения. Не исключено, что многие из них, по сути - honeypot, то есть созданы с целью слежения за любителями анонимности, привлекают своим удобством и дают ложное чувство безопасности.

    При использовании Tor, кто-то пользуется моим IP, пока я пользуюсь чужим?

    Нет. Если у вас не сконфигурирован Exit Node.

    Что при этом видит провайдер, что я получаю потоки данных с определенных IP и каждый раз разный IP?

    У них есть система точного обнаружения использования Tor. Это факт остается в логах с теми же последствиями, что и для VPN.

    Провайдер видит URL?

    Через Tor и VPN - нет.

    Каким образом можно полностью управлять сетью на ПК, видеть что, куда и когда отправляется или приходит на ПК (Windows, Linux)?

    Видеть все: https://www.google.com/search?q=Wireshark
    Блокировать все лишнее: https://www.google.com/search?q=Comodo+Firewall
    Ответ написан
    22 комментария
  • Попросили проверить код, на что смотреть нужно?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Смотря зачем)). Я когда делаю Code Review критерии следующие:

    * Безопасность:
    - Каждый аргумент метода простого типа должен проверяться на тип в случае его проксирования и на граничные значения в случае обработки. Чуть что не так - бросается исключение. Если метод с кучкой аргументов на 80% состоит из поверки из аргументов - это вполне норм))
    - Никаких trigger_error, только исключения.
    - Исключения ДОЛЖНЫ быть человеко-понятны, всякие "Something went wrong" можно отдавать пользователю, но в лог должно попасть исключение со стектрейсом и человеко-понятным описанием, что же там пошло не так.
    - Каждый аргумент (объект) метода должен быть с тайпхинтингом на этот его класс, или интерфейс.
    - За eval как правило шлю на **й.
    - @ допускается только в безвыходных ситуациях, например проверка json_last_error.
    - Перед работой с БД - обязательная проверка данных.
    - Никаких == и !=. Со swtich - единственное исключение, по ситуации.
    - Если метод возвращает не только bool, а еще что-то - жесткая проверка с ===, или !== обязательна.
    - Никаких условий с присваиваниями внутри. while($row = ...) - тоже идет лесом.
    - Магические геттеры/сеттеры разрешаются только в безвыходных ситуациях, в остальном - запрещены.
    - Конкатенации в sql - только в безвыходных ситуациях.
    - Параметры в sql - ТОЛЬКО через плейсхолдеры.
    - Никаких глобальных переменных.
    - Даты в виде строки разрешаются только в шаблонах и в БД, в пхп коде сразу преобразуется в \DateTimeImmutable (в безвыходных ситуациях разрешено \DateTime)
    - Конечно зависит от проекта, но как приавло должно быть всего две точки входа: index.php для web и console(или как-то по другому назваться) - для консоли.

    * Кодстайл PSR-2 + PSR-5 как минимум, + еще куча более жестких требований (для начала все то что в PSR помечено как SHOULD - становится MUST)
    - В PhpStorm ни одна строчка не должна подсвечиваться (исключением является typo ошибки, например словарик не знает какой-то из аббревиатур, принятых в вашем проекте). При этом разрешается использовать /** @noinspection *** */ для безвыходных ситуаций.
    - Если кто-то говорит, что пишет в другом редакторе и у него не подсвечивается, на эти отговорки кладется ВОТ ТАКЕЕЕНЫЙ мужской половой **й и отправляется на доработку)).

    * Организация кода:
    - Никаких глобальных функций.
    - Классы без неймспейса разрешаются только в исключительно безвыходных ситуациях.

    * Тестируемость (в смысле простота тестирования) кода должна быть высокая.
    - Покрытие кода обязательно для всех возможных кейсов использования каждого публичного метода с моками зависимостей.

    * Принципы MVC:
    - Никаких обработок пользовательского ввода в моделях, от слова совсем.
    - Никаких ***ть запросов в БД из шаблонов.
    - Никаких верстки/js/css/sql-ин в контроллерах.
    - В моделях НИКАКОЙ МАГИИ, только приватные свойства + геттеры с сеттерами.
    - В моделях разрешено использовать метод save(при наличии такого разумеется) только в исключительных ситуациях. Во всех остальных - либо insert, либо update.

    * Принципы SOLD:
    - Никаких божественных объектов умеющих во все.
    - Если метод для внутреннего пользования - private, никаких public.
    - Статические методы разрешаются только в случае безвыходности.

    * Принцип DRY разрешено нарушать в случаях:
    - Явного разделения обязанностей
    - В тестах (каждый тест должен быть независимым, на сколько это возможно)

    * Работа с БД:
    - Запрос в цикле должен быть РЕАЛЬНО обоснован.
    - За ORDER BY RAND() - шлю на***й.
    - Поиск не по ключам (конечно если таблица НЕ на 5 строк) запрещен.
    - Поиск без LIMIT (опять же если таблица НЕ на 5 строк) запрещен.
    - SELECT * - запрещен.
    - Денормализация БД должна быть обоснована.
    - MyISAM не используется (так уж)) )
    - Множественные операции обязательно в транзакции, с откатом если чо пошло не так.
    - БД не должна содержать бизнес логики, только данные в целостном виде.
    - Не должно быть нецелесообразного дерганья БД там, где без этого можно обойтись.

    * Кэш должен очищаться по двум условиям (не по одному из, а именно по двум):
    - Время.
    - Протухание по бизнес логике.
    Разрешается по только времени в безвыходных ситуациях, но тогда время - короткий период.
    - При расчете ключей кэша должна использоваться переменная из конфигурации приложения (на случай обновлений кэш сбрасывается кодом, а не флашем кэш-сервера). В случае использования множества серверов - это очень удобный и гибкий инструмент при диплое.

    * О людях:
    - "Я привык писать так и буду дальше" - не вопрос, ревью пройдешь только когда поменяешь свое мнение.
    - "Я пишу в vim-е и мне так удобно" - здорово, код консолью я тоже в нем пишу)) но есть требования к коду, если в них не сможешь - не пройдешь ревью.
    - "Я скопировал этот страшный метод и поменял 2 строчки" - это конечно замечательно, но по блейму автор всего этого метода ты, так что давай без говняшек, хорошо?
    - "Оно же работает!" - вот эта фраза переводится примерно так: "да, я понимаю, что пишу полную хрень, но не могу писать нормально потому, что руки из жо", я правильно тебя понял?))
    - "У меня все работает!" - рад за тебя, а как на счет продакшна?
    - "Там все просто" - не используй слово "просто", от слова "совсем". Вот тебе кусок кода (первого попавшегося с сложной бизнес логикой), где там ошибка (не важно есть она, или нет)? Ты смотришь его уже 2 минуты, в чем проблема, там же все "просто"))

    * Всякое:
    ActiveRecord (это я вам как в прошлом фанат Yii говорю) - полное говно, примите за исходную. По факту у вас бесконтрольно по проекту гуляют модельки с подключением к БД. Не раз натыкался на то, что в тех же шаблонах вызывают save, или update (за такое надо сжигать).
    То, что используется Laravel - это печально((. Что бы выполнить требования приведенные выше, приходится "воевать" с фреймворком.

    Это далеко не полный список требований, очень много зависит от проекта в целом и от принципов, заложенных в нем. Для больших мредж реквестов 200 комментариев к коду - это ок. Дерзайте.

    UPD

    Формализировал данные критерии по ссылочке: https://github.com/index0h/php-conventions
    Ответ написан
    55 комментариев
  • Зачем изучать java.util.concurrent, если пишешь под Android?

    @onepavel
    Консультация и разработка мобильных приложений
    1 BlockingQueue музыкальный плеер, есть очередь откуда проигрываются треки, плеер снизу забирает трек, сверху пользователь накидывает в очередь новые треки. работа с очередью идет из разных потоков.
    2 качалка файлов, очередь файлов для закачки, настройками могу регулировать кол-во одновременно качающих потоков
    3 CountDownLatch отличный инструмент для отсчета оставшегося времени
    4 CyclicBarrier чумовой механизм ожидания завершения работы нескольких потоков, парсинг сайта,
    закачка файлов, обработка текстов, подсчет данных или игр
    5 Executors и ExecutorService быстрая организация пула потоков использую для работы с sqlite,
    а также ScheduledExecutorService для организации таймера для проверки изменения чего либо у пользователя на девайсе
    6 полезная штука Exchanger, моментальная реализация задачи producer - consumer
    7 ConcurrentHashMap вообще классика для организации хешей, это сейчас есть LRU, а раньше не было. А было WeakReference и эксперементы с очередями и хешами WeakHashMap
    8 Atomic, легко позволяют создавать потоко-безопасные переменные, использовал AtomicBoolean, как межпотоковый стейт
    Я знаю, что есть конторы, как крупные так и мелкие не используют Retrofitы robospicы DI фреймвори и так далее.
    Учитывая проблемы с 65к dex, из-за тучи либ сторонних и особенно play services, собрать уже сложно.
    И для мелкой задачи стоит ли с собой тащить либу, вопрос холиваный
    И стоит знать java.util.concurrent потому что, это используется в либах. Тот же volley, там три чистых потока Thread для выполнения http, а в ui пробрасывается через хендлер и Executor
    Ответ написан
    5 комментариев
  • Как начать познание информационной безопасности?

    ranebull
    @ranebull
    Можно начать с просмотра тех же видео от Яндекс КИТ (Курсы Информационных Технологий):
    Безопасность Unix-подобных ОС
    Криптография, шифрование
    Обзорная лекция по безопасности
    Сетевая безопасность
    Информационная безопасность
    Безопасность информационных систем
    Информационная безопасность
    Безопасность информационных систем
    Из книжек можно прочитать Андрей Бирюков: Информационная безопасность: защит...
    На том же Хабре можно пролистать раздел ИБ, чтобы понять, что можно выбрать
    InfoSecurity
    Из общего, думаю, уже можно будет понять, какими прикладными вещами заниматься.
    Ответ написан
    5 комментариев
  • Как правильно написать авторизацию/аутентификацию?

    dasha_programmist
    @dasha_programmist
    ex Software Engineer at Reddit TS/React/GraphQL/Go
    Есть два варианта хранения данных об авторизованном пользователе:
    1) В куки (так по умолчанию используется в асп.нет): необходимые данные (claims) шифруются machineKey и отдаются пользователю в http-only куках, таким образом при каждом запросе на сервер они присылаются, расшифровываются и далее можно проверить в необходимых местах.
    плюсы: полностью stateless, нет надобности обращаться к БД
    минусы: при необходимости "выбить" сессию со стороны сервера нужно поднимать более сложную логику и хранить флаги в промежуточном хранилище (проверять что если для такого-то пользователя требуется завершить, то такие действия, иначе другие);
    2) Ключ сессии: после успешной аутентификации авторизуем пользователя и claims храним на сервере в быстрой памяти или БД (key-value), где ключ - ключ сессии, значение - любые данные.
    плюсы: есть полный контроль состоянием авторизации (как и возможность завершить сессию со стороны сервера, так и сменить пользователю роль(или другие параметры) "на лету")
    минусы: организация доп. прослойки - кэша или хранение в БД (медленно), при перезапуске/падении сервиса сессии клиентам потребуется перелогиниться.

    1
    1.1 В куки писать или ключ сессии или шифрованные данные о пользователе, сессия - абстрактное понятие (это пара: ключ и данные), ключ должен быть защищенным, т.е. трудным к копированию (хотя бы зрительно трудно запомнить), уникальным (чтобы не возникло коллизий: двум разным пользователям выдался один и тот же ключ, т.е. это не должна быть хэш-функция от логина-пароля или IP или чего-то неуникального).
    1.2 В асп.нет существуют атрибуты авторизации (в которых можно расставлять проверки на требование таковой, роль, конкретный пользователь), в общем смысле логика такова: поступил запрос на сервер, далее нужно посмотреть к какому ресурсу идёт обращение (защищенному или свободному), если ресурс защищен, то проверить куки (ключ сессии или шифрованные данные), расшифровать/получить данные о сессии из кэша и предпринять решение: пускаем или не пускаем (отдаём 401/403 или отдаем 200/404/...).
    1.3 Завести на сервере (в кэше или БД) словарь , при алгоритме проверки сессии добавить условие проверки на наличие записи в словаре.
    1.4 С нескольких - словаря не нужно.

    2
    2.1 Даже если пользователь входит через ВК всё равно нужно отдавать свои ключи сессий/шифрованные данные, а вот внутри данных уже хранить access_token от вк-шной сессии, так очень маленькая вероятность, что токен ВК утечет, а если утек ключ сессии, то действия будут ограничены только функционалом сайта.
    2.2 После расшифровки куки или данных по ключу сессии делать доп запрос на сервер ВК с токеном, который сохранился при аутентификации (access_token), запрос простой, например получить имя пользователя, если ВК выдал что токен просрочен или ошибку, то сессию закрывать или куки с данными обнулять.
    Ответ написан
    3 комментария
  • Сидячий образ жизни кодера на самом деле ухудшает здоровье?

    zooks
    @zooks
    Frontend
    Да, работаю больше 10 лет. Имеется небольшой лишний вес. Но просто учишься делать перерывы, делать разминку. Как в первом классе "мы писали, наши пальчики устали". К оборудованию рабочего места подходишь с большей ответственностью, чтобы осанка была прямая, колени согнуты на 90 градусов.

    Больше всего страдает зрение - на помощь приходят программы EyeLeo и F.lux.

    Для сброса/поддержания веса и укрепления мышц рекомендую ходьбу.
    Ответ написан
    2 комментария
  • Как обойти 403, чтобы скачать фотографии?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Не надо ничего обходить.
    403 - это значит брать не разрешено.

    Ты еще спроси, как обойти замок на двери, чтобы взять деньги из чужой квартиры.
    Ответ написан
    Комментировать
  • Как стать успешным хакером/программистом?

    @Exotic33
    Поучи что-нибудь про шифрование, алгоритмы. Затем эксплоиты, вирусы, дорки, инъекции... Напиши свой червяк.
    Поищи на сайтах вирусный софт, изучай его. Напиши такой же. Зайди на сайт школы, попробуй выявить xss. Если выявишь, ставь свой север со сниффером, и внедряй в html с помощью Charles какую-нибудь картинку которая отправляет тебе логи.
    Ещё ужаснее? Потом попробуй сделать свой собственный билд. Твой уровень станет расти. Изучая кали линукс ты добьешься чего-то больше, чем банальное внедрение. И так, ты сольешь базу гугла...
    Ответ написан
    1 комментарий
  • Как создать видеохостинг с нуля?

    главное - приготовь пару камазов денег на дата-центр.
    Ответ написан
    Комментировать
  • Как создать видеохостинг с нуля?

    Symphony
    @Symphony
    Берете Жомла, подключаете Жикверу, 6 плагинов.
    Готово!
    Ответ написан
    Комментировать
  • Как и в каких случаях использовать DI в Yii2?

    SamDark
    @SamDark
    Yii2 core team
    DI именно в вашем случае не при чём. Это способ реализации, а не сама идея. Идея состоит в том, что вам нужно реализовать принцип инверсии зависимостей. То есть начать работать с интерфейсами, а не с конкретными реализациями.

    Чтобы быть универсальным и переносимым, модуль не должен знать о моделях извне себя. Вместо этого он должен выражать свои требования в виде интерфейса, а внешние модели этот интерфейс должны реализовывать.

    Для вашего примера делаем в модуле Article делаем интерфейсы:

    interface ArticleInterface
    {
        public function getTitle();
        public function getAuthor();
    }
    
    interface ArticleAuthorInterface
    {
        public function getName();
        public function getID();
    }


    Далее в пределах модуля используем только интерфейсы, а не сами модели:

    public function renderArticle(ArticleInterface $article)
    {
        return $this->renderPartial('_article', [
             'author' => $article->getAuthor(), 
             'title' => $article->getTitle()
        ]);
    }


    Вне модуля нам придётся реализовать интерфейсы в моделях:

    class Article extends ActiveRecord implements ArticleInterface
    {
       // ...
    }
    Ответ написан
    34 комментария
  • Какую литературу почитать для саморазвития?

    @jackroll
    Сверхразум
    1984
    О, дивный новый мир
    Автостопом по галактике
    Воровка книг
    451 градус по Фаренгейту
    Скотный двор
    Мы
    Заводной апельсин
    Кысь
    Котлован
    Бойня номер пять, или Крестовый поход детей
    Колыбель для Кошки
    Повелитель мух
    Престиж
    Мемуары гейши
    Дом, в котором...
    Над пропастью во ржи
    Собачье сердце
    Сто лет одиночества
    Загадай число
    Остров проклятых
    Исчезнуть не простившись
    Основание
    На игле
    Бойцовский клуб
    Ответ написан
    3 комментария