воскресенье, 11 декабря 2011 г.

Достоинства и недостатки ОС Linux

В этой статье я хотел бы коротко расписать основные достоинства и, заметьте, недостатки этой замечательной (для меня) ОС. Поехали!

Вначале — достоинства:

1. Open Source. Первое, и, как мне кажется, самое главное отличие и вместе с тем достоинство Linux в сравнении с Windows (другие системы, с вашего позволения, я в расчёт брать не буду — слишком уж мала их популярность на рынке потребителей). Так вот, Open Source в двух словах, а точнее, в одном — это свобода. Свобода программного обеспечения. Что это значит? А это значит то, что ядро любого дистрибутива Linux, модули, различное ПО, заточенное под Linux (и не только) имеет открытый исходный код. Это же, в свою очередь, значит, что любой, абсолютно любой человек, независимо от образования, социального статуса, семейного положения и места проживания может модернизировать и улучшить любую программу или даже само ядро Linux.Причём, улучшить не только для себя, но и предоставить плоды своей работы всему громадному мировому сообществу Линуксоидов. Повторюсь — как по мне, это несомненное преимущество, но вместе с тем одновременно и недостаток, о чём будет написано чуть позже.

2. Безопасность. Тут тоже всё очень интересно. Дело в том, что процентное количество десктопов на Линуксе — около 2%, если не ошибаюсь. (Сервера, коих около 80% от общего количества, а расчёт не берём). Как следствие этого факта — под Линукс практически не пишут вирусы. Не пишут именно по причине ненадобности этого занятия. Всё правильно — зачем морочить себе голову, пытаясь изобрести сложный вирус или троян, если и впарить его, простите, будет некому — ведь всего лишь 2 человека из 100 пользуются Линуксом? Гораздо ведь легче написать простенький троянчик, и подсунуть его наивному чайнику, сидящему под «окошками», верно?

3. Меньше тормозов и различных непонятных науке глюков, присущих «окнам». Этот факт я нормально объяснить пока не в состоянии, но мне кажется, что дело тут в кардинально другом подходе к устройству файловой системы и методам взаимодействия с пользователем. Также роль играет и второй пункт — ведь без антивируса любая ОС будет работать быстрее, верно?

4. «Сделана программистами для программистов». Не помню, чьи слова, но смысл понятен. Для меня, как для программиста, это несомненное преимущество. Все эти консоли, встроенные компиляторы, shell-ы и bash-ы, возможность писать свои собственные скрипты, гибкое устройство выполнения любых команд по расписанию, возможность создания сложных макросов — всё для меня это является несомненным преимуществом.

5. Меньшая потребность в ресурсах. Я не беру в расчёт такие «окноподобные» системы, вроде Ubuntu и иже с ними — в них всё не так просто. А вот во всяких Gentoo, Skackware и подобных это достоинство проявляет себя замечательно. 

6. Относительно простая установка. Здесь, в принципе, говорить нечего. Естественно, установка любого дистрибутива Линукс сложнее, чем установка любой версии Windows, но совсем ненамного. Единственная сложность, как по мне, для любого новичка представляет необходимость ручного создания точек монтирования — хотя, если винт чистый, и на нём будет стоять только одна ОС — то можно вообще ничего не делать, Линукс всё сделает за Вас.

7. Отличная поддержка драйверов любых видов устройств. Тоже очень важное преимущество. Воткнул девайс — пользуйся. Всё просто. Это касается и USB-устройств, и интернета, и различных модемов, и интернета, и другой периферии… Исключения составляют принтеры, о чём будет написано чуть ниже.

8. Замечательный саппорт. Это достоинство я понял, когда начал сталкиваться с проблемами и вопросами, которые уже не мог решить самостоятельно или методом научного тыка (кстати, этот метод совершенно противопоказан в Линуксе, особенно новичкам. Хотя, неновички этим методом пользоваться не будут). Ведь Линукс — это результат труда десятков тысяч замечательных программистов, разработчиков, менеджеров, дизайнеров и тестировщиков по всему миру. Из этого следует, что в мире давно образовалось громадное сообщество, так сказать, коллективный разум, за помощью которого вы сможете прийти в любое время. Абсолютно бесплатно, между прочим.

С достоинствами всё. Теперь кратко пробежимся по недостаткам.

1. Сложность в освоении. Да, Линукс действительно тяжелее осваивать, что не говори. В этом её кардинальное отличие от «окон». Все эти консоли, правки конфигурационных файлов, маны, команды ну никак не способствуют продвижению Линукс в мире десктопов.

2. Необходимость работы с консолью. Этот недостаток выплывает из первого. Нужно будет частенько заходить в консоль. Ну, или в Терминал, кому как больше нравится. Конечно же, многие мне могут возразить, что уже, в новейших дистрибутивах надобность в консоли отпадает, и можно работать исключительно с графическим интерфейсом… На что я вам скажу, что вы не совсем правы. Работать-то исключительно с графическим интерфейсом можно, но когда пределы вашей работы за компьютером выйдут за определённые границы — посиделки в сети, общения в аьсках/скайпах, редактировании документиков, прослушивание музыки и просмотр фильмов — вот тогда в консоль залазить время от времени придётся, уж поверьте.

3. Много лишних «телодвижений». Этот недостаток связан с предыдущим, точнее, является его продолжением. Что я хочу сказать — дело в том, что на тривиальные с первого взгляда вещи в Линуксе с непривычки и при отсутствие практики приходится тратить много времени и мозговых ресурсов — что не есть хорошо.

4. Сложность в настройке принтеров. Да, в Линуксе хорошо настраивается всё, кроме принтеров. Хотя, сейчас эта проблема уже практически решена, и сценарий подключения принтера становится похожий на стандартный сценарий подключения любого устройства — «Воткнул? Работай!». Но есть ещё немало моделей принтеров, подключить которые удастся только нетривиальным и немного извращённым способом.

5. Права доступа. Мелкий недостаток, но он есть. Вам придётся с этим сталкиваться. С этими гадкими правами доступа. Но это плата за безопасность.

6. Отсутствие игр. Ммм, вот мы и подошли к самому «смачному» недостатку Линукса — отсутствие нормальных игрушек. Точнее, игры под Линукс есть, но лучше бы Вам не видеть этих игр… Ну, за исключением, быть может, пары-тройки нормальных игрулек. Но этот недостаток можно оправдать — Линукс создавался не для игр. И не для геймеров. Линукс создавался для работы, «программистами для программистов». А если Вы — геймер, или просто захотели скоротать пару часиков за качественной игрушкой — прямая дорога Вам в Windows.

7. Сильное отличие от Винды. Как я уже понял, это тоже является недостатком. Ведь сейчас всё чаще на Линукс переходят с Винды (я, кстати, не оказался исключением). Чистых, так сказать, линуксовидов сейчас очень мало, и они давно уже наверное занесены в Красную Книгу. А вот людям, которые с уютных окошек решили перейти в суровый Линукс, с его конфигами, консолью и правами доступа — будет очень непривычен стандартный Линуксовский интерфейс.

MySQL Cluster (NDB) — что это на самом деле?

Посмотрел недавно видео с HighLoad++, в частности доклад Григория Рубцова «Архитектура MySQL Cluster»

Краткие тезисы:
— Таблицы хранятся по нодам построчно (по ключу auto_increment).
— Данные дублируются на нескольких нодах одновременно
— Индексы тоже хранятся на нодах в виде таблиц со всем вытекающими: распределение между нодами построчно.

Что вытекает из этого? Что бы выполнить полноценный запрос sql с JOIN или несколькими условиями будут выполнены следующие действия:
— по ключу будет найдена нода, хранящая доп. условие;
— на данной ноде будет найдена необходимая запись.

И это для каждого условия, т.к. разные индексы одной записи судя по алгоритму распределения, описанному в докладе, могут оказаться на разных нодах.

Т.е. при одном дополнительном условии (к поиску по автоинкрементному ключу) будет выполнено вместо одного запроса три. При двух дополнительных условиях — пять запросов и т.д. Что косвенно подтверждается народом на форумах: производительность кластера из 4-х нод примерно соответствует одному классическому серверу MySQL.

Что ж это за решение, воскликните вы?!

Но давайте посмотрим с другой стороны. Будем, как говориться, смотреть на плюсы, а не минусы.

MySQL Cluster умеет хорошо делать:
— выборку по первичному ключу;
— резервирование (размазывание с избыточностью данных по нодам);
— отказоустойчивость (менеджер отслеживает состояния нод и реаигрует тем или иным образом).

Но разве это не сервер NoSQL, умеющий балансировку, избыточность и отказоустойчивость «из коробки»?

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

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

Получается MySQL кластер не так уж плох, если его использовать под нужным углом, главное вовремя осознать его NoSQL-сущность?

Парсинг JNG изображений

Вы наверно помните, что Mozilla убрала поддержку MNG и JNG из Firefox еще в 2003 г. Чтобы увидеть их (только через тег embed) нужен плагин. Из-за того, что поддержки JNG нигде нету, нельзя встретить JPEG с альфа-каналом. А ведь как было бы здорово…

Но я расскажу как восстановить JNG изображения на своей странице.



Начнем


Перед началом нам нужны такие функции, как загрузка бинарного кода, crc32 и желательно deferred. Все эти немаловажные функции можно взять с apng-canvas. Но я их несколько улучшил, убрал все лишнее, добавил несколько функций, например CReader. Заранее приготовил все необходимые инструменты.

Сигнатура


Сигнатура JNG несколько отличается от сигнатуры PNG двумя первыми байтами. Сигнатура — это важная часть JNG, именно от него зависит, парсить JNG или нет.

Чанки


JNG, как и PNG, устроен из чанков, но отличается тем, что хранит JPEG изображение, и альфа-канал в виде PNG данных или в том же JPEG.

JHDR

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

JDAT

Нам достаточно собрать все части из JDAT и мы сможем получить JPEG изображение.

IDAT

Это чанк альфа-канала, но он нам доставляет больше проблем. Вы знаете, что PNG состоит как минимум из IHDR, IDAT и IEND. Причем IHDR мы должны сами построить, необходимые байты придется брать из JHDR. Цветовой тип всегда будет равняться нулю у JNG альфа-канала.

JDAA

Этот чанк встречается крайне редко, но с ним нужно поступать также как с JDAT, но определять надо как альфа-канал.

IEND

Не нужно ничего объяснять, это конечный чанк у JNG.

Я ничего не понимаю, а можно скрипт?


Перейдите на страницу jnglike.site40.net/ и там вы увидите ссылку на скачивание скрипта.