Pull to refresh
0
0
Send message

GIF изнутри

Reading time7 min
Views55K

Вам когда-нибудь было интересно, как устроены gif-ки? В данной статье попробуем разобраться с внутренним строением GIF-формата и методом сжатия LZW.

Структура GIF


Файл в формате GIF состоит из фиксированной области в начале файла, за которой располагается переменное число блоков, и заканчивается файл завершителем изображения.


Читать дальше →
Total votes 80: ↑74 and ↓6+68
Comments17

Чистая архитектура в Go-приложении. Часть 1

Reading time9 min
Views45K
От переводчика: данная статья написана Manuel Kiessling в сентябре 2012 года, как реализация статьи Дядюшки Боба о чистой архитектуре с учетом Go-специфики.



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

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

В данной части будет описана общая концепция и работа с внутренним слоем.
Итак, начнем ...
Total votes 35: ↑27 and ↓8+19
Comments11

Консоль 21 века: mosh, tmux, fish

Reading time8 min
Views96K
В своей работе мне приходится проводить чуть ли не все свое время в консоли, как в локальной, так и в удаленной. Нет, что вы, я не жалуюсь, даже наоборот — мне нравятся возможности автоматизации, которые предоставляют консольные инструменты, и работа в консоли вполне продуктивна.

Но если вы проводите за своим инструментом до 80% рабочего времени, то желательно убедиться, что вы не тратите время впустую и что работа доставляет вам удовольствие. В этой статье я бы хотел немного рассказать про те инструменты, которыми я лично пользуюсь каждый день, и про то, как они улучшают user experience (и, часто, продуктивность) при работе с консолью и с удаленными серверами в частности.

Проблемы ssh


При работе с удаленными серверами по ssh есть много вещей, которые могут фрустрировать, но основных проблем две, и первая из них принципиально неразрешима в рамках ssh:

  1. При высоком round-trip latency (>100 ms) пользовательский ввод появляется с ощутимой задержкой, а при использовании мобильного интернета с edge (latency 1000 ms) работа становится подобна пытке
  2. При временных проблемах (несколько минут) с доставкой пакетов, соединение может порваться с write failed: broken pipe, причем узнаете вы об этом только при попытке ввода или при использовании настроек вроде keepaliveinterval


Первая проблема неразрешима потому, что ssh by-design является просто транспортом для байтов, и существующие приложения на это поведение расчитывают. Поскольку ssh не пытается интерпретировать этот поток байтов, он не может осуществлять предиктивный ввод. Лично для меня именно эта проблема наиболее актуальна, поскольку мне приходится работать с серверами в европе и США, и во втором случае задержка составляет около 200 мс и является принципиально неустранимой, по крайней мере до изобретения квантовой коммуникации или чего-нибудь подобного. Вторая же проблема проявляется в наших условиях относительно редко, но всё же неприятно переустанавливать все соединения при сбоях сети (и перезапускать упавшие приложения, если они почему-то не были запущены в screen).

Читать дальше →
Total votes 97: ↑89 and ↓8+81
Comments59

Тюним память и сетевой стек в Linux: история перевода высоконагруженных серверов на свежий дистрибутив

Reading time10 min
Views94K
image

До недавнего времени в Одноклассниках в качестве основного Linux-дистрибутива использовался частично обновлённый OpenSuSE 10.2. Однако, поддерживать его становилось всё труднее, поэтому с прошлого года мы перешли к активной миграции на CentOS 7. На подготовительном этапе перехода для CentOS были отработаны все внутренние процедуры, подготовлены конфиги и политики настройки (мы используем CFEngine). Поэтому сейчас во многих случаях миграция с одного дистрибутива на другой заключается в установке ОС через kickstart и развёртывании приложения с помощью системы деплоя нашей разработки — всё остальное осуществляется без участия человека. Так происходит во многих случаях, хотя и не во всех.

Но с самыми большими проблемами мы столкнулись при миграции серверов раздачи видео. На их решение у нас ушло полгода.
Читать дальше →
Total votes 110: ↑104 and ↓6+98
Comments73

Фурье-вычисления для сравнения изображений

Reading time10 min
Views61K
Традиционная техника “начального уровня”, сравнения текущего изображения с эталоном основывается на рассмотрении изображений как двумерных функций яркости (дискретных двумерных матриц интенсивности). При этом измеряется либо расстояние между изображениями, либо мера их близости.

Как правило, для вычисления расстояний между изображениями используется формула, являющаяся суммой модулей или квадратов разностей интенсивности:
d(X,Y) = SUM ( X[i,j] — Y[i,j] )^2

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

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

Наличие большого числа библиотек, реализующих Фурье преобразований (во всевозможных вариантах быстрых версий), делает реализацию алгоритмов сравнения изображений не очень сложной задачей для программирования.
Читать дальше →
Total votes 36: ↑34 and ↓2+32
Comments47

Как взламывают корпоративный Wi-Fi: новые возможности

Reading time4 min
Views89K
Статей о взломе Wi-Fi в Интернете достаточно много, но большинство из них касаются режима работы WEP/WPA(2)-Personal, в котором необходимо перехватить процедуру «рукопожатия» клиента и Wi-Fi-точки. Во многих корпоративных Wi-Fi-сетях используется режим безопасности WPA2-Enterprise, с аутентификацией по логину и паролю — как наименее затратный способ. При этом аутентификация осуществляется с помощью RADIUS-сервера.

image

ОС клиента устанавливает соединение с RADIUS-сервером, используя шифрование при помощи TLS, а проверка подлинности в основном происходит при помощи протокола MS-CHAPv2.
Читать дальше →
Total votes 45: ↑41 and ↓4+37
Comments29

Как и зачем мы делаем TLS в Яндексе

Reading time16 min
Views88K
Я занимаюсь в Яндексе продуктовой безопасностью и, кажется, сейчас самое время подробнее, чем уже было на YaC, рассказать на Хабре о том, как мы внедряем TLS.

Использование HTTPS-соединений является важной частью безопасного веб-сервиса, так как именно HTTPS обеспечивает конфиденциальность и целостность данных на этапе передачи их между клиентом и сервисом. Мы постепенно переводим все наши сервисы только на HTTPS-соединение. Многие из них уже работают исключительно по нему: Паспорт, Почта, Директ, Метрика, Такси, Яндекс.Деньги, а также все формы обратной связи, имеющие дело с персональными данными пользователей. Яндекс.Почта уже больше года даже обменивается данными с другими почтовыми сервисами по SSL/TLS, поддерживающими это.



Все мы знаем, что HTTPS — это HTTP, завернутый в TLS. Почему TLS, а не SSL? Потому что принципиально TLS — это более новый SSL, при этом название нового протокола наиболее точно характеризует его назначение. А в свете уязвимости POODLE можно официально считать, что SSL больше использовать нельзя.
Читать дальше →
Total votes 164: ↑156 and ↓8+148
Comments97

Плоттер на основе конструктора Makeblock

Reading time7 min
Views94K
Фотография плоттера с листом бумаги, на котором рисунок

О конструкторе Makeblock я узнал уже после того, как завершилась его кампания на кикстартере. А жаль, поскольку был шанс приобрести наборы конструктора по достаточно низкой цене. После удачной кампании авторы продолжили развивать свои идеи и создали набор для плоттера — XY-Plotter Robot Kit v2.0. Мне он обошелся в $300 с бесплатной доставкой через EMS в рамках акции «накупи на $500».

Плоттер заинтересовал меня по двум причинам: возможность рисовать ручкой Circuit Scribe с токопроводящими чернилами и возможность проапгрейдить плоттер лазерным резаком. В этой статье я расскажу о своих впечатлениях от плоттера в его оригинальной конфигурации.
Читать дальше →
Total votes 68: ↑68 and ↓0+68
Comments65

OpenStack, Docker и веб-терминал, или как мы делаем интерактивные упражнения для обучения Linux

Reading time10 min
Views38K
В статье об онлайн-курсе «Введение в Linux» на образовательной платформе Stepic мы обещали рассказать о технической реализации нового типа интерактивных задач, который был впервые применен в этом курсе. Этот тип задач позволяет создавать на лету виртуальные серверы с Linux для работы через веб-терминал прямо в окне браузера. Автоматическая проверяющая система следит за корректностью выполнения заданий.

Пример задания из курса:



В этой статье я хочу рассказать о проекте, который лег в основу нового типа заданий на Stepic. Я также расскажу о том, из каких компонентов состоит система, и как они взаимодействуют между собой, как и где создаются удаленные сервера, как работает веб-терминал и автоматическая проверяющая система.
Читать дальше →
Total votes 45: ↑44 and ↓1+43
Comments24

Как работают рекомендательные системы. Лекция в Яндексе

Reading time11 min
Views137K

Привет, меня зовут Михаил Ройзнер. Недавно я выступил перед студентами Малого Шада Яндекса с лекцией о том, что такое рекомендательные системы и какие методы там бывают. На основе лекции я подготовил этот пост.





План лекции:


  1. Виды и области применения рекомендательных систем.
  2. Простейшие алгоритмы.
  3. Введение в линейную алгебру.
  4. Алгоритм SVD.
  5. Измерение качества рекомендаций.
  6. Направление развития.

Под катом вы найдете конспект лекции и презентацию
Total votes 63: ↑56 and ↓7+49
Comments42

Схемы рецептов для кухни пиццерии. Фастфуд плюс дизайн

Reading time4 min
Views65K
Возьмем пиццерию с количеством заказов до тысячи в день. Умножим количество заказов на количество пиццерий в разных городах России. Не забудем о том, что часто в фастфуд приходят для подработки, отчего необходимо быстро обучать людей и так же быстро добиваться от них скорости в работе. Это и есть описание той компании, в которой я работаю.

Чтобы сделать пиццу, сотрудник на кухне должен знать ее рецепт.

image

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

Читать дальше →
Total votes 48: ↑41 and ↓7+34
Comments22

Сохранение данных Google Reader

Reading time7 min
Views29K
Чем ближе дата закрытия Google Reader тем более насущным становится вопрос не только переноса подписок в аналогичный сервис, но и сохранения всех текущих записей.

Найденные решения, в том числе и на хабре(здесь и здесь), не подошли в основном по двум причинам: нет возможности сохранения в БД и медленная скорость работы. Пришлось собрать свой велосипед — grbackup, который
grbackup -e fake@gmail.com -p password -ba -o mongodb://localhost:27017 -w 20

за 20 минут сохранил 328250 записей из 102 подписок в локальную БД MongoDB.

Основные возможности:
  • сохранение всех записей, которые можно получить при помощи Google Reader API
  • сохранение записей в различные хранилища
  • использование формата идентичного тому, что отдает Google Reader через API
  • параллельное получение/сохранение записей
  • расширяемость: возможность добавить новый вид хранилища


Доступные виды хранилищ определяются расширениями(плагинами) и задаются при помощи опции (-o, --output) вида type:uri.
На момент написания статьи доступны следующие расширения:
  • simple: вывод в терминал (используется только в режиме просмотра)
  • json: запись в json-файл (json:/path/to/file.json)
  • mongodb: запись в MongoDB (mongodb://[username:password@]hostN[:portN]]][/[db][?opts]])
  • redis: запись в Redis (redis://username:password@host[:port]/dbindex)

Работоспособность проверена на Ubuntu(64) и Win7(64).
Книгу предложений и замечаний можно найти здесь.
Ниже находится подробное описание утилиты.
Читать дальше →
Total votes 40: ↑37 and ↓3+34
Comments31

Серия плакатов об ученых и их открытиях

Reading time1 min
Views180K
Newton, Kapil Bhagat

Индийский дизайнер Капил Бхагат из Мумбая в своем блоге разместил серию плакатов об ученых и их открытиях. Плакаты наглядно иллюстрируют достижения ученных с помощью их фамилий. Таким образом Капил предложил отпраздновать День наук в Индии.

Все постеры под катом.
Читать дальше →
Total votes 224: ↑170 and ↓54+116
Comments108

Осторожно при покупке MacBook. Высокотехнологический способ мошенничества в оффлайне

Reading time6 min
Views547K
Доброго всем времени суток дорогие друзья. Давно я не писал на хабре и очень жаль что моя новая публикация касается мошенников. И не просто мошенников, про которых я где-то прочитал, а про мошенников, которые меня лично обманули.

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

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

Не хочу наступить на те же грабли.
Total votes 295: ↑273 and ↓22+251
Comments482

Музей компьютеров в Bletchley Park

Reading time5 min
Views8.9K
Давно хотел написать про свой визит в Bletchley Park, который был подарен мне моей девушкой на день рождения. Финальный толчок был дан недавним постом, однако в отличии от begoon, я почти не видел самого парка, зато немало времени провел в компьютерном музее The National Museum of Computing, располагающемся в одном из его зданий, о котором и хочу рассказать в этом пятничном посте.

Осторожно, под катом прячется траффик!



Добро пожаловать в удивительный мир старого железа
Total votes 66: ↑66 and ↓0+66
Comments20

Жизнь с программистом

Reading time5 min
Views27K
КДПВПривет, %username%. Предлагаю отвлечься от решения проблем и немного расслабиться после первого трудового дня на этой неделе. Дело в том что у меня есть замечательная девушка (ага, хвастаюсь), пишущая неплохие рассказы. Но пишет она их в основном для себя, «в стол», т.к. ни блога не имеет, ни ЖЖ и вообще нигде не публикуется. И вот сегодня скинула мне рассказ настолько мне понравившийся, что я даже выпросил разрешение опубликовать его здесь. Тема не нова, но написано по-моему очень даже неплохо, думаю сообществу понравится. Итак, впечатления от года жизни с программистом.

Жизнь с программистом


Все сидела и думала, как начать свой рассказ. Хотела, чтобы было в меру пафосно, с красивым вступлением (о первых ЭВМ, о людях, которые их разработали, о вечных темах, описываемых в мире литературы и кино). Но каждый вариант застревал на второй-третьей строчке. Поэтому, без лишних слов – я живу с программистом.
Тема и вправду благодатная. Уже много историй было написано и об IT-шниках, и о программистах в частности, каждая третья цитата на bashorg посвящена их работе. А есть еще замечательный роман Алекса Экслера «Записки невесты программиста», над которым я хохотала до слез. Мысли главной героини были настолько схожи с моими, да и диалоги между ней и ее будущим мужем, что казалось, что частично списали с моей жизни.
Читать дальше →
Total votes 320: ↑265 and ↓55+210
Comments253

Психологическая деформация программистов. Взгляд с обеих сторон баррикад

Reading time6 min
Views136K
Само наличие психологической деформации у какой-либо профессии, как правило, достаточно спорный момент ввиду того, что у разных людей она проявляется по-разному. Однако общую тенденцию можно выделить и, пожалуй, настало то время когда можно достаточно смело говорить, что программисты всё же имеют свой особенный психологический портрет который обусловлен их профессиональной деятельностью.

Я достаточно часто сталкивался с подобным мнением и не придавал ему особого значения, но когда женский коллектив нашей организации поздравил программистов с 23-м февраля по доброму назвав их «космическими войсками», решил всё же расставить определенные акценты в данном вопросе, т.к. одна из моих профессий связана напрямую с психоанализом. Да и баш уже не молчит.

И что же них такого деформированного?
Total votes 461: ↑436 and ↓25+411
Comments558

Создание мультизагрузочного USB HDD или флешки

Reading time5 min
Views735K


Загрузочный USB Flash или HDD накопитель удобен тем, что можно отказаться от использования CD/DVD для установки ОС и использования диагностических программ типа Memtest, MHDD, Acronis TI.

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

Существует множество решений для флешек (например, http://eee-pc.ru/wiki/софт:usb_multiboot), но, как правило, они не работают с USB HDD. На хабре я нашел только статью об установке Win7 с USB HDD, но год назад попытки воспроизвести это не увенчались успехом. Для установки Windows 7 с флешки существует MS Win7 DVD Tool, но он опять же не работает с HDD. Поэтому давайте создадим свой мультизагрузочный USB HDD с помощью GRUB4DOS.

Нам понадобится:
  • USB HDD (все описанное должно работать и для флешек).
  • ОС Windows (естественно можно аналогично сделать это и из ОС на базе Linux, но у меня сейчас нет возможности проверить работоспособность и наличие «подводных камней»).
  • Материнская плата (BIOS) с поддержкой загрузки с USB накопителей. Если загрузка с USB не поддерживается, можно использовать Plop, об этом ниже.


Читать дальше →
Total votes 93: ↑81 and ↓12+69
Comments61

Стажировка в Google 2 (Часть 1)

Reading time7 min
Views18K
Когда-то я уже писала про то, как мне удалось постажироваться в Google в Швейцарии. Тогда же я обещала отчет о своей следующей стажировке — во второй раз в Googleplex в Калифорнии. И вот это время пришло — моя вторая стажировка подходит к концу, и мне есть что рассказать!: о)

Disclaimer: Мой личный опыт, как всегда, не претендует на универсальность.

Читать дальше →
Total votes 194: ↑184 and ↓10+174
Comments92

Сказ о том как Bash и SVG спасли от рутины

Reading time4 min
Views3.8K
Есть такой замечательный формат векторной графики — Scalable Vector Graphics, SVG. Чем же он такой замечательный? Ну например:
  1. SVG это открытый формат, он не является чьей-либо собственностью.
  2. SVG является подмножеством языка XML и, соответственно, он является текстовым.
  3. Прекрасно интегрируется с HTML и XHMTL.
  4. SVG совместим с CSS, что позволяет управлять отображением элементов с помощью таблиц стилей.
  5. В SVG текст остается текстом, благодаря этому документы SVG могут индексироваться поисковыми машинами, также пользователи могут выделять и копировать текст.

Читать дальше →
Total votes 67: ↑57 and ↓10+47
Comments19
1
23 ...

Information

Rating
Does not participate
Location
Молдова
Registered
Activity