Долго выбирал блог между «Я безумный», «Странные вещи» и «Я пиарюсь»...
Началось всё с того, что мне подарили двоичные часы. Оказалось, что двоичная система не такая уж неудобная.
Под катом вы узнаете, что случилось с моим мозгом («Я безумный»), что я сделал («Странные вещи»), и как такое же заполучить себе («Я пиарюсь»).
Начнём с того, что я сделал двоичные часы на рабочий стол
Сперва это было сделано на Python/Tkinter, но потом, я переписал их Qt. Без наворотов. Должно собираться везде, я тестировал под UNIX и под Windows (MinGW) — собирается. Выглядит так (цвета можно настроить любые):
Есть меню с настройками немногочисленных аспектов внешнего вида:
Эти настройки можно сохранить.
Если хотите поменять размеры, то можно подредактировать файл zoclock.h. Если что-то не понравится — буду рад комментариям.
Сайт проекта zoclock.googlecode.com
Прямая ссылка на исходники zoclock-1.0.0.tar.gz.
upd: Новая версия — теперь с «always on top»! :-) Прямая ссылка на исходники zoclock-1.0.1.tar.gz (планирую ближайшее время учесть и другие пожелания).
Собирается всё двумя командами:
qmake make
Команды могут зависеть от вашей системы. На пример, если у вас Windows/MinGW, то вместо make надо использовать mingw32-make; если у вас FreeBSD, то вместо qmake пишем qmake-qt4 и так далее. Суть от этого не меняется.
А с мозгом моим случилось то, что я освоил быстрое понимание двоичной системы
Это оказалось совсем не сложно, достаточно запомнить...
Основное
Восемь маленьких чисел запомнить легко
000 - 0 001 - 1 010 - 2 011 - 3 100 - 4 101 - 5 (очень важное число) 110 - 6 (уже можно не запоминать, см. далее) 111 - 7 (есть несколько причин его запомнить)
Числа, которые бросаются в глаза
Это числа, состоящие из одних единиц
111 - 7 1111 - 15 (четверть часа) 11111 - 31
Веса разрядов
32 16 8 4 2 1
(Эти числа перекликаются с предыдущими, что облегчает запоминание :-))
Большую часть этой информации вы, наверняка, и так знали...
Устный счёт
… тогда вы можете моментально воспринять не слишком большие двоичные числа. Достаточно воспользоваться двумя правилами
Умножение на 2 равносильно сдвигу влево
и
Разбирать число лучше слева направо
Потому, что проще прибавлять к растущему числу меньшие слагаемые, чем наоборот.
Воспользуемся нашими знаниями
1010 — очевидно, что это 101 сдвинутое на один разряд 5*2, т.е. 10.
Чуть сложнее, что такое 10111? Можно было бы представить как 16+7 но это очень сложно складывать в уме. На много проще угадать тут последовательность 101 и заметить, что 10111=10100+11. А это уже 5*4+3 т.е. 23.
Ещё пример 11101. Это, очевидно 7*4+1 — 29.
11110 — 15*2 = 30.
101011 — 5*8+3 = 43.
И ещё — 111000. Это не 8+16+32 (сколько вам надо времени, чтобы вычислить это в уме?) а это 7*8 = 56!
Всё остальное — в том же духе :-)
Справедливости ради следует сказать, что
Я не первый, кто придумал писать такие часы. Их есть много (даже на googlecode полно), но я не смог найти такие, которые удовлетворяли бы меня. Во многих случаях эти программы просто не дописаны. Я же сделал так, чтобы самому нравилось...
Наиболее выдающимся наверно можно назвать вот этот проект. Мне он не подошёл потому, что он (1) не двоичный, а двоично-десятичный; (2) очень большое окно; (3) не работает один пункт меню (не доделан, по признанию автора) и… я не решился заюзать его исходный код потому, что он противоречит моим религиозным взглядам, и, как мне кажется, попирает лучшие идеи, заложенные в Qt. Как вы понимаете, все эти пункты являются чисто субъективными. Плюсы же, могут перевесить все недостатки. Это (1) проверенность временем, (2) софт, как я понимаю собирается и с Qt3 и Qt4, и есть реализация на Java. Возможно, вам этот проект понравится больше моего.
Но к чему это я?...
А! Да! Если кто-то возьмёт на себя труд посмотреть код, обнаружит какие-то его аспекты непотребными и не поленится высказать это мне в открытом споре или в привате — я буду бесконечно признателен!
Если кто-то будет использовать мой код, как пример использования Qt (а мне кажется, что это не плохой маленький примерчик), то я буду считать, что потратил на это дело полдня не зря!
Если у кого-то будут пожелания (будильник?) — принимаются!
Enjoy! :-)