Pull to refresh
-10
0
Евгений @Kastrulya

Системный администратор

Send message

Создание архитектуры программы или как проектировать табуретку

Reading time25 min
Views695K
Взявшись за написание небольшого, но реального и растущего проекта, мы «на собственной шкуре» убедились, насколько важно то, чтобы программа не только хорошо работала, но и была хорошо организована. Не верьте, что продуманная архитектура нужна только большим проектам (просто для больших проектов «смертельность» отсутствия архитектуры очевидна). Сложность, как правило, растет гораздо быстрее размеров программы. И если не позаботиться об этом заранее, то довольно быстро наступает момент, когда ты перестаешь ее контролировать. Правильная архитектура экономит очень много сил, времени и денег. А нередко вообще определяет то, выживет ваш проект или нет. И даже если речь идет всего лишь о «построении табуретки» все равно вначале очень полезно ее спроектировать.

К моему удивлению оказалось, что на вроде бы актуальный вопрос: «Как построить хорошую/красивую архитектуру ПО?» — не так легко найти ответ. Не смотря на то, что есть много книг и статей, посвященных и шаблонам проектирования и принципам проектирования, например, принципам SOLID (кратко описаны тут, подробно и с примерами можно посмотреть тут, тут и тут) и тому, как правильно оформлять код, все равно оставалось чувство, что чего-то важного не хватает. Это было похоже на то, как если бы вам дали множество замечательных и полезных инструментов, но забыли главное — объяснить, а как же «проектировать табуретку».

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

Данная статья является попыткой ответить на эти вопросы хотя бы в первом приближении.
Читать дальше →
Total votes 88: ↑85 and ↓3+82
Comments45

Система автоматического подсчета кругов и времени для RC-автомоделей

Reading time6 min
Views21K
Не так давно я собрал свой аналог AMB, она же MyLaps. Для тех кто не знает — это сильно навороченная система для подсчета кругов радиоуправляемых моделей, картингов и даже автоспорт. Стоимость готового комплекта от MyLaps просто космическая. Моя задача была создать либо клон, либо максимально совместимое. Что же у меня получилось на данный момент.
Читать дальше →
Total votes 19: ↑19 and ↓0+19
Comments3

20 вещей, которые я должен был знать в 20 лет

Reading time3 min
Views717K
1. Мир пытается оставить тебя тупым. Начиная от банковских платежей и процентов и заканчивая чудо-диетами — из необразованных людей легче вытрясти деньги и ими проще управлять. Занимайтесь самообразованием столько, сколько можете — для того, чтобы быть богатым, независимым и счастливым.
Читать дальше →
Total votes 544: ↑445 and ↓99+346
Comments544

TOP'ай сюда

Reading time5 min
Views180K
Обзор практически всех *top утилит под linux (atop, iotop, htop, foobartop и т.д.).

top

Все мы знаем top — самую простую и самую распространённую утилиту из этого списка. Показывает примерно то же, что утилита vmstat, плюс рейтинг процессов по потреблению памяти или процессора. Совсем ничего не знает про загрузку сети или дисков. Позволяет минимальный набор операций с процессом: renice, kill (в смысле отправки сигнала, убийство — частный случай). По имени top суффикс "-top" получили и все остальные подобные утилиты в этом обзоре.

atop


Atop имеет два режима работы — сбор статистики и наблюдение за системой в реальном времени. В режиме сбора статистики atop запускается как демон и раз в N времени (обычно 10 мин) скидывает состояние в двоичный журнал. Потом по этому журналу atop'ом же (ключ -r и имя лог-файла) можно бегать вперёд-назад кнопками T и t, наблюдая показания atop'а с усреднением за 10 минут в любой интересный момент времени.

В отличие от top отлично знает про существование блочных устройств и сетевых интерфейса, способен показывать их загрузку в процентах (на 10G, правда, процентов не получается, но хотя бы показывается количество мегабит).

Незаменимое средство для поиска источников лагов на сервере, так как сохраняет не только статистику загрузки системы, но и показатели каждого процесса — то есть «долистав» до нужного момента времени можно увидеть, кто этот счастливый момент с LA > 30 создал. И что именно было причиной — IO программ, своп (нехватка памяти), процесор или что-то ещё. Помимо большего количества информации ещё способен двумя цветами подсказывать, какие параметры выходят за разумные пределы.
Читать дальше →
Total votes 401: ↑389 and ↓12+377
Comments122

QoS в Linux: фильтр U32

Reading time14 min
Views21K
Так повелось, что фильтр U32 в подсистеме управления трафиком ядра Linux считается простым и понятным, а потому в подробном документировании не нуждается. Например, в LARTC (Linux Advanced Routing and Traffic Control) про него лишь несколько абзацев. Но на самом деле U32 устроен гораздо сложнее и интереснее, но и в использовании он не так прост, как может показаться. Под катом статья по этому фильтру с примерами использования и подробными пояснениями.
Читать дальше →
Total votes 55: ↑53 and ↓2+51
Comments11

Срезаем пики с RRD графиков на примере Munin

Reading time3 min
Views5.2K
Любой linux администратор наверняка наблюдал аномальные пики на RRD графиках. Пики появляются вследствие нарушения процесса сбора отслеживаемой величины и портят картину на графике. Это нормальное явление для RRD.

На графике трафика пики могут появится после перезапуска сетевого интерфейса или после перезагрузки сервера, что по сути одно и тоже. В обоих случаях процесс подсчета будет прерван из-за остановки устройства.

image

Читать дальше →
Total votes 41: ↑36 and ↓5+31
Comments14

Компьютер в машине

Reading time3 min
Views80K

Предыстория



У меня toyota corolla 2003 года, с завода на официальные машинки ставили только кассетные магнитолы. Конечно, кассеты в магнитолу я не ставил ни разу, обходился радио и фм модулятором.
Не сказать, что я особо притязателен к музыке, но конечно хотелось чего-то более. Какие были варианты:
1. Поставить рамку на 1 или 2 дин и поставить обычную магнитолу.
2. Купить за 70$ родную, на eBay но уже с дисками. Но без мп3 :)
3. Купить за 600$ крутую, прямо под мою машину, со всем…

Но не один мне особо не нравился…
1. обычные магнитолы лишали бортового компьютера.
2. Шило на мыло :)
3. Дороговато и не очень нравились…

Вот и пришло решение поставить компьютер в машину. Вот что было ДО и ПОСЛЕ. Интересно? Добро пожаловать под хабракат =)
До: image После: image
Читать дальше →
Total votes 350: ↑337 and ↓13+324
Comments275

Прием спутниковых тв каналов в linux

Reading time6 min
Views27K
Доброго времени суток.
Хочу вам рассказать про настройку приема спутниковых не закодированных тв каналов в linux и вещание их в локальную сеть.
Исходными данными будем считать наличие спутниковой антенны настроенной на определенный градус(например на www.lyngsat.com/amos2.html) и компьютера под управлением linux(не важно какой дистрибутив, в моем случае был Slackware). Задача очень интересная и актуальная в наше время.
Итак начнем.
Total votes 44: ↑42 and ↓2+40
Comments42

Стабильное вещание IPTV через VLC

Reading time8 min
Views61K
С IPTV пришлось познакомиться поближе, когда в компании интернет-провайдера где я работал, решили организовать вещание IPTV. Выяснилось, что вещание осуществляется в linux и программой vlc, которая по слухам единственная в своем роде. Была установлена тарелка и DVB-карта SkyStar2, которая предположительно должна была без проблем заработать в linux'e. Так и было со всеми новыми машинами, где была установлена ubuntu server. На Debian заработало только после обновления ядра. Настройка прошла относительно легко, благо на то время уже было несколько статей на эту тему и документация к vlc была тоже очень полезна. После запуска начались некоторые проблемы с пропаданием звука и видео на каналах и другие проблемы, описанные ниже. После их появления были написаны скрипты, устраняющие эти проблемы. Сейчас на них работает 3 сервера с 5 dvb-картами в общей сложности и вещается 23 канала с 3х спутников. Под катом — перечисление проблем, которые могут появиться после запуска вещания IPTV через VLC в Linux и то как с ними бороться. Бороться будем с помощью bash.
Читать дальше →
Total votes 50: ↑48 and ↓2+46
Comments44

Защищаемся от HTTP DDoS и прочих Хабраэффектов

Reading time5 min
Views10K
Простой способ защиты от HTTP DDoS — включить syn-cookies и заблокировать подонков. Но что делать если атакует 5к-10к хостов да еще и с динамическими IP? Тут нам на помощь придет frontend-backend архитектура c промежуточным кэшированием! Почему с промежуточным кэшированием? А потому что в моем случае от шквала запросов от frontend'а backend умирал унося за собой систему.
Читать дальше →
Total votes 160: ↑152 and ↓8+144
Comments55

pv — маленькая, но очень полезная утилита

Reading time2 min
Views83K
Один мой друг сказал по поводу pv следующее «Я админю семь лет, мне нужна была эта тулза десятки раз, а я даже не знал что она существует». В размышлениях над тем как заполучить инвайт на Харбе, я набрал в поиске pv. И ничего не нашел.
Читать дальше →
Total votes 290: ↑280 and ↓10+270
Comments94

Техническая организация хостинга

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

Есть шесть вещей, на которые опирается любой хостинг-провайдер: Сервер, Панель, Домены, Бухгалтерия, Поддержка, Юридическая организация. Сейчас я расскажу основные варианты выбора.
Читать дальше →
Total votes 30: ↑26 and ↓4+22
Comments104

Выпущен XNeur и gXNeur версии 0.9.4!

Reading time2 min
Views4.2K

X Neural Switcher (XNeur)


Данная программа является автоматическим переключателем клавиатуры. Т.е. при наборе текста, если он набирается на неверном языке, xneur автоматически (или по запросу) переключит язык на нужный.

Принцип работы у программы аналогичен Punto Switcher.

Выпущен XNeur и gXNeur версии 0.9.4!

Список изменений:
  • Транслитерация приведена к стандарту ISO 9 (GOST 7.79-2000).
  • Добавлена возможность переключения языка при вводе, а не после пробела.
  • Добавлены новые действия, на которые вешаются звуки и OSD.
  • Добавлена возможность фиксации раскладки. Если раскладка фиксирована, то на нее автоматического переключения не будет происходить. Соответственно, если в данный момент включена фиксированая раскладка, то с нее переключения происходить не будет.
  • Исправлена работа с диакритическими знаками (â, ű, ë и подобными). Спасибо польским пользователям за сообщения об ошибках и тестирование.
  • Добавлены болгарский, чешский, греческий, эстонский, армянский, литовский, латвийский, польский, испанский и узбекский языки. В общей сложности, программа теперь поддерживает восемнадцать (18) языков.
  • Доработан gxneur, добавлены всякие удобства. Разумеется, gxneur поддерживает все возможности xneur.
  • Словари, начиная с этой версии, вводятся на языке ввода, а не в английском коде.
  • Разработаны новые флажки 24х24. Их удобно использовать с gxneur в окружении KDE. Взять можно здесь xneur.ru/browser/icons/bobs. Положить надо в /usr/local/share/gxneur/pixmaps .
  • Множественные улучшения и исправления глюков.

Читать дальше →
Total votes 42: ↑38 and ↓4+34
Comments36

Прописываем dpi в PNG с помощью PHP

Reading time2 min
Views5.2K
Понадобилось мне тут вдруг для одной прикладной задачи генерировать PNG-шки на PHP, чтобы затем их можно было вставлять в документы и распечатывать. Но вот проблема, никак с помощью GD в PHP при сохранении нельзя задать разрешение в dpi, а ведь это очень важно при печати. С ImageMagick мне связываться не хотелось, поэтому я быстренько нагуглил PNG (Portable Network Graphics) Specification и написал вот такой код:
Читать дальше →
Total votes 59: ↑54 and ↓5+49
Comments121

Простое сравнение изображений с помощью php

Reading time3 min
Views27K
Алгоритм возможно не новый, и не является идеалом, но, на удивление, работает. Никаких графов и корелляции.

Для начала, стоит отметить, что сравнение очень приблизительно (по крайней мере, на данном этапе), временами две совершенно разные фотографии оказываются похожими процентов на 60%, так же не учитываются жесткие модификации (повороты, инверсия, обрезка) – для этого нужно доводить и доводить. Лично для меня самым главным оказались два параметра: скорость, независимость от разрешения изображения и возможность сравнивать «изображения» прямо в базе данных.
Читать дальше →
Total votes 161: ↑153 and ↓8+145
Comments64

Ускоряем выборку произвольных записей MySQL

Reading time3 min
Views33K
Последнее время оживилась публика с вопросом случайной выборки из таблицы. Решений по оптимизации полно, и нового сейчас я вам наверное ничего не покажу, просто напомню про основные методы оптимизации — упрощение запроса и индексацию. Без предисловий про фриленсеров, сразу к делу ;)

Читать дальше →
Total votes 59: ↑50 and ↓9+41
Comments22

Система разделения прав доступа в веб-приложении

Reading time14 min
Views70K
В этой статье мы пройдём с вами полный цикл от идеи, проектирования БД, написания PHP-Кода, и завершающей оптимизации. Постараюсь рассказать обо всем, как можно проще. Использовать для примеров буду PHP и Mysql. Заодно потренирую новичков :).

В этой статье я коснусь вопросов:
  1. Идея ACL
  2. Проектирование БД
  3. Нормализация БД
  4. Рефакторинг кода
  5. Оптимизация рабочего кода

Статья является ответом на Бинарное распределение прав доступа в CMS. Пока автором пишется практическая часть, я хочу предоставить мой вариант, который я использую довольно давно.
То, что я сейчас расскажу, похоже на ACL.

Читать дальше →
Total votes 94: ↑71 and ↓23+48
Comments103
1

Information

Rating
Does not participate
Location
Россия
Works in
Date of birth
Registered
Activity