Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

MySQL заказчик формата A4

Anna | 25.06.2014 | нет комментариев

Дозволено ли уместить исходники MySQL заказчика на 1 страничке формата A4? Оказывается, если 8 кеглем (в тезисе читаемо) и позже обфускации, то дозволено! А если типичный код без обфускации и 10 кеглем, то таки невозможно: нужно целых 6 страничек.

В ходе работы над каждым у меня здесь нечаянно получился крошечный, но работающий MySQL заказчик размером чуть больще 1000 строк. Стало увлекательно, насколько суперкомпактнее дозволено сделать. Потратил половину воскресенья, изолировал и минимизировал код. В итоге возник nanomysql, CLI заказчик для MySQLполныеисходники которого занимают чуть менее 380 строк, менее 1800 токенов и приблизительно 10500 байт, и при этом компилируются и работают под Linux, Windows, MacOS. Написано на C с безусловным минимумом STL.

Скриншоты, циферки и прочие подробности уикэнд-безрассудства по изготовлению наноклиента под катом.

Для начала обещанный мега-скриншот!

Z:worknanomysql>nanomysql.exe -u testme -p moo
connected to mysql 5.5.25a-log

nanomysql> use test
---
ok, 0 row(s)

nanomysql> select * from t
id, gid, body
---
2, 1, three abcx four
3, 1, five six seven abcx
4, 1, eight in abcx-nine
5, 1, one two three in abcm
6, 1, binlog ftw
100, 1, one two abcx
---
ok, 6 row(s)

nanomysql> quit
bye

Update: плюс tableshot обфусцированных исходников!!! Картинка кликабельна.

Заказчик может обрабатывать (отсылать либо принимать и разбирать) 7 видов сетевых пакетов: handshake, auth, query, ok, error, field, row. Дабы прицепиться к серверу, отсылать запросы и показывать итоги, огромнее в всеобщем-то и не нужно. Так что исходная версия, обособленная в 1 файл и собранная веерными cut-n-paste из различных мест исходников (см. «грабим по площадям, только бы собраться») сразу была маленькая и занимала ~1250 строк. Следственно цель веселия была поставлена в 500 строк.

Эта версия умела заходить на сервер с жестко прошитым логином и паролем и делать один грубой прошитый же тестовый запрос. Тупо выбросив вообще непотребный код (в основном выкидывались любые вовсе неиспользуемые способы прямо целиком), ну и дописав заодно небольшой консольный query loop, ее достаточно стремительно удалось довести до ~700 строк.

На этой отметке пришлось лезть теснее вовнутрь классов и способов. Здесь источников экономии места случилось три штуки:

  1. сливание совместно классов (а первоначально взамен класса MysqlDriver_t их было три штуки, NetInputBuffer_c NetOutputBuffer_c собственно MysqlDriver_t),
  2. занос способов вовнутрь декларации класса (экономим на копии сигнатуры и пустых строках),
  3. облегчение обобщенного кода внутри способов под наш определенный случай.

Ну и ясно, неизменно есть точечные зачистки отдельных строк. Этими нехитрыми мерами дошел до приблизительно ~500 строк.

Заодно в ходе спуска до отметки 500 добавил разбор опций командной строки и сделал итог чуть попрекрасней. Метаморфозы перемешивались с другими, по ликвидации кода, и в целом коммиты, добавляющий функционал, сокращали число строк. Делать огромнее функционала и при этом стирать код неизменно дюже отрадно! Еще в ходе этой части стало ясно, что в погоне за строчками знакомый кодстандарт придется слегка нарушать: всецело выкидывать assert()-ы, местами форматировать код «в столбик» взамен «елочки», а местами напротив, «в строчку» взамен «столбика» и в целом писать несколько вразнобой. Ключевым критерием было сберечь читаемость тех мест, которые в тезисе необходимо читать. (Некие волшебные трансформации в реализации SHA1, скажем, читать смысла нет и причем сразу не было.)

И здесь неожиданно появился еще один увлекательный вопрос: а дозволено ли впихнуть заказчик вообще на 1 страничку! Причем читаемым шрифтом, а не QR кодом, разумеется. С одной стороны, безусловно, 500 строк. Но это достаточно короткие строки, причем совместно с комментариями и пустыми строками. Плюс суммарно текста каждого ~12 килобайт, по порядку теснее сравнимо.

Источник: programmingmaster.ru
Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB