Ne v kontakte Antisocial programmer's blog

Притча о Junior'е

Притча о Junior'е

    thoughts     dev     articles     essay

Хочу предложить вашему вниманию историю, которая приснилась мне не далее как сегодня под утро. Проснувшись, я первым делом подумал: “ну и к чему вообще мне это приснилось?..”, но потом понял, что этот нехитрый сюжет имеет прямое отношение к нашей отрасли. Строго говоря, это применимо к молодым специалистам практически в любой области, но именно в программировании это цветёт пышным цветом и даёт сочные плоды :-) Сон получился на удивление связный, так что привожу его почти без литературной правки. История приключилась с двумя мальчишками-приятелями, будем называть их Сашей и Петей. День был солнечный, тёплый — пожалуй, идеальный день с точки зрения шестиклассника на каникулах. Поэтому, когда Петя зашёл за Сашей и позвал его гулять, Саша немедля согласился, задержавшись лишь чтобы завязать шнурки кроссовок. Родители были на работе, а потому предполагалось, что они не против прогулки, по крайней мере, если они о ней не узнают.

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

В этот раз, спускаясь по лестнице вниз и обсуждая с Петей, кого бы ещё позвать, чтобы поиграть в мяч, Саша заметил, что на стене у одного из лестничных пролётов краска некрасиво облупилась и раскрошилась (наверное, кто-то тащил по лестнице что-то тяжёлое и задел стену углом). В принципе, мелочь, но Саше стало как-то обидно, что их подъезд теперь не такой аккуратный, как раньше.

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

Read more →

Четыре лика Open Source

Четыре лика Open Source

    thoughts     open source     articles

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

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

Мир первый: большой Open Source.

Сюда относятся крупнейшие открытые проекты, над которыми работают сотни людей. Именно о них упоминают в первую очередь, когда хотят проиллюстрировать важную роль открытого ПО в IT-индустрии: ядро Linux, Apache, FreeBSD, KDE, GNOME, Mozilla Firefox. Следом за ними идут продукты менее именитые, но от того не менее важные: Drupal, phpBB, OpenJDK, Eclipse, целая плеяда языков программирования и многие другие.

Read more →

Обновления для разработчиков и людей — несерьезно о серьезном.

Обновления для разработчиков и людей — несерьезно о серьезном.

    dev     articles     database     migrations

Пост вышел многабукаф, поэтому ленивые могут пропускать части, помеченные как иллюстративные.

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

Типичный подход к решению этой проблемы выглядит так:

  1. Делается публичный релиз продукта.
  2. Начинается работа над следующим релизом, в ходе которой пишется и обновляется конвертор с предыдущего релиза в будущий. Таким образом, текущий релиз всегда можно обновить до dev-ветки.
  3. Публикуется новый релиз, который способен спокойно обновиться с предыдущего, пользователи счастливы.

Read more →

Собираем домашний сервер. Часть 2, софтовая.

Собираем домашний сервер. Часть 2, софтовая.

    home server     sysadmin's     articles     soft

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

Операционная система

Специфика домашних серверов такова, что это машина, которая делает абсолютно все: сетевая файлопомойка, DNS, DHCP, маршрутизация, торренты, GIT и еще бог весть что, вопреки всем рекомендациям экспертов по безопасности. Я тоже поддался на это искушение, успокоив себя тем, что это во-первых, удобно, во-вторых, дешево и, в-третьих, наружу будет торчать VPN-сервер и больше ничего. Зато изнутри будет виден весь зоопарк сервисов, необходимых для комфортной жизни гика.

Таким образом, выбор ОС делался из соображений “изкоробочной” поддержки всех необходимых сервисов и удобного интерфейса к ним. Безусловно, настроить все это самому можно без особых проблем, но оно мне надо? После того, как настройка софта из фана превращается в производственную необходимость, удобство и скорость управления резко возрастают в цене.

Read more →

Собираем домашний сервер. Часть 1, железная.

Собираем домашний сервер. Часть 1, железная.

    home server     sysadmin's     articles     hardware

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

На всякий случай напомню ключевые требования, которые предъявлялись к серверу:

  • Дешевизна железа (бюджет был установлен 5000 руб. ± 1000 руб.).
  • Возможность постепенного наращивания мощности в максимально широких рамках.
  • При всем при том как можно менее шумный.

Нетрудно заметить, что первые два пункта слегка конфликтуют с последним. Впрочем, как оказалось, не фатально. Устроенная ревизия закромов показала, что у меня уже есть в наличии две сетевых карты на 100 Мбит с интерфейсом PCI и жесткий диск Seagate на 160 Гб, которые решено было использовать. Для основного хранилища будет использован внешний жесткий диск от WD, работающий в текущем сервере. Исходя из этих требований, были выдвинуты уже более технические требования к железу:

Read more →

Собираем домашний сервер. Часть 0, вводная.

Собираем домашний сервер. Часть 0, вводная.

    home server     sysadmin's     articles

Этим постом я начинаю серию, в которой расскажу о процессе сборки, настройки и эксплуатации домашнего сервера.

Начать же я хочу с изложения предпосылок, которые обусловили выбор железа, софта и настроек, о которых будет рассказано далее.

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

В этом отношении и моя семья не стала исключением. В качестве роутера у нас трудился ASUS WL-520GU с прошивкой от Олега. ну а семейной файлопомойкой работал допотопный ноутбук Toshiba Satellite Pro 4600 с подключеным внешним USB HDD. До поры до времени эта конструкция всех устраивала, хотя скорость работы роутера под нагрузкой былаа не ахти какой, а старенький ноутбук делал файлопомойку не слишком шустрой. Стояло все это дело под столом:

Read more →

Обработка множества исключений: решение

Обработка множества исключений: решение

    dev     articles     exceptions

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

Решение 1, читерское.

В условии было сказано, что надо обрабатывать исключения в методах init(), run() и shutdown(). И хотя это явно не оговаривалось, по логике функционирования эти методы вызываются подряд. Следовательно, можно сделать так:

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

Read more →

Упражнение: обработка множества исключений

Упражнение: обработка множества исключений

    dev     articles     exceptions

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

Есть корневой класс, условно назовем его ApiDispatcher, который управляет основным потоком исполнения. В нем есть три основных метода:

  1. init() — инициализирует, необходимые для обработки запроса объекты.
  2. run() — запускает обработку бизнес-логики.
  3. shutdown() — освободжает ресурсы.

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

Read more →

Три top-подобных утилиты, которые должны быть на каждой Linux-машине

Три top-подобных утилиты, которые должны быть на каждой Linux-машине

    unix     sysadmin's     top     articles

Практически всем пользователям знакома утилита top, показывающая интерактивный список процессов, отсортированный по нагрузке на процессор. История этой утилиты идет от 1984 года, когда Уильям ЛеФевр написал такую утилиту для BSD 4.1. С тех пор top или его аналог есть практически в каждой UNIX-подобной ОС.

Годами доказав свою практичность, top вдохновил многих других программистов на разработку похожих утилит, относящихся к разряду must-have на любой Linux-машине, поскольку они дают возможность быстро оценить ситуацию в системе.

htop

htop — это логическое развитие top. Его интерфейс сделан с помощью ncurses, и благодаря этому он предоставляет гораздо больше возможностей по визуализации процессов и общей загрузки системы, а так же значительно более интуитивный интерфейс настройки всего этого.

Read more →

Удобная разработка букмарклетов

    js     dev     bookmarklets     articles     frontend

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

О букмарклетах

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

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

Read more →