Как стать автором
Обновить
0
Тимур @timonstrread⁠-⁠only

Frontend

Отправить сообщение

Критика протокола и оргподходов Telegram. Часть 1, техническая: опыт написания клиента с нуля — TL, MT

Время на прочтение60 мин
Количество просмотров69K

В последнее время на Хабре стали чаще появляться посты о том, как хорош Telegram, как гениальны и опытны братья Дуровы в построении сетевых систем, и т.п. В то же время, очень мало кто действительно погружался в техническое устройство — как максимум, используют достаточно простой (и весьма отличающийся от MTProto) Bot API на базе JSON, а обычно просто принимают на веру все те дифирамбы и пиар, что крутятся вокруг мессенджера. Почти полтора года назад мой коллега по НПО "Эшелон" Василий (к сожалению, его учетку на Хабре стёрли вместе с черновиком) начал писать свой собственный клиент Telegram с нуля на Perl, позже присоединился и автор этих строк. Почему на Perl, немедленно спросят некоторые? Потому что на других языках такие проекты уже есть На самом деле, суть не в этом, мог быть любой другой язык, где еще нет готовой библиотеки, и соответственно автор должен пройти весь путь с нуля. Тем более, криптография дело такое — доверяй, но проверяй. С продуктом, нацеленным на безопасность, вы не можете просто взять и положиться на готовую библиотеку от производителя, слепо ему поверив (впрочем, это тема более для второй части). На данный момент библиотека вполне работает на "среднем" уровне (позволяет делать любые API-запросы).


Тем не менее, в данной серии постов будет не так много криптографии и математики. Зато будет много других технических подробностей и архитектурных костылей (пригодится и тем, кто не будет писать с нуля, а будет пользоваться библиотекой на любом языке). Итак, главной целью было — попытаться реализовать клиент с нуля по официальной документации. То есть, предположим, что исходный код официальных клиентов закрыт (опять же во второй части подробнее раскроем тему того, что это и правда бывает так), но, как в старые времена, например, есть стандарт по типу RFC — возможно ли написать клиент по одной лишь спецификации, "не подглядывая" в исходники, хоть официальных (Telegram Desktop, мобильных), хоть неофициальных Telethon?

Ответ на этот вопрос неоднозначен
Всего голосов 187: ↑182 и ↓5+177
Комментарии240

Как исправить ошибку в Node.js и нечаянно поднять производительность в 2 раза

Время на прочтение8 мин
Количество просмотров44K
Началось все с того, что я оптимизировал отдачу ошибки HTTP 408 Request Timeout в сервере приложений Impress, работающем на Node.js. Как известно, у нодовского http.Server есть событие timeout, которое должно вызываться для каждого открытого сокета, если тот не закрылся за указанное время. Хочу уточнить, что не для каждого запроса т.е. не для каждого события request, функция которого имеет два аргумента (req, res), а именно для каждого сокета. Через один сокет может последовательно поступить много запросов в режиме keep-alive. Если мы задаем это событие, через server.setTimeout(2 * 60 * 1000, function(socket) {...}) то должны сами уничтожать сокет socket.destroy(). Но если не установить свой обработчик, то http.Server имеет встроенный, который уничтожит сокет через 2 минуты автоматически. На этом самом таймауте можно отдать ошибку 408 и считать инцидент исчерпанным. Если бы не одно но… С удивлением я обнаружил, что событие timeout вызывается и для тех сокетов, которые подвисли и для уже получивших ответ и для закрытых клиентской стороной, вообще для всех, находящихся в режиме keep-alive. Это странное поведение оказалось достаточно сложным, и я расскажу об этом ниже. Можно было бы вставить одну проверку в событие timeout, но со своим идеализмом я не удержался и полез исправлять баг на уровень глубже. Оказалось, что в http.Server режим keep-alive реализован не то что не по RFC, а откровенно не дописан. Вместо отдельного timeout для соединения и отдельного keep-alive timeout, там все на одном таймауте, который реализован на быстрых псевдо-таймерах (enroll/unenroll), но задан по умолчанию в 2 минуты. Это было бы не так страшно, если бы браузеры хорошо работали с keep-alive и переиспользовали его эффективно или закрывали бы неиспользуемые соединения.
Читать дальше →
Всего голосов 98: ↑97 и ↓1+96
Комментарии36

Может ли email быть «резиновым»?

Время на прочтение10 мин
Количество просмотров11K


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

При этом ситуацию с версткой писем сейчас можно сравнить с тем, как обстояло дело в вебе до тех пор, пока веб-стандарты не стали хм… стандартами. Если вкратце — это просто ад для дизайнера.

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

Принципы отзывчивого веб-дизайна, сформулированных в книге Итана Маркотта, можно применять и для работе с электронными письмами. И все это для того, чтобы подписчики могли нормально читать сообщения на разных устройствах.
Читать дальше →
Всего голосов 12: ↑11 и ↓1+10
Комментарии9

DevStack как инструмент

Время на прочтение4 мин
Количество просмотров22K
Здравствуйте, уважаемые хабралюди!

В предыдущих своих записях я упоминал про такие продукты как OpenStack, DevStack и Chef.
В этой статье я начну с DevStack.
Читать дальше →
Всего голосов 7: ↑7 и ↓0+7
Комментарии4

Здоровье гика: как не закиснуть к старости

Время на прочтение7 мин
Количество просмотров81K
Привет, Geektimes! Сегодня мы поговорим — внезапно! — о здоровье. А если быть точным — о том, как влияет многочасовое ежедневное сидение за компьютером и как можно минимизировать этот вред, чтобы в старости радоваться жизни и продолжать работать сидя за компом, а не жаловаться на жизнь на приёмах у врачей.


Наверное, многие гики считают, что уж вот их никак и никогда не посетят все сопутствующие болячки — дескать, не сутками же сидим, гулять ходим, да и вообще мы же не дальнобойщики. Грустно, но факт — проблемы случаются и от меньшего, поверьте. Поэтому стоит задуматься об этом уже сейчас. Тем более что радикально менять свой образ жизни и перестать гиковать не нужно :) Достаточно выделить суммарно пару часов в неделю на выполнение несложных физических упражнений.

Условно все «компьютерные» упражнения можно поделить на три блока — для глаз, для суставов кистей и для осанки. Итак, поехали.
Читать дальше →
Всего голосов 49: ↑44 и ↓5+39
Комментарии42

Охватывающий SQL в Postgres

Время на прочтение8 мин
Количество просмотров25K
Одна вещь, которая заставляет меня смотреть со стороны на ORM, как они так стараются скрыть и абстрагировать все силу и выразительность SQL. Прежде чем я напишу дальше, позвольте мне сказать что, Frans Bouma напомнил мне вчера, что есть разница между ORM и людьми, которые их используют. Это всего лишь инструменты (в ORM) и я с этим согласен, так же я согласен, что не плохой фастфуд делает людей полными, а это люди, которые едят его слишком много.

Вместо того чтобы, ругать ORM я хотел бы рассказать вам, почему я не использую ОО абстракцию в основании моей базы данных. Если коротко: потому что SQL может вам сильно помочь выразить значение вашего приложения с точки зрения данных. Единственный способ знать как работает ваше приложение это знать по каким данным оно генерируется.
Читать дальше →
Всего голосов 27: ↑25 и ↓2+23
Комментарии9

Использование media queries в вёрстке email-писем: за и против

Время на прочтение5 мин
Количество просмотров29K


Дизайнеры, работающие над созданием привлекательных шаблонов писем для email-рассылок, много времени тратят на то, чтобы добиться адекватного отображения на разных устройствах. В наши дни почти половина всех писем просматривается со смартфонов и планшетов, а значит, необходимо позаботиться о том, чтобы письмо хорошо выглядело на разных форм-факторах. Именно для этого в вёрстке и начали использовать media queries.

Однако, прежде чем погрузиться в мир веб-дизайна и вёрстки уникальных email-кампаний, следует поподробнее взглянуть на media queries, как на инструмент, который имеет свои плюсы и минусы.
Читать дальше →
Всего голосов 16: ↑13 и ↓3+10
Комментарии10

Быстрое возведение чисел от 1 до 100 в квадрат

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


*квадраты до сотни

Для того, чтобы бездумно не возводить в квадрат по формуле все числа, нужно максимально упростить себе задачу следующими правилами.
Читать дальше →
Всего голосов 118: ↑83 и ↓35+48
Комментарии38

Размеры экранов

Время на прочтение2 мин
Количество просмотров548K
Планшеты и смартфоны оснащаются экранами с разными соотношениями сторон и разной плотностью пикселей, однако эти параметры редко указываются в технических характеристиках.

Попробуем разобраться со всеми хитростями, связанными с этими параметрами. Начнём с планшетов.
Вот соотношение размеров экранов, использующихся в большинстве современных планшетов.



Обратите внимание, насколько экран 8" с соотношением сторон 4:3 визуально больше широкого экрана 7". А широкий экран 10.1" на сантиметр меньше экрана 9.7" по высоте.

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



Текст на экранах с низким PPI (количеством точек на дюйм) читается не комфортно. Я бы не стал покупать планшет с экраном, имеющим PPI ниже 150. Даже 164 PPI экрана iPad mini многим кажутся недостаточными. Отлично воспринимаются экраны с PPI больше 200.

Для меня было большим открытием, что экран 9.7" 1024x768 имеет даже меньшее PPI, чем экран 7" 800x480.

Читать дальше →
Всего голосов 157: ↑147 и ↓10+137
Комментарии69

Береги зрение, используй f.lux

Время на прочтение1 мин
Количество просмотров447K
Почти четыре года прошло с момента упоминания на Хабре программы f.lux, настоящего лекарства для тех, у кого устают глаза из-за монитора.



Программа изменяет цветовой профиль монитора, в зависимости от времени суток. Ночью глаза меньше устают от тёплых цветовых тонов (3400 K), днём — от холодных (6500 K), которые больше соответствуют дневному свету.
Читать дальше →
Всего голосов 113: ↑94 и ↓19+75
Комментарии110

Ebay. Украина. О таможне и пересылках — 2012

Время на прочтение7 мин
Количество просмотров192K
Небольшое предисловие. В 2010 году на Хабре был опубликован пост Ebay. Украина. О таможне и пересылках, в котором aevdox рассказал о нюансах доставки товаров с Ebay применительно к Украине и, особенно, об украинских таможенных правилах. Прочитав этот пост, я почувствовал, что мне есть, что к нему добавить, и, не будучи хабражителем, написал письмо автору. Так там появился «Upd # 3».

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

А теперь к сути. С принятием в 2012 году нового Таможенного кодекса Украины (далее – ТК) и его вступлением в силу информация в статье «Ebay. Украина. О таможне и пересылках» сразу же безнадёжно устарела. Прежде всего потому, что новый кодекс отменил нормативно-правовые акты, на которые я ссылался в своём дополнении (Закон № 2681-III, Постановление Кабмина № 1652), и теперь эти отношения регулирует сам кодекс. Регулирует он их уже иначе. Я попытался разобраться с тем, что же изменилось для нас, простых покупателей с Ebay, и соответственно актуализировать информацию в статье.

Если вкратце – «жить стало легче, жить стало веселей».
Подробности далее
Всего голосов 154: ↑149 и ↓5+144
Комментарии97

Очень быстрый и эффективный способ расслабления глаз

Время на прочтение4 мин
Количество просмотров412K

Предисловие


imageНе знаю, все ли программисты всесторонне любознательные люди, но я всегда пытаюсь получить фундаментальные знания во всех областях, которые могут быть практически полезны. В то время, когда мне в голову пришла эта идея я изучал анатомию и физиологию по журналам «Тело человека. Снаружи и внутри», ну а по работе я занимался стерео-варио фотографиями (для тех кто не знает — были такие советские календарики с ребристой поверхностью, где картинка либо казалась объемной, либо менялась). Так вот, в один из вечеров мне пришла в голову замечательная идея, которую я на протяжении уже 4х лет использую для поддержания своего зрения.
Обещаю, что эффект почувствуете сразу!
Читать дальше →
Всего голосов 246: ↑238 и ↓8+230
Комментарии207

Механические клавиатуры

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

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

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

Механические клавиатуры. Путеводитель.

Читать дальше →
Всего голосов 323: ↑313 и ↓10+303
Комментарии331

Нарушения эвристик Нильсена в Mac OS

Время на прочтение1 мин
Количество просмотров4.1K


Несколько примеров нарушений эвристик Якоба Нильсена в Mac OS Lion и приложениях, разработанных компанией Apple.

Ссылки, упомянутые в видео:
Всего голосов 80: ↑52 и ↓28+24
Комментарии178

Статистика надёжности SSD носителей

Время на прочтение2 мин
Количество просмотров81K
Некоторое время назад я создал опрос по надёжности SSD. Несмотря на то, что мне кажется, что результатов слишком мало, но ждать нет особого смысла.

Итак, для начала статистика размеров.

На картинке видно, что наиболее популярны форматы 120, 80 и 60, которые выпускаются только Intel.
Можно также заметить, что диски объёмом 120/128 особо популярны среди пользователей алтернативных операционных систем (включая OS X).

Продолжим данными по производителям.
Читать дальше →
Всего голосов 84: ↑82 и ↓2+80
Комментарии40

Как выбрать телевизор

Время на прочтение6 мин
Количество просмотров74K
Привет!
Недавно, прочитав статью «Как собрать домашнюю медиа-систему начального уровня? Выбираем телевизор, плеер, аудио» и почитав комментарии к ней, я с удивлением узнал, что большинство хабрачитателей, хоть и держат нос по-ветру и стараются знать обо всех новинках и последних тенденциях, попав в магазин банально не смогут выбрать телевизор и акустику. Я занимаюсь продажей этой техники, а в частности телевизорами, и постараюсь дать пару советов, на что обратить внимание при выборе.
Читать дальше →
Всего голосов 128: ↑109 и ↓19+90
Комментарии213

Как получить и измерить высокоскоростное соединение по TCP

Время на прочтение7 мин
Количество просмотров60K
Надежная передача данных в Интернете осуществляется на базе протокола TCP (Transmission Control Protocol), спецификация к которому была опубликована почти 30 лет назад. Алгоритм TCP (RFC793), позволяет подключенному устройству адаптироваться для работы в сети на скоростях в пределах десятков мегабит в секунду и задержки до 100 секунд. С бурным развитием новых технологий передачи данных, уже через 10 лет после внедрения стало ясно что производительность протокола не будет хватать для более широких каналов.
Читать дальше →
Всего голосов 106: ↑105 и ↓1+104
Комментарии41

Восстановление зрения

Время на прочтение2 мин
Количество просмотров45K
Однажды у меня появились видеозапись лекций Жданова.
Так были предложены упражнения для глаз. Я решил попробовать выполнять их, чтобы проверить их эффективность.
Ниже вы увидите сами упражнения.

Читать дальше →
Всего голосов 162: ↑114 и ↓48+66
Комментарии180

Краткое введение в SIM-карты

Время на прочтение6 мин
Количество просмотров224K
Когда на вопрос «кем вы работаете?» я отвечал «разработчиком ПО для SIM-карт», даже технически подкованные люди частенько удивлялись. Многие думают, что SIM-карта это «что-то типа флешки».

В этой статье я постараюсь кратко рассказать что такое SIM-карта (и смарт-карты в общем), зачем она нужна и что у нее внутри.

На самом деле SIM-карта — это частный случай контактной смарт-карты с микропроцессором. По сути, представляет из себя достаточно защищенный микрокомпьютер с CPU, ROM (опционально), RAM и NVRAM (которая выступает в качестве аналога жесткого диска в PC), с аппаратными генераторами случайных чисел и аппаратной реализацией крипто-алгоритмов.

В некотором приближении архитектуру микропроцессорной смарт-карты можно представить так:
Архитектура смарт-карты

Читать дальше →
Всего голосов 474: ↑470 и ↓4+466
Комментарии180

Ubuntu 10.04 и Windows 7 на Mac Mini

Время на прочтение2 мин
Количество просмотров35K
На прошлой неделе я заменил свой старый шумный компьютер на mac mini.
Иногда приходится работать как в Windows, так и в Linux, то долго не думая,
установил на него сразу три операционные системы.

image

Под хабракатом небольшая заметка о том, что из этого получилось и как это сделать.
В статье будут использоваться
  1. Mac OS X 10.6 Snow Leopard
  2. Windows 7 Home Basic
  3. Ubuntu 10.04 Lucid Lynx

Читать дальше →
Всего голосов 142: ↑117 и ↓25+92
Комментарии140
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Киев, Киевская обл., Украина
Работает в
Дата рождения
Зарегистрирован
Активность