Pull to refresh
2
0.2

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

Send message

Хочешь быть iOS разработчиком? Будь им!

Reading time2 min
Views388K
На хабре в прошлом месяце была опубликована статья Конкурс ВК: Мессенджер для Android. Как это было!, в которой автор поделился своими мыслями о конкурсе и опубликовал список ресурсов и статей, которые помогли ему в создании приложения. Так как в последнее время я начал изучать разработку под iOS, то у меня скопилось некоторое количество ссылок, которые могут быть полезны для начинающих. Поэтому я последую его примеру и сделаю то же самое, только для своей платформы. Надеюсь, кому-нибудь они окажутся полезны и сэкономят немного времени.

Читать дальше →
Total votes 234: ↑222 and ↓12+210
Comments38

Разоблачение алгоритмов растеризации шрифтов (2/2)

Reading time14 min
Views10K
(вторая часть перевода статьи Разоблачение алгоритмов растеризации шрифтов)

Linux


Наследуя худшее


Windows растеризует шрифты плохо, Linux ещё хуже. Во всех Linux-системах, которые я видел, используется FreeType [10] Дэвида Тёрнера, Роберта Вильгельма и Вернера Лемберга. Это отличная библиотека, но способ её использования, к сожалению, нельзя назвать удачным. Типичный скриншот Linux выглядит так:



Вот полный скриншот:
ссылка

Сразу заметна проблема — чёрные пятна в скругленных углах, образовавшиеся в результате сглаживания. Вцелом, можно сказать, что косые штрихи выглядят тяжелее чем вертикальные, что в регультате производит впечатление «грязи». Вы можете возразить, что FreeType и Linux могли бы использовать схожую с ClearType субпиксельную растеризацию, но по мне это не даёт заметных преимуществ.
Читать дальше →
Total votes 124: ↑121 and ↓3+118
Comments49

Покорим Ruby вместе! Капля двенадцатая

Reading time4 min
Views18K
Настало время писать на Руби что-то пригодное для использования ;) Сегодня мы научимся выдирать нужную нам информацию из web-страниц с помощью Руби на примере Хабра. Начнем с кармы.

open-uri


Давайте каждый откроет свою персональный Хаброцентр (ну или чужой, если все еще не обзавелись инвайтом ;) с адресом вида %username.habrahabr.ru. Наша задача – извлечь из полутысячи строк HTML-кода значение нашей кармы. Предполагаем, что для этого нам необходимо сохранить код страницы в файл, открыть и прочитать его и, используя регулярные выражения, получить необходимую информацию.

Библиотека open-uri сделает первую часть работы за нас. После включения ее в программу становится доступен метод open, который позволяет открывать как локальные файлы, так и URL:
Едем дальше
Total votes 47: ↑39 and ↓8+31
Comments31

markdown-it — парсер markdown / CommonMark на стероидах

Reading time2 min
Views14K
Не так давно было много шума об инициатике CommonMark по унификации маркдауна. Казалось бы, наконец-то в этой замечательной разметке наступит порядок. Но на практике не все так просто. Сейчас ведется работа над базовым синтаксисом, и до расширений дело дойдет не скоро. Ждать год с лишним могут не все. Но разработки спецификаций — это скорее научная работа. Нас же интересует практика — как приворачивать маркдаун к конкретным проектам.

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

Как же быть? К счастью, теперь у нас есть markdown-it!

Читать дальше →
Total votes 40: ↑35 and ↓5+30
Comments29

Звоним на мобильные телефоны из браузера с записью разговоров

Reading time6 min
Views79K


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

Или другой сценарий — входящий в компанию звонок. Как здорово, когда ты в качестве клиента звонишь на безликий 8800 и девушка на том конце телефона отвечает тебе приятным голосом — здравствуйте, Алексей (подставить_свое_имя)! Это производит потрясающий эффект. Когда вместо «назовите себя, номер паспорта и имя кота, информация грузится — послушайте шестую симфонию Моцарта» оператор уже поднимая трубку знает, как вас зовут и видит по вам всю информацию. Сервис, что и говорить.

Но есть ли возможность реализовать такую систему без погружения в дебри настройки АТС — максимально быстро и минимальной кровью? Желательно еще, чтобы все разговоры записывались для целей контроля и обучения сотрудников. Ответ — конечно, погнали под кат.
Читать дальше →
Total votes 51: ↑46 and ↓5+41
Comments20

Унифицированная динамическая корпоративная подпись с логотипом Postfix + alterMIME + addAttachFilter + Active Directory или MySQL

Reading time6 min
Views16K

Введение


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

Разумеется, практически вся работа по выполнению этой задачи ложится на плечи системного администратора. Это хорошо, когда в компании работают пара десятков сотрудников и единожды добавить корпоративную подпись не составит большого труда. Но что делать, когда в вашей компании работают более 50 человек, которые могут использовать разные почтовые клиенты, и которым периодически требуется замена программного обеспечения?

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

В этой статье расскажу, как можно реализовать поставленную задачу, с какими сложностями придется столкнуться, и как эти сложности преодолеть.

Задача и проблемы ее реализации


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

Возможно многие из вас уже пробовали справится с этой задачей, использую связку alterMIME + addAttachFilter, но бросали эту затею по многим причинам. Как правило, чтобы вы не делали, структура писем или подписи становится не читаемая, особенно при активной переписке, а также если кто-то использует Microsoft Outlook. Что же, давайте разберем все эти проблемы…
Читать дальше →
Total votes 16: ↑15 and ↓1+14
Comments9

О том, как облако облегчает стартапам жизнь

Reading time8 min
Views12K


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

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

Microsoft Azure полнофункциональная облачная платформа, которая доступна стартапам совершенно бесплатно по программе BizSpark.

С помощью BizSpark стартап получает пакет MSDN Ultimate (эквивалентный $15000), позволяющий, помимо облачных сервисов до $9000 в год, бесплатно получить лицензионное ПО Microsoft для разработки, тестирования и запуска своих приложений.

Многие начинающие ИТ-стартапы не знакомы с программой BizSpark, и не подозревают о том, какие задачи стартапа могут быть решены с помощью облачной платформы.
Читать дальше →
Total votes 33: ↑22 and ↓11+11
Comments14

10-мониторный рабочий стол своими руками

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



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



Читать дальше →
Total votes 314: ↑277 and ↓37+240
Comments287

Строим свой Gmail с куртизанками и преферансом

Reading time7 min
Views204K

Вместо предисловия


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

Итак, в этой статье я расскажу о том, как я поднимал и настраивал на своем сервере почту, календарь, контакты, RSS-аггрегатор и, в качестве бонуса, хранилище файлов.

Читать дальше →
Total votes 155: ↑135 and ↓20+115
Comments139

Облака — ещё дешевле

Reading time5 min
Views115K
Наверняка вы слышали о сервисах Amazon EC2, Rackspace и им подобным. Может быть даже пользовались. Лично мне бывает нужен иногда личный VPN-сервер. Для этих целей я уже давно держал микро-инстанс на Амазоне, предоставляемый им в течении первого года бесплатно. Плюс использовал для архивов Amazon Glacier, который с его ценой «1 цент за гигабайт в месяц» можно считать тоже почти бесплатным. Но вот год закончился и за EC2 стало нужно платить. Архивы мои тоже разрослись прилично и затраты на Glacier аналогично перестали радовать.

Случайно пробежавший мимо обзор сервиса DigitalOcean по-началу оставил меня равнодушным. Ну, облачный сервис, ну виртуалки. Ну да, чуть-чуть дешевле (но не так чтобы уж очень), чего-то аналогичного Glacier вроде бы нет да и вообще оно того не стоит.

Я сильно ошибался. Ниже будет рассказано как на базе DigitalOcean сделать себе VPN-сервер в пару десятков раз дешевле такого же на Амазоне и сервис хранения архивов, в бесконечность раз дешевле Glacier.
Читать дальше →
Total votes 120: ↑102 and ↓18+84
Comments87

Тысяча и одна gif

Reading time5 min
Views20K
Всем привет!
Хотелось бы рассказать вам историю создания одного простенького развлекательного сервиса по записи gif’ок с веб-камеры при помощи HTML5 и JS. О том как решение на коленке на базе опенсорсных решений в одночасье произвело пусть хоть и маленький, но всплеск популярности волны от которого уже на протяжении полугода приносят небольшое количество посетителей которым полезен этот сервис.

А началось все просто

В конце лета обычным рабочим днем бороздя просторы GitHub я наткнулся на довольно интересный скрипт (facetogif) на нативном JS и HTML5 позволяющий записывать ролики с веб-камеры в gif-анимацию. Была приложена даже рабочая демка заливающая готовые ролики на сервис imgur или позволяющая сохранить их сразу на жестком диске.
Эта идея показалась мне очень интересной и я решил с небольшими переделками реализовать ее в виде самостоятельного сервиса.
Сказано — сделано. В тот же вечер я форкнул репозиторий, зарегистрировал домен «вгиф.рф», поднял VPS (самый дешевый тариф за 5$) на DigitalOcean и написал простейший скрипт на php складирующий ролики прямо там на сервере.
Для экономии ресурсов на сервер установил только Nginx и PHP-FPM.
И тут завертелось
Total votes 62: ↑59 and ↓3+56
Comments37

DigitalOcean запускает сервер метаданных

Reading time2 min
Views12K
MetadataНовость слишком проста, чтобы делать сложную подводку — теперь у DigitalOcean есть Metadata, свой сервер метаданных. Зачем? Для чего угодно, но в первую очередь для управления дроплетами (виртуальными серверами, в терминологии DO).

Metadata — сервис, предоставляемый для дроплетов DigitalOcean, позволяющий каждому серверу получить данные о нем самом (так называемые метаданные). Как пример таких данных, можно назвать данные о пользователях, ID дроплета, регион датацентра, и данные об IP-адресах. В дополнение к обычному получению метаданных дроплета, Metadata позволяет пользователям передавать определенные данные дроплетам при их создании, что может использоваться CloudInit для облегчения настройки облачных серверов.

Мне интересно, а поподробнее можно?
Total votes 18: ↑17 and ↓1+16
Comments10

Нерациональное использование Digitalocean

Reading time2 min
Views6K
После раздачи паков студентам Github’ом решил использовать 100 баксов в Digitalocean со смыслом, а точнее в качестве облачного хранилища — качалки всяких мелочей. Памяти, конечно, в дроплетах не так уж и много, (20 — 40 гБ в бюджетных вариантах), но они на то и мелочи, что весят немного. В качестве образа был выбран привычный Ubuntu 14.04 x32, в качестве качалки был избран transmission с его удобной веб-мордой, а как способ шаринга данных был взят apache2 с webdav. Получился Яндекс.Диск на стероидах (ssd, торрент, качающий напрямую в диск, возможности настроить больше плюшек), но с меньшим объемом жесткого диска.
Читать дальше →
Total votes 28: ↑8 and ↓20-12
Comments11

Пишем своё первое приложение на Android

Reading time10 min
Views1.8M

Предисловие


Цель данного поста — с одной стороны поделиться своим успешным опытом старта разработки приложений на платформе Android и с другой стороны поспособствовать развитию рынка софта для этой замечательной и бурно растущей платформы за счёт (без ложной скромности скажу) возможно Вас, прочитавших данный пост. В сети, конечно, можно найти материалы на тему разработки приложения «чуть сложнее, чем helloworld», но как правило они разрозненные и в них не описываются различные мелкие подводные камешки. В данном посте мы рассмотрим полный цикл разработки приложения, начиная с чистого компьютера до готового apk-файла. Под катом скрины.
Читать дальше →
Total votes 138: ↑123 and ↓15+108
Comments96

Деплой Rails-приложения с помощью Docker

Reading time6 min
Views21K

Введение


Эта запись о том, как я деплоил Ruby On Rails-приложение на сервер DigitalOcean, чтобы оно работало в отдельном Docker-контейнере. Для простоты, я собираюсь очень подробно объяснить процесс развертки Rails-приложения внутри Docker-контейнера
В этом посте:
  • Как я установил Docker на сервере
  • Dockerfile для моего Rails-приложения
  • Сборка с гемами из Gemfile
  • Сборка со скомпилированными ассетами
  • Запуск приложения в Docker
  • Переменные окружения Docker для database.yml
Читать дальше →
Total votes 17: ↑15 and ↓2+13
Comments20

WhatsApp вышел на тропу войны

Reading time7 min
Views119K
Вы уже слышали, что WhatsApp был куплен Фейсбуком. Но мимо внимания публики прошла не менее интересная новость.
WhatsApp начал проводить агрессивную политику в адрес открытых решений, реализующих его протокол.

Об этом сообщают разработчики проекта OpenWhatsApp, который разрабатывает WhatsApp-клиенты для Nokia N9 и Blackberry 10, где нету официальных клиентов WhatsApp.
По требованию жалобы DMCA, в конце прошлой недели Github удалил более 35 репозиториев с открытым исходным кодом и, как обещают юристы WhatsApp, это только начало.

Пишешь либу под WhatsApp — значит поднимай Gitlab!

Сомнения в юридической чистоте проекта OpenWhatsapp в целом оправданы, однако есть ряд этических и бизнес-возражений к принятым мерам.
Давайте изучим историю вопроса и позицию позицию обеих сторон.
Читать дальше →
Total votes 102: ↑93 and ↓9+84
Comments109

Deploy приложения на RoR 4 с помощью Capistrano 3

Reading time16 min
Views63K

Представьте: Вы — веб-разработчик, который только недавно освоил Ruby on Rails. И тут Ваш первый проект подходит к стадии, когда его нужно выложить в интернет.
Вы, конечно, можете залить его на Heroku, но тамошние цены немного кусаются. Остается только купить VPS, настроить его и выложить проект туда.
«Что может быть проще? Найду какой-нибудь гайд, да следаю всё по нему» — подумаете Вы. Вот только гайдов, которые не просто выкладывают команды, но и объясняющие, что эти команды делают, — единицы, да и те используют уже устаревшую вторую версию Capistrano.

Поэтому я решил написать свой гайд, в котором постараюсь подробно рассмотреть:
  • Первичную настройку сервера
  • Установку и настройку nginx (с модулем PageSpeed), postgresql, redis
  • Установку rvm, rails
  • Настройку гема foreman для управления процессами Вашего приложения
  • Настройку сервера Unicorn
  • Настройку гема Capistrano (v3.1) для автоматизации деплоя


Я надеюсь, что этот гайд будет полезен не только новичкам, но и разработчикам со стажем.

Читать дальше →
Total votes 27: ↑23 and ↓4+19
Comments33

Связка rvm + Rails + Nginx + Unicorn или деплоим рельсы правильно

Reading time9 min
Views55K
Целью данной заметки я ставлю в подробностях описать организацию сервера для Rails приложений в самой популярной на данный момент связке: rvm + Rails + Nginx + Unicorn. К написанию статьи побудило отсутствие полной пошаговой документации по этой связке, понятной не только ядреным профессионалам этой области. Далее я попытаюсь подробно, шаг за шагом, описать идеологически правильный процесс организации сервера для обслуживания нескольких Rails приложений (на примере одного) — если у вас есть абсолютная уверенность в том, что на подопытной машине никогда не будет работать более одного приложения — настройка может быть существенно короче и проще. Хочу предупредить, что тонкости, касающиеся работы приложения под высокой нагрузкой в статье не описываются, т.к. цель ставилась иная — заставить работать приложение в связке и сократить количество конфликтов с другими приложениями до минимума.
Читать дальше →
Total votes 68: ↑63 and ↓5+58
Comments135

Ruby on Rails I18n: разработчик — разрабатывает, клиент — заполняет. Об остальном позаботится сервис

Reading time3 min
Views7.4K

Управление интернационализацией в Rails при помощи сторонних сервисов


Одним из самых моих любимых компонентов Rails является организация интернационализации и локализации при помощи класса I18n и файлов-словарей ( еn.yml, ru.yml и т.д. ). Но если брать не «сферический проект в вакууме», а реальное приложение с группой разработчиков и кучей веток в репозитории — то иногда голова пухнет разрешать конфликты при объединении разных веток/версий которые так или иначе возникают в файлах локалей. Как быть? Тут-то нам напомощь и приходят различные сторонние сервисы со своими гемами.
Читать дальше →
Total votes 8: ↑6 and ↓2+4
Comments7

Особенности переустановки предустановленной Windows 8

Reading time8 min
Views542K
… или как создать себе проблему, а затем героически её преодолеть.

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

Итого, имеем ультрабук с Windows 8, рабочим разделом восстановления и отсутствием каких-либо дисков в комплекте поставки (этот момент важен). Бук в качестве стартового ПО имеет UEFI, что в принципе для использования с Windows 8 логично, и даже было бы удобно, если бы не одно но — ключ для установки системы зашит в таблицу данных ACPI, в поддтаблицу MSDM. На тот момент я ещё этого не знал, да и не думал, что мне это понадобится.

Читать дальше →
Total votes 112: ↑106 and ↓6+100
Comments142

Information

Rating
2,179-th
Registered
Activity