• Как украсть Macbook



      У меня несколько раз воровали макбуки, и ни разу антикражные средства Apple вроде Find My Mac не помогли мне вернуть компьютер. Действительно ли они бесполезны? Можно ли доверять встроенному шифрованию FileVault? Как повысить шансы вернуть компьютер? Эта статья результат моих страданий в безрезультатных попытках вернуть украденные компьютеры.

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

      Внимание!
      Материалы в статье представлены исключительно в ознакомительных целях. Все описания мошеннических действий инсценированы и выполнены с согласия владельцев ноутбуков. Автор не призывает к мошенническим действиям, и единственная цель статьи — показать, как лучше настраивать систему, чтобы защитить свои данные.
      Читать дальше →
    • Чему я научился на своём горьком опыте (за 30 лет в разработке ПО)

      • Translation
      • Tutorial
      image

      Это циничная, клиническая коллекция того, чему я научился за 30 лет работы в разработке программного обеспечения. Повторюсь, некоторые вещи весьма циничны, а остальное — результат долгих наблюдений на разных местах работы.
      Читать дальше →
    • Мошенники и ЭЦП — всё очень плохо


        Недавно общественность облетела новость о первом случае продажи квартиры мошенниками с помощью ЭЦП и подделки документов. Когда я раньше читал подобные новости, всегда воспринимал отстранённо, как будто со мной этого не может произойти, но я ошибался. И теперь могу заявить, в зоне риска мошенников — каждый, увы, даже хабровчане.

        Читать дальше →
      • Ищем свободное парковочное место с Python

        • Translation
        image

        Я живу в хорошем городе. Но, как и во многих других, поиск парковочного места всегда превращается в испытание. Свободные места быстро занимают, и даже если у вас есть своё собственное, друзьям будет сложно к вам заехать, ведь им будет негде припарковаться.

        Поэтому я решил направить камеру в окно и использовать глубокое обучение, чтобы мой компьютер сообщал мне, когда освободится место:

        image

        Это может звучать сложно, но на самом деле написать рабочий прототип с глубоким обучением — быстро и легко. Все нужные составляющие уже есть — нужно всего лишь знать, где их найти и как собрать воедино.

        Поэтому давайте немного развлечёмся и напишем точную систему уведомлений о свободной парковке с помощью Python и глубокого обучения
        Читать дальше →
      • Работаем в консоли быстро и эффективно

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

        Читать дальше →
      • Авторизация клиентов в nginx посредством SSL сертификатов

          Введение:


          Потребовалось мне тут как-то написать небольшой API, в котором необходимо было помимо обычных запросов принимать запросы с «высокой степенью секретности».
          Не я первый с этим столкнулся и мир давно уже использует для таких вещей SSL.

          Поскольку на моём сервере используется nginx, то был установлен модуль SSL
          Гугл не выдал ни одного работоспособного howto, но информация в сети есть по частям.

          Итак, пошаговое руководство по настройке nginx на авторизацию клиентов через SSL-сертификаты.
          Читать дальше →
        • Курс о Deep Learning на пальцах

            Я все еще не до конца понял, как так получилось, но в прошлом году я слово за слово подписался прочитать курс по Deep Learning и вот, на удивление, прочитал. Обещал — выкладываю!

            Курс не претендует на полноту, скорее это способ поиграться руками с основными областями, где deep learning устоялся как практический инструмент, и получить достаточную базу, чтобы свободно читать и понимать современные статьи.

            Материалы курса были опробованы на студентах кафедры АФТИ Новосибирского Государственного Университета, поэтому есть шанс, что по ним действительно можно чему-то научиться.


            Читать дальше →
          • Внутри Гиперактивности

              image

              Предупреждение: Данная статья написана не квалифицированным врачом-психиатром, а пациентом с тяжелой патологией.

              Напоминание: СДВГ, тем более в такой сильно выраженной форме, обостряет многие когнитивные искажения. У таких пациентов, как я, выпукло проявляется эффект Даннинга-Крюгера. Переходящая все границы небрежность компрометирует факты и источники информации, а сниженный интеллект при полном отсутствии внимания к значимым деталям ставит под сомнение выводы и обобщения.

              Цель этой статьи — максимально честное и беспристрастное описания работы СДВГшного мозга с примерами конкретных кейсов с максимально доступным мне по части компетентности анализом.
              Если для вас это важная тема — касается ребенка или Вы сами придурок, но очень не хотите им быть, добро пожаловать под кат.
              Читать дальше →
            • Регулярные выражения в Python от простого к сложному. Подробности, примеры, картинки, упражнения

              • Tutorial

              Регулярные выражения в Python от простого к сложному




              Решил я давеча моим школьникам дать задачек на регулярные выражения для изучения. А к задачкам нужна какая-нибудь теория. И стал я искать хорошие тексты на русском. Пяток сносных нашёл, но всё не то. Что-то смято, что-то упущено. У этих текстов был не только фатальный недостаток. Мало картинок, мало примеров. И почти нет разумных задач. Ну неужели поиск IP-адреса — это самая частая задача для регулярных выражений? Вот и я думаю, что нет.
              Про разницу (?:...) / (...) фиг найдёшь, а без этого знания в некоторых случаях можно только страдать.

              Плюс в питоне есть немало регулярных плюшек. Например, re.split может добавлять тот кусок текста, по которому был разрез, в список частей. А в re.sub можно вместо шаблона для замены передать функцию. Это — реальные вещи, которые прямо очень нужны, но никто про это не пишет.
              Так и родился этот достаточно многобуквенный материал с подробностями, тонкостями, картинками и задачами.

              Надеюсь, вам удастся из него извлечь что-нибудь новое и полезное, даже если вы уже в ладах с регулярками.
              Читать дальше →
            • Лицензия для вашего open-source проекта

                В этой статье я хочу немного поговорить об авторском праве и свободных лицензиях на ПО. Текст является результатом самостоятельного выбора лицензий и их применения к своим проектам.

                Статья будет полезна тем, кто хочет:

                — в общих чертах понять, что такое авторское право (но лучше обратиться к юристу);
                — подобрать свободную лицензию для своего проекта;
                — разобраться, что нужно писать в шапке файла исходного кода.
                Читать дальше →
              • Консоль разработчика Google Chrome: десять неочевидных полезностей

                • Translation
                Как с помощью консоли разработчика превратить Google Chrome в подобие текстового редактора? Какой смысл в ней приобретает знакомый многим по jQuery значок $? Как вывести в консоль набор значений, оформленный в виде вполне приличной таблицы? Если сходу ответы на эти вопросы в голову не приходят, значит вкладка Console из инструментов разработчика Chrome ещё не раскрылась перед вами во всей красе.

                image

                На первый взгляд, перед нами – вполне обычная JavaScript-консоль, которая годится только на то, чтобы выводить в неё логи ответов серверов или значения переменных. Я, кстати, так ей и пользовался, когда только начал программировать. Однако, со временем набрался опыта, подучился, и неожиданно для себя обнаружил, что консоль Chrome умеет много такого, о чём я и не догадывался. Хочу об этом сегодня рассказать. Да, если вы читаете сейчас не на мобильнике, можете тут же всё это и попробовать.
                Читать дальше →
              • Полное практическое руководство по Docker: с нуля до кластера на AWS

                • Translation



                Содержание



                Вопросы и ответы


                Что такое Докер?


                Определение Докера в Википедии звучит так:


                программное обеспечение для автоматизации развёртывания и управления приложениями в среде виртуализации на уровне операционной системы; позволяет «упаковать» приложение со всем его окружением и зависимостями в контейнер, а также предоставляет среду по управлению контейнерами.



                Ого! Как много информации.

                Читать дальше →
              • Tarantool: как сэкономить миллион долларов на базе данных на высоконагруженном проекте

                  Аникин Денис (@danikin, Mail.Ru)


                  Денис Аникин

                  Сегодня я расскажу, как сэкономить на базах данных огромные деньги, например, миллион долларов, как это сделали мы. Для начала вопрос: почему чаще используют именно базы данных, а не файлики?

                  Базы данных – это хранилище, более структурированное, чем файл, и обладающее рядом некоторых фич, которых у файла нет.



                  Там можно делать запросы, там есть транзакции, индексирование, таблицы, устойчивые, более-менее надежные хранилища. На самом деле, базы данных – это более удобно, чем файлы.
                  Читать дальше →
                • Основы Elasticsearch

                    Elasticsearch — поисковый движок с json rest api, использующий Lucene и написанный на Java. Описание всех преимуществ этого движка доступно на официальном сайте. Далее по тексту будем называть Elasticsearch как ES.


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


                    В этой статье я расскажу про основы ES на примере индексации постов блога. Покажу как фильтровать, сортировать и искать документы.

                    Читать дальше →
                  • Справочник по синхронизаторам java.util.concurrent.*

                    • Tutorial
                    Целью данной публикации не является полный анализ синхронизаторов из пакета java.util.concurrent. Пишу её, прежде всего, как справочник, который облегчит вхождение в тему и покажет возможности практического применения классов для синхронизации потоков (далее поток = thread).

                    В java.util.concurrent много различных классов, которые по функционалу можно поделить на группы: Concurrent Collections, Executors, Atomics и т.д. Одной из этих групп будет Synchronizers (синхронизаторы).



                    Синхронизаторы – вспомогательные утилиты для синхронизации потоков, которые дают возможность разработчику регулировать и/или ограничивать работу потоков и предоставляют более высокий уровень абстракции, чем основные примитивы языка (мониторы).
                    Читать дальше
                  • Создание архитектуры программы или как проектировать табуретку

                    Взявшись за написание небольшого, но реального и растущего проекта, мы «на собственной шкуре» убедились, насколько важно то, чтобы программа не только хорошо работала, но и была хорошо организована. Не верьте, что продуманная архитектура нужна только большим проектам (просто для больших проектов «смертельность» отсутствия архитектуры очевидна). Сложность, как правило, растет гораздо быстрее размеров программы. И если не позаботиться об этом заранее, то довольно быстро наступает момент, когда ты перестаешь ее контролировать. Правильная архитектура экономит очень много сил, времени и денег. А нередко вообще определяет то, выживет ваш проект или нет. И даже если речь идет всего лишь о «построении табуретки» все равно вначале очень полезно ее спроектировать.

                    К моему удивлению оказалось, что на вроде бы актуальный вопрос: «Как построить хорошую/красивую архитектуру ПО?» — не так легко найти ответ. Не смотря на то, что есть много книг и статей, посвященных и шаблонам проектирования и принципам проектирования, например, принципам SOLID (кратко описаны тут, подробно и с примерами можно посмотреть тут, тут и тут) и тому, как правильно оформлять код, все равно оставалось чувство, что чего-то важного не хватает. Это было похоже на то, как если бы вам дали множество замечательных и полезных инструментов, но забыли главное — объяснить, а как же «проектировать табуретку».

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

                    Данная статья является попыткой ответить на эти вопросы хотя бы в первом приближении.
                    Читать дальше →
                  • Коллекции в Java: о чём многие забывают

                    • Tutorial
                    Из опыта code-review и ответов на StackOverflow набралось немало моментов, касающихся Java Collections API, которые мне казались очевидными, но другие разработчики о них почему-то не знали или знали, но не чувствовали уверенности их применять. В этой статье я собираю в общую кучу всё, что накопилось.

                    Содержание:


                    1. List.subList
                    2. PriorityQueue
                    3. EnumSet и EnumMap
                    4. Set.add(E) и Set.remove(E) возвращают булево значение
                    5. Map.put(K, V), Map.remove(K), List.set(idx, E), List.remove(idx) возвращают предыдущий элемент
                    6. Map.keySet() и Map.values()
                    7. Arrays.asList может быть ключом
                    8. Collections.max
                    9. LinkedList, Stack, Vector, Hashtable
                    Читать дальше →
                  • Шпаргалка Java программиста 3. Коллекции в Java (стандартные, guava, apache, trove, gs-collections и другие)

                    • Tutorial
                    Сегодня я хотел бы поговорить о коллекциях в Java. Это тема встречается практически на любом техническом интервью Java разработчика, однако далеко не все разработчики в совершенстве освоили все коллекции даже стандартной библиотеки, не говоря уже о всех библиотеках с альтернативными реализациями коллекций, таких как guava, apache, trove и ряд других. Давайте посмотрим какие вообще коллекции можно найти в мире Java и какие методы работы с ними существуют.



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


                    Читать дальше →
                  • Грандиозное тестирование аккумуляторов AA/AAA

                      После моего грандиозного тестирования батареек многие просили провести такие же основательные тесты NiMh-аккумуляторов. За четыре месяца я протестировал 198 аккумуляторов (44 модели AA и 35 моделей AAA).



                      Читать дальше →
                    • Как работает реляционная БД

                      • Translation
                      • Tutorial
                      Реляционные базы данных (РБД) используются повсюду. Они бывают самых разных видов, от маленьких и полезных SQLite до мощных Teradata. Но в то же время существует очень немного статей, объясняющих принцип действия и устройство реляционных баз данных. Да и те, что есть — довольно поверхностные, без особых подробностей. Зато по более «модным» направлениям (большие данные, NoSQL или JS) написано гораздо больше статей, причём куда более глубоких. Вероятно, такая ситуация сложилась из-за того, что реляционные БД — вещь «старая» и слишком скучная, чтобы разбирать её вне университетских программ, исследовательских работ и книг.

                      На самом деле, мало кто действительно понимает, как работают реляционные БД. А многие разработчики очень не любят, когда они чего-то не понимают. Если реляционные БД используют порядка 40 лет, значит тому есть причина. РБД — штука очень интересная, поскольку в ее основе лежат полезные и широко используемые понятия. Если вы хотели бы разобраться в том, как работают РБД, то эта статья для вас.
                      Читать дальше →