Как стать автором
Обновить
8
0
Vladlen Zhygalo @Antalhen

Пользователь

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

Разделение, объединение и поворот PDF-документов на Python с помощью borb

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

Формат переносимых документов (PDF) не является форматом WYSIWYG (What You See is What You Get (То, Что Вы Видите, это То, Что Вы Получаете)). Он был разработан, чтобы быть независимым от платформы, независимым от базовой операционной системы и механизмов рендеринга.

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

В этом руководстве мы будем использовать borb - библиотеку Python, предназначенную для чтения, манипулирования и генерации PDF-документов. Он предлагает как низкоуровневую модель (что позволяет получить доступ к точным координатам и макету), так и высокоуровневую модель (где вы можете делегировать точные расчеты полей, позиций и т. д.).

Читать далее
Всего голосов 8: ↑5 и ↓3+2
Комментарии2

Гиперкуб. Как мы обеспечили разработчиков тестовыми устройствами и не потеряли их

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

Невозможно полноценно тестировать и отлаживать мобильные приложения без тестовых устройств. Таких устройств должно быть много, потому что один и тот же код на разных моделях ведёт себя по-разному. Но как организовать учёт устройств? Как сделать так, чтобы разработчики и тестировщики быстро и без волокиты получали конкретный смартфон в необходимой конфигурации?


Меня зовут Алексей Лавренюк. Вы можете знать меня как одного из авторов Яндекс.Танка и докладчика на тему нагрузочного тестирования. Потом я измерял энергопотребление мобильных телефонов. Теперь я делаю Яндекс.Ровер в команде беспилотных автомобилей (и иногда подрабатываю Дедом Морозом). А между телефонами и Ровером был Гиперкуб.


Пару лет назад в наш отдел нагрузочного тестирования зашёл руководитель мобильной разработки и пожаловался на ситуацию с тестовыми устройствами. Телефоны кочевали из рук в руки, выбрать и быстро найти телефон было проблемой. У нас уже был опыт работы с мобильными устройствами: мы строили цифровой амперметр, чтобы измерять их энергопотребление. Поэтому мы решили помочь коллегам и быстро сделать классную штуку: казалось, работы всего на три месяца. Смеюсь над собой, наивным, из 2020 года и рассказываю, что нас ждало на самом деле.




Читать дальше →
Всего голосов 83: ↑81 и ↓2+105
Комментарии57

Где и как изучать машинное обучение?

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

Всем привет!


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

Путь для развития новичка я вижу примерно так:

Untitled_presentation
Читать дальше →
Всего голосов 47: ↑44 и ↓3+41
Комментарии19

Генеральная уборка в компании

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


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

Дело в том, что мы внезапно для себя стали большой компанией со всеми вытекающими недостатками. Раньше думали, что жирение — это часть процесса, и надо просто расслабиться и получать удовольствие. Не-а. Заодно поймали хвост кризиса и хорошо на нём прокатились.

А знаете, что такое большая компания? Это когда ты не знаешь в лицо кого-то. Когда в команде есть люди, которые работают по должностным обязанностям без понимания, для чего нужна их работа. Когда простая задача «напечатайте табличку с текстом в магазин» начинает гулять по согласованиям и решается за 22 дня. Реальный случай. Это когда договор подписывается 4 месяца. И куча других приколов звериного оскала бюрократизма.

Разгребать всё это… хм, ну, скажем, увлекательно.
Читать дальше →
Всего голосов 159: ↑154 и ↓5+149
Комментарии299

Я разработчик с 9 до 17 (и ты можешь стать таким)

Время на прочтение4 мин
Количество просмотров64K
Этот конкретный твит от Сафьи Абдалла сподвиг меня на некоторые размышления:
Пожалуй, непопулярное мнение (и тут немного иронии от меня).

Чтобы быть способным и отличным инженером, вам не нужно писать статьи в блоге, участвовать в проектах open source, выступать с техническими лекциями или делать что-нибудь ещё.

Можете оставить свой код в офисе — и это вполне нормально.
Такая позиция близка и мила моему сердцу, хотя я тоже понимаю иронию. Одна из вещей, которые я говорю потенциальным работодателям с тех пор как меня уволили за отказ оставаться программировать после работы — это то, что я не согласен на овертайм. По крайней мере, не на регулярной основе. Я могу иногда поучаствовать в авралах, когда критически важно срочно накатить конкретное изменение или исправить баг, но за исключением таких случаев я буду появляться, вкалывать — и пойду домой.
Читать дальше →
Всего голосов 121: ↑105 и ↓16+89
Комментарии619

Температура и давление фантастики, 2/3

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

Часть 2. Прогулка


Первая часть

Во-первых, огромное спасибо за такое количество хороших и осмысленных комментариев. Лишь недостаток времени не позволяет детально на них все ответить. Но я ценю и дополнения, и ссылки на нечитанную фантастику (сколько же её!), и поправки. Спасибо!

В этом разделе не будет большой глубины. А будет небольшая экскурсия по окраинам pT-диаграммы, редко посещаемым даже популяризаторами науки. Зачем? Чтобы показать, что богатство миров и явлений, скорее всего, отнюдь не убывает при удалении от привычного нам «центра мира условий». И что, наверное, в тех местах может происходить что-то интересное и сюжетообразующее… при условии, что хоть один профессиональный писатель сможет качественно это помыслить. Но это — отдельная тема для обсуждения в третьей части. Здесь же у нас будут просто далёкие миры. Не в парсеках далёкие, но оттого не менее труднодостижимые.

Юпитер


Вот так он выглядит снаружи:


Читать дальше →
Всего голосов 92: ↑92 и ↓0+92
Комментарии135

Пиролизный котел в быту, или когда цена на газ не имеет значения

Время на прочтение16 мин
Количество просмотров157K
Можно ли построить систему отопления собственного жилища без газовой трубы так, чтобы это было комфортно, не утомительно и даже увлекательно? И что может получиться, если приправить всё это информационными технологиями?


Давайте вместе в этом разберемся.
Читать дальше →
Всего голосов 100: ↑97 и ↓3+94
Комментарии386

Создаём собственный блокчейн на Ethereum

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

Как создать приватный блокчейн Ethereum с нуля?


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

Инструкция включает в себя следующее:

  • Создание приватного блокчейна Ethereum с помощью geth.
  • Создание кошелька MetaMask для работы с приватным блокчейном.
  • Перевод средств между несколькими аккаунтами.
  • Создание, развёртывание и вызов смарт-контракта в приватном блокчейне с помощью remix.
  • Создание обозревателя блоков Ethereum поверх приватного блокчейна.
Читать дальше →
Всего голосов 28: ↑25 и ↓3+22
Комментарии5

Как стать тимлидом и не взорваться

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


Два года назад я начал негласно исполнять роль iOS-lead в компании Touch Instinct и формированием стабильной работы iOS-отдела. Спустя полгода это трансформировалось в официальную должность. Из-за отсутствия опыта у меня возникало огромное количество проблем, которые вызывали жжение в области верхней части кресла. Это происходило из-за ряда факторов:


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

Если вы стали лидом и первоначальная эйфория сменилась небольшим горением и унынием, то пара советов не будет лишней.

Читать дальше →
Всего голосов 92: ↑89 и ↓3+86
Комментарии24

Как магазин в торговом центре узнаёт вас по Wi-Fi (точнее, по MAC-адресу) — на базе обычных хотспотов

Время на прочтение4 мин
Количество просмотров68K
Телефоны ищут свои «родные» сети, поэтому время от времени отправляют в окружающее пространство пакеты с их запросами. Обычная Wi-Fi-инфраструктура (хотспот, раздающий сеть для персонала магазина) может слушать эти пакеты — не отвергать их, а записывать в лог MAC-адрес и дальность до терминала (по уровню сигнала).



В случае одной точки это используется как счётчик посетителей на уровне «за вчера 182 человека зашло в магазин, из них 34 уже у нас были», а если точек три или больше — можно уже трассировать потоки людей и видеть наиболее интересные им товары:



Ещё раз: никакого спецоборудования, обычные точки Wi-Fi Cisco и софт для обработки их логов. От модели точки доступа Cisco зависит точность. В нашей схеме нужен ещё аплинк до сервера аналитики, где также развёрнут виртуальный контроллер Cisco — точки сгружают ему логи.
Читать дальше →
Всего голосов 61: ↑57 и ↓4+53
Комментарии91

Так зачем же все таки нужны Refresh токены в OAuth?

Время на прочтение3 мин
Количество просмотров17K
Наверняка каждый программист, работающий с OAuth 2.0, задумывался – зачем же нужны Refresh токены, неужели Access токенов недостаточно? 64 KB — Их должно хватать каждому!

Эта тема довольно активно дискутируется – вот и на Stackoverflow вопрос есть и на Хабре тоже обсуждается. Собственно, именно обсуждение на Хабре и заставило меня высказаться.

Все предложенные комментаторами и авторами мнения касаются безопасности двухтокенного подхода. Безусловно, так и должно быть, ведь безопасность – это главное для фреймворка авторизации/аутентификации! Но будем откровенны – во многих случаях использования подход с двумя токенами не дает никакого выигрыша в защищенности по сравнению с простым и тупым подходом с одним токеном. Или этого сразу не видно…

«Refresh токен можно хранить более защищенно!» — можно и нужно, хотя почти никто так не делает.
«Access token передается по сети чаще – и вероятность его утечки больше» — полноте, мы ведь всегда используем TLS, правда?
«Утечка Ассеss токена на так страшна как утечка Refresh токена» — да, и это тоже правда, именно поэтому в браузер Refresh токен и не выдается…

Есть много нюансов, есть много сценариев использования, при которых использование разных токенов становится полезным, просто видно их не сразу!

Но есть и еще один аргумент, который я почему-то ни разу не встречал – хотя он, на мой взгляд, полностью объясняет, зачем же нужен Refresh токен и почему нельзя, абсолютно, категорически нельзя обойтись только Access токеном.

Производительность.
Читать дальше →
Всего голосов 41: ↑34 и ↓7+27
Комментарии42

История языков программирования: Perl — необычный язык, созданный лингвистом для программистов

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


Язык программирования Perl создал Ларри Уолл (Larry Wall) в 1987 году, когда он работал системным программистом в американской компании Unisys. Цели, которые преследовал Ларри при разработке нового языка программирования, отражены в его названии — PERL, которое позднее стало расшифровываться как Practical Extraction and Report Language, то есть «практический язык извлечения „данных“ и „создания“ отчетов».

Одна из легенд о происхождении Perl гласит, что в то время уже существовал язык с таким названием, поэтому Ларри сократил название на одну букву, не изменив произношения. По иронии судьбы, сегодня тот язык не помнит никто, кроме историков, а Perl известен всему миру.

Хотя, по другой версии, Ларри назвал созданный им язык по имени своей невесты.


Ларри Уолл

На становление Perl повлияли языки Ada, Basic, Fortran, Lisp, Pascal и, конечно, язык C. Perl впитал в себя разные течения компьютерной науки: процедурное, модульное, функциональное и объектно-ориентированное программирование, макрообработку текста, а кроме этого — культуру ОС Unix, с ее богатым набором команд и утилит, стройной продуманной архитектурой и унифицированным подходом к представлению данных.
Читать дальше →
Всего голосов 30: ↑26 и ↓4+22
Комментарии43

Что там в Git 2.8? Push, grep, rebase, config и прочие штуки

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

Вышел новый Git 2.8.0! В течение пары последних недель, когда релиз был в стадии кандидата, я прошёлся по списку коммитов и заметок к нему, пробуя новые вещи и отмечая интересные моменты. Чтобы сохранить ваше время, предлагаю субъективную выборку фич, которые стоит попробовать. Пользуйтесь!


Краткий вариант push -d, синоним push --delete


Это отличное дополнение как для полноты множества опций, так и для скорости набора команд. Возможно, вы уже используете git branch -d, чтобы удалять локальную ветку, а теперь можно так же сократить команду удаления remote-ветки до git push -d.


git branch -d my-branch       # удаляет локальную ветку, если она уже слита
git push -d origin my-branch  # удаляет remote-ветку в origin-репозитории
Что ещё?
Всего голосов 37: ↑36 и ↓1+35
Комментарии9

Список команд чата Skype

Время на прочтение6 мин
Количество просмотров692K
...Skype — это дьявольски хитрая программа, написанная бесспорно талантливыми людьми...Крис Касперски

Доброго времени суток!

Skype сейчас я встречаю чаще на компьютерах чем другие IM клиенты, мне он практически заменил icq, вся рабочая переписка ведется в skype, но речь пойдет не о том, что лучше или популярней. Часто бывает так, что участвуешь сразу в нескольких чатах где количество участников превышает 10, что собственно и приводит к тому, что на рабочем столе и в трее постоянно обновляется количество новых сообщений, а также уведомления в виде всплывающих сообщений, а теперь представьте что у вас 3 окна чата с друзьями, 1 с вашим боссом, другой с девушкой — все это в сумме начинает запутывать, отвлекать и порой раздражать. Хотелось бы расставить приоритеты…

Раньше я чаще всего настраивал «политику» уведомлений только через глобальные настройки программы
Случилось так, что я узнал, что в каждом окне чата skype возможно использование команд, например /alertsoff отключит уведомления для конкретного окна чата, соответственно /alertson включит их обратно.
Поискав немного я наткнулся на некое how-to, оказывается у skype чата довольно много текстовых команд, подобие IRC команд. Далее я постарался попробовать все возможные из них на двух имеющихся у меня платформах, как оказалось не все и не везде работает… Прошу под кат.

Читать дальше →
Всего голосов 187: ↑174 и ↓13+161
Комментарии79

Секреты алгоритма ценообразования Airbnb

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


Какую бы вы назначили цену за проживание незнакомцев в вашем доме? Или сколько вы сами заплатили бы за то, чтобы пожить у кого–то? Вы заплатили бы больше или меньше, будь это спланированный отпуск или спонтанная поездка?
Не так просто ответить на все эти вопросы. В своё время мы столкнулись с тем, что заставляя арендодателей и пользователей отвечать на них, мы тем самым уменьшали активную базу данных жилья. Собирая фокус–группы мы наблюдали за тем, как люди вносят своё жильё в список доступных для аренды мест на нашем портале. И большинство застревали, когда нужно было назначить стоимость. Многие начинали смотреть, какие цены установлены на жильё поблизости, открывая в браузере кучу вкладок и пытаясь сравнивать своё предложение с аналогичными. Кто–то уже приходил, имея определённую цель, может быть, чтобы немного заработать на оплату ипотеки или оплату отпуска. Такие люди устанавливали цену исходя из своих заранее обдуманных целей, без учёта реальной ситуации на рынке. А некоторые, к сожалению, просто сдавались и не указывали стоимость аренды их жилья.

Мы пришли к выводу, что нужно предложить арендодателям удобный автоматизированный сервис, помогающий принять решение при назначении стоимости аренды. Разработка началась в 2012 году, и мы до сих пор его периодически дорабатываем. Этим летом мы внедрили динамическое ценообразование: ориентировочные цены пересчитываются ежедневно, исходя из текущей рыночной ситуации. Мы настроили алгоритм так, чтобы он учитывал наличие необычных, даже удивительных свойств выставляемого жилья. Также мы внедрили, уникальный, как мы считаем, механизм машинного обучения, позволяющий системе не только обучаться на своём опыте, но и, при необходимости, использовать небольшую толику «человеческой» интуиции.
Читать дальше →
Всего голосов 29: ↑27 и ↓2+25
Комментарии15

Sphinx distribute. Ускоряем поиск

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

Одна из неприятных особенностей Sphinx'а — очень скудная информация на русском языке. Удивишись тем, что тема распределения нагрузки не была затронута, решил поделиться данным решением на Хабре.

Цель: повысить производительность Sphinx путём разделения нагрузки на несколько потоков.
Решение
Всего голосов 11: ↑9 и ↓2+7
Комментарии6

Material Design: на Луну и обратно

Время на прочтение11 мин
Количество просмотров389K
“Это унылое диалоговое окно действительно нужно?”



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


Когда-то все продукты Google выглядели по-разному плохо. Даже один продукт на разных платформах выглядел неконсистентно.

Все стало меняться в 2011 году, когда в Google начали усиленно работать над унификацией визуальной части экосистемы своих продуктов и назвали все это Project Kennedy.

При чем тут Кеннеди?
Легенда такова: президент Кеннеди инициировал программу полёта человека на Луну (если верить, что этот полёт когда-либо был). А большой начальник в Google Ларри Пейдж исповедует принцип, что продукты нет смысла улучшать на 10% — они должны быть в 10 раз лучше, чем у конкурентов. Если уж запускать продукт, то сразу на Луну. Вот и здесь было решено круто всё переделать.

Читать дальше →
Всего голосов 146: ↑135 и ↓11+124
Комментарии120

How-to: адаптивные письма в Gmail

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


В нашем блоге мы часто пишем о создании адаптивных почтовых рассылок (раз, два, три) и вообще уделяем большое внимание email-верстке. Сегодня речь пойдет о способе создания адаптивных писем для почтового клиента Gmail, известного своей довольно скудной поддержкой различных возможностей для верстки. Данную технику в 2014 году описал Джастин Ку (Justin Khoo), позднее метод был дополнен статьей Марка Роббинса в блоге Email Code Geek. Мы представляем вашему вниманию адаптированный перевод основных моментов двух публикаций.
Читать дальше →
Всего голосов 14: ↑12 и ↓2+10
Комментарии3

Битовое кунг-фу, или Как оптимизировать трафик между мобильным приложением и сервером

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

Старо как мир…


Люди всегда стремятся быть в курсе последних событий. Благодаря этому стремлению возникло много media, которым необходимо собственное мобильное приложение для доставки контента своим читателям. Так в магазинах появилось великое множество новостных приложений. Сотни приложений для чтения новостей, газет и журналов.


Читать дальше →
Всего голосов 16: ↑15 и ↓1+14
Комментарии9

Как я укрощал Windows Update и получал инвайт на резерв Windows 10

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

В далёком-далёком 2014-м году, в холодном-холодном (кстати, не таком уж и холодном) ноябре месяце мой лэптоп мезозойского 2010-го года выпуска после внезапного отключения электроэнергии во время установки обновлений схватил хард-свичофф. Ну, думаю, бывает, включил его, и как ни в чем не бывало продолжил работу. Но уже на следующий день, после еженедельной пачки апдейтов для ОС, я заметил весьма странную вещь: при запланированной после наката очередного KBxxxxxx перезагрузке системе «Не удаётся завершить обновления», о чём она недвусмысленно повествует нам перед появлением логон-скрина.
Читать дальше →
Всего голосов 20: ↑15 и ↓5+10
Комментарии9
1
23 ...

Информация

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