Search
Write a publication
Pull to refresh
125
0
Александр Белозор @abelozor

User

Send message

Тонкости Rails 4 — Turbolinks

Reading time5 min
Views39K


Гем под названием Turbolinks способен неплохо ускорить ваше приложение, используя JavaScript для обновления контента на странице. Он включен по умолчанию в Rails 4, но я покажу, как можно использовать его уже сейчас в программах, написанных на Rails 3. Также вы узнаете о некоторых подводных камнях.
Читать дальше →

7 паттернов рефакторинга толстых моделей в Rails

Reading time6 min
Views30K
Толстые модели сложны в поддержке. Они, конечно, лучше, чем контроллеры, захламленные логикой предметной области, но, как правило, нарушают Single Responsibility Principle(SRP). “Всё, что делает пользователь” не является single responsibility.
В начале проекта SRP соблюдается легко. Но со временем модели становятся де-факто местом для бизнес-логики. И спустя два года у модели User больше 500 строчек кода и 50 методов в public.
Цель проектирования — раскладывать растущее приложение по маленьким инкапсулированным объектам и модулям. Fat models, skinny controllers — первый шаг в рефакторинге, так давайте сделаем и второй.
Второй шаг

Еще один интересный облачный сервис с 15Gb бесплатного дискового пространства

Reading time4 min
Views32K
Читал намедни свежий обзор MacBook’а Pro Retina 2012 от небезызвестного блогера.
И наткнулся на упоминание интересного сервиса 4Sync. Полез на Хабрахабр почитать отзывы о данном сервисе, и… ничего не нашел (хотя судя по упоминаниям в интернете существует он вроде бы уже давно).


Читать дальше →

Карта Интернета

Reading time3 min
Views20K
Привет всем!

Хочу представить вам Карту Интернета или результат кластеризации более чем 350 тысяч сайтов в соответствии с переходами пользователей между ними. Размер круга определяется посещаемостью сайта, цвет – национальной принадлежностью, а положение на карте – его связями с другими сайтами. Если два сайта имеют стабильный поток пользователей между ними, то они будут «стараться» расположиться ближе друг к другу. После завершения работы алгоритма, на карте можно наблюдать скопления сайтов (кластеры) объединенные общими пользователями.

image

Например, если ввести в поиск habrahabr.ru, то можно увидеть, что dirty.ru и leprosorium.ru в том же «созвездии», а еще подальше livejournal.ru. Это говорит о том, что тот, кто сейчас читает этот текст, также с высокой вероятностью посещает эти сайты (относительно усредненного пользователя Рунета конечно).

Еще более интересный пример кластеризации можно увидеть внизу карты, между фиолетовой Японией и желтоватой Бразилией: там расположилась целая порнострана по размерам сопоставимая со всем Евронетом. Интересно, что будучи достаточно компетентным в рассматриваемом вопросе, внутри большого порнокластера можно различить тематические подкластеры меньшего размера.

Тем, кого интересует краткое техническое описание – добро пожаловать под кат
Читать дальше →

Настрой свой Google

Reading time2 min
Views25K
После написания этого поста, меня заинтересовали параметры поиска которые можно использовать, для удобной работы.
Задавшись этим вопросом, в рунете я более менее полной информации не нашел.
Но! Оказывается Google уже давно и для всех, все показал.

Читать дальше →

5 распространенных ошибок Rails-разработчиков

Reading time4 min
Views13K

Я проработал с Rails уже порядочное количество времени, и за это время я видел много Rails-приложений, а также немало прочитал и написал плохого кода на Ruby. И вот вам 5 самых распространенных ошибок, которые я наблюдал практически в каждом приложении.
Читать дальше →

Яндекс.Диск как файловая система

Reading time1 min
Views145K

Недавно Яндекс анонсировал свой новый сервис, подобный DropBox'у. Многие его сразу же начали поливать из ведра, хотя, я думаю, зря.

Один из плюсов лично для меня, линуксоида — не нужно устанавливать дополнительные приложения, как в случае с DropBox'ом. Сервис можно подключить через файловый менеджер Nautilus, используя WebDAV. Что я, собственно, сразу же и сделал.

Однако, я не стал на этом ограничиваться, ведь гуёвый доступ — не совсем хорошо, консольки никто не отменял.

Подключим Яндекс.Диск как файловую систему

Самые популярные игры и приложения для Ubuntu за март 2012 (репозиторий UALinux)

Reading time2 min
Views1.7K
imageКак администратор репозитория игр и приложений для Ubuntu, хотел бы поделится статистическим анализом за март 2012 года.
Стоит отметить, что за те два с небольшим месяца существования репозитория к нему подключилось более 35 тыс уникальных ip-адресов и было более 500 тыс обращений.

Статистика по играм за этот месяц отличается от статистики за прошлый, что говорит о том, что пользователи решили попробовать все игры, доступные в репозитории.
Читать дальше →

Честная генерация DOCX файлов на PHP. Часть 2

Reading time7 min
Views30K
image Здравствуйте, уважаемое хабрасообщество!
Продолжаем историю про генерацию DOCX средствами PHP.

Что нас ждет сегодня:
  • Мы узнаем, как вставлять изображения в документ;
  • Просветимся на счет English Metric Units;
  • Сделаем задел на будущую генерацию Exel.

Тем, кто не в курсе, рекомендуется прочитать первую часть. Ну а кто в теме – прошу под кат
Читать дальше →

RealSync — односторонняя синхронизация исходников в реальном времени для веб-разработчиков

Reading time6 min
Views30K
Представляю общественности утилиту RealSync (GPL). Ее призвание — облегчить работу тех, кто периодически мучается от лагов сетевой папки Samba при поиске/редактировании файлов веб-проекта. Идея RealSync в том, что вы теперь работаете с файлами сайта на локальной машине в привычной IDE, а результат, как и прежде, смотрите на удаленном разработческом веб-сервере, куда RealSync копирует изменения в реальном времени. В результате вы можете, например, запустить поиск по всем файлам в IDE — они же локальные, а не подключены через сетевую папку по Samba, так что поиск работает очень быстро; при этом ваш Ctrl+S продолжает попадать на сервер моментально, как и при работе через сетевую папку.

RealSync — утилита для Windows, MacOS и Linux, позволяющая в реальном времени содержать на удаленном сервере точную копию файлов (например, скриптов на PHP, Python, Ruby и др.) из папки на вашем локальном компьютере, даже в условиях плохой связи, когда вы работаете из дома. Все изменения, производимые в локальной папке, попадают на сервер практически моментально (задержка около 0.2 с), независимо от того, сколько этих изменений и каким именно образом они были внесены (хоть через IDE, хоть через Блокнот или Far).

Главное отличие RealSync от аналогов — в том, что он крайне устойчив к нестабильности интернет-соединения, реконнектам и тайм-аутам. При этом используется SSH-соединение, доступ через которое конфигурируется автоматически при первом запуске утилиты (т.е. не нужно возиться с ключами — настройка производится в интерактивном режиме).

Фактически, случайно «убить» RealSync почти невозможно. Вы можете держать его постоянно свернутым в трее и забыть про его существование (CPU он почти не ест). Если утилита видит, что соединение разорвалось на длительный срок, автоматически запускается знакомый многим алгоритм RSYNC для быстрого копирования большого количества различий. В режиме же реального времени применяется собственный протокол поверх SSH, чтобы при нажатии Ctrl+S в редакторе вы сразу же видели изменения на сервере. Передача файла сопровождается приятным «треньканьем» (отключаемым при необходимости в конфиге), а временная потеря связи — покраснением иконки (когда связь восстановится, иконка обратно станет серой, а RealSync «догонит» накопившиеся изменения).

И зачем этот велосипед, когда есть Samba или Денвер или XAMPP?

Читать подробности

Использование связки Sinatra, mongodb и carrierwave, пишем простую фотогалерею

Reading time3 min
Views5.2K
Всем доброго времени суток!

Введение


На написание этого поста меня сподвигло слишком малое количество материала о sinatra, и тем более о данной связке. Надеюсь для кого то этот пост будет полезен. Ниже я опишу как можно совместно использовать sinatra, mongodb и carrierwave, на примере создания простой фотогалереи. Для общения между sinatra и mongodb мы будем использовать отличный gem — mongoid. По умолчанию предполагается что у вас уже установлен ruby и mongodb. Приступим.
Читать дальше →

Простой сервис уведомлений через Twitter

Reading time3 min
Views3.3K

Twitter уже для многих людей стал повседневным средством общения и получения информации. Лично я каждый день открываю его по несколько раз с телефона, да и на десктопе клиент запущен постоянно.
Возникла идея, что неплохо бы получать через него какие-то напоминания, раз уж я пользуюсь им каждый день.
За вечер был написан небольшой бот для напоминаний.
Читать дальше →

Еще 5 гемов на все случаи жизни

Reading time3 min
Views3.2K
В продолжении топика о разных и полезных гемах, хочу рассказать еще о нескольких, которые делают мою (а потом, надеюсь, что и вашу) работу с RoR еще более приятной и удобной.
Читать дальше →

Поём вместе с Sinatra. Часть первая. Первое знакомство

Reading time3 min
Views20K
Доброго времени суток!

Что такое Sinatra


Sinatra — маленький, но довольно интересный DSL (Domain-specific language) фреймворк, написанный на Ruby. В отличие от Ruby on Rails он не следует типичному паттерну MVC (Model — View — Controlller). Sinatra создавался для того, чтобы «программист смог быстро создать веб приложение, написанное на Ruby с минимальными усилиями.

Для того, чтобы воспользоваться Sinatra нам неорбходимо его установить. Сделать это можно следующей командой в RubyGems:

gem install sinatra

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

gem install shotgun

Ну вот и всё! Всё необходимое для работы у нас есть. Настал момент для творчества. Приступим…
Читать дальше →

Создание гемов — Руководство

Reading time3 min
Views9.9K
Хотя на Хабре уже проскакивали статьи о создании гемов, они либо содержат устаревшую, либо неполную информацию.

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

Современный подход заключается в использовании Bundler совместно с другими инструментами, такими, как Git, YARD и RSpec-2.
Читать дальше →

Восстановление емкости аккумулятора ИБП

Reading time5 min
Views426K
Подавляющее большинство из нас использует такое крайне полезное устройство, как источник бесперебойного питания. Качество питания не везде идеальное, да и просто мельчайшие проблемы с электропитанием иногда могут дорогого стоить. Потери данных это всегда неприятно, а иногда просто таки фатально. Устройство куплено, установлено под стол, подключено и владелец его находится в полной уверенности, что в любом случае при перебое в электропитании он успеет корректно завершить работу, а может быть и сделать бэкап на флешку. Время идет, бесперебойник периодически дает о себе знать — как заправский сторожевой пес он подает голос при малейших отклонениях в параметрах электросети. Хозяин спокоен и все хорошо. Но в один из дней перебой таки случается и в этот раз ИБП не просто подает голос и сразу переключается с батареи на сеть, в этот раз свет выключили на долго. Мы спокойно копируем файлы (ведь в запасе у нас минут 15, не меньше) и тут бесперебойник начинает пищать совсем часто и все выключается. Как так? Ведь бесперебойник же должен был нас защитить от подобных ситуаций, а он только вселял нам ложную уверенность в нашей безопасности! Почему так произошло?

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

Читать дальше →

Встраиваемые движки пользовательских блогов для Ruby on Rails

Reading time3 min
Views3.2K
Иногда мне кажется, что в экосистеме Ruby on Rails есть проклятое место: встраиваемые движки для ведения блогов. Это особенно мило наблюдать в свете существования бесконечного количества скринкастов «блог на Rails за 10 минут».

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

Некоторое время назад, когда я работал в «АБАК-ПРЕСС», руководство повелело внести в милый сайтик LookMart.ru весьма модную нынче «фишечку» — пользовательские блоги (на данный момент эта функциональность находится в активной разработке). Меньше всего нам хотелось изобретать велосипед и городить очевидные вагоны из контроллеров с моделями, но после небольшой разведки пришлось смириться и сделать всё самостоятельно. Почему?
Читать дальше →

gem the_sortable_tree

Reading time3 min
Views3.2K
TheSortableTree — гем, реализующий функционал Drag&Drop для деревьев построенных на основе гемов awesome_nested_set или nested_set.



В 2008 году, когда мы делали свою первую социалку на рельсах, я впервые столкнулся гемом better_nested_set. Гем был прекрасен (я имею ввиду по сути, не по коду, реализация тогда еще хромала) и, пожалуй, одного только его было достаточно, что бы убедить меня забыть программирование на PHP, как страшный сон.

Мы использовали гем для формирования многоуровневого дерева комментариев. Но было одно но… В тот момент не было ни одного хелпера, который бы позволял отрисовывать эти деревья. Из-за этого приходилось выдумывать свои велосипеды. Свой велосипед сделал и я.

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

Да, меня критиковали — это медленно отрисовывается, это не сработает на дереве из 10 000 элементов, надо по-другому и вообще…

Однако с 2008 года я так и не увидел чего-то другого, более доступного, быстрого и простого. Возможно, я плохо искал.

И вот я, потупив взор и нервно теребя в руках носовой платочек, представляю вам реинкарнацию моего хелпера в виде гема основанного на Rails Engines.

Уверен, для отрисовки небольших деревьев (до 100 элементов) и создания небольших CMS, где хочется управлять деревом простым перетаскиванием, мой хелпер подойдет идеально.

https://github.com/the-teacher/the_sortable_tree

Читать дальше →

Набор инструментов для построения графиков, блок-схем и диаграмм

Reading time3 min
Views180K


Есть много разных сервисов, облегчающих жизнь веб-разработчику или дизайнеру, в том числе создающих разные графики, диаграммы, блок-схемы и т.д. Ниже представлена небольшая подборка.
(Осторожно, много изображений)
Читать дальше →

5 гемов на все случаи жизни

Reading time3 min
Views9.4K
В блоге про Django я периодически вижу посты с обзорами интересных расширений для этого фреймворка. Идея мне понравилась, и я решил, что было бы неплохо сделать похожий цикл заметок и о Ruby on Rails.

За последние 9 месяцев работы с RoR у меня накопился небольшой список гемов, которые существенно упрощают жизнь разработчику, и которые я бы мог посоветовать для решения тех или иных задач. В этой статье я хочу рассказать о пяти из них.
Читать дальше →

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity