Ненормальное программирование

индекс
287,20

Сам такого от себя не ожидал


Впрочем, один бы я такого и не сделал.

Это часы на рабочий стол для настоящих безумцев


На самом деле, они, конечно, поменьше (масштаб настраивается):

Так же есть режим подсказки:

Основные фичи:
  • Вместо цифр отображаются ''уроды''. Каждой цифре соответствует своя иконка.
  • Когда мышка пролетает над часами, появляется подсказка обычными цифрами.
  • Есть встроенный будильник.
  • Часы «прилипают» к краям экрана.
  • Часы очень просто кастомизировать.

История


Наверно хабр никогда не перестанет меня удивлять. Какое-то время назад я анонсировал на хабресвой маленький проектик zoclock. А буквально несколько дней назад мне написал pixilang (мы с ним не были раньше знакомы, от пользовался моим zoclock) с идеями, что можно «улучшить». Речь шла даже не об улучшении, а о совсем новом подходе (демо от pixilang).
Мне идея очень понравилась.
  • За один вечер был написан работающий прототип — предмет для обсуждения.
  • За второй вечер была дописана функциональность — плод обсуждений.
  • Ещё вечер — на оформление проекта на googlecode.
Всё: http://pixiclock.googlecode.com/.

На чём написано


Python + Tk.

Код содержит ряд нетривильностей, которые, возможно кому-то будет интересно посмотреть. Это приложение сразу же отказывается от услуг оконного менеджера и управляет собственным окном самостоятельно… Одним словом, кому что интересно — welcome.

Планы


Дизайн. pixilang предполагает доделать механизм скинов (и я согласен; только надо продумать технические детали, форматы...; если у хабралюдей есть мысли — welcome!). Пример скина:

Пример букв:

(сейчас цифры нарисованы мной, поэтому они те так брутальны)

Функциональность. У меня давно уже есть идея сделать меленький desktop-gadget, который бы слушал тихонько, какой-нибудь портик, и когда туда приходят какие-нибудь данные — показывает эти данные на экране. Тогда в cron можно засунуть простенькие скриптики, мониторящие сервера, проверяющие почту, или просто напоминающие, что пора на обед, а то в столовке всё сожрут. Думаю, сделать из этой штуки такой универсальный мегабудьник/напаминальник/мониторщик.

Непонятки. Хочется сделать опцию «поверх всех окон». Но оказалось, что на Tk это не очень ясно как сделать. Я уверен, что на хабре есть Tk-гуру. Отзовитесь! Спасибо.

Ну и конечно, принимаются любые предложения и пожелания.
+65
19 апреля 2010, 06:05
21

комментарии (47)

+20
steepler #
похоже на часы из фильма Хищник.
+7
andoriyu #
вот это хищник: yfrog.com/0yur2kj :D
+2
Antigluk #
ага, тоже подумал как только увидел.
+5
tFirma #
Вот ни капли не похожи. Разве что тем, что вместо арабских цифр используются другие символы.
+13
tFirma #
+2
dezconnect #
Клевая тема =) мне понравилось =) щупал Tk, но пользовательские гаджеты для себя решил писать таки на Qt красивее выходит =)
+1
proxor #
Tile значительно лучше выглядит, чем традиционный Tk. В принципе, последние версии Tk сами по себе выглядят нормально.
+9
anthony_613 #
Уж лучше инопланетяне, загадочные существа или подобное, но не уроды ;)
А так всё в порядке.)
0
Oligarh #
а мне они напомнили Space Invaders
0
JC_Piligrim #
А мне — pacman. :)
+1
kegf #
можно быстро написать на Lua, для awesome в частности.
+1
TUKA #
хотел бы такие на руку… в стиле «легкий стимпанк или киберпанк»
узнавать с них время было бы… правильным понтом)
+6
1amer #
Посмотрел ваш сайт, ФЕЕРИЧНО!
+2
pixilang #
спасибо
+2
Rodman #
надо будет выучить 10 уродцев… и лиж бы в новой версии они не апгрейдились
+2
pixilang #
можно легко подобрать под свой вкус)
+3
nmeless #
Мне кажется, любители 8-битной графики будут просто счастливы.)
+4
beeruser #
графика тут 1-битная =)
+4
s0b3r #
2 цвета — 1 бит, всё верно…
0
s0b3r #
Ваш К.О.
+25
Zubchick #
просто и забавно, но это АД:
        for c in l:
          for g in range(factor):
            if n:
                xbm.append(0)
                n = False
            if c == 'O':
                xbm[-1] |= m
            m *= 2
            if m == 256:
                m = 1
                n = True

че, куда, кого, зачем, что — ничего не понятно :D
+2
Setti #
порт braifuck на python?
0
Longedok #
c, l, g, n, m — офигенные имена переменных, ничего не скажешь. Очень некрасиво.
+1
michurin #
Ну прям заклевали :-) видно же, что c — char, l — line, m — mask, n — new_bype_flag :-) любой, кто знает Python, исходный формат и XBM (на что намекает название переменой xbm), легко поймёт, как сделано преобразование форматов.

Мне кажется, что если переменная используется на протяжении 5-10 строк, то её смысл можно понять и по одной букве. А вот вещи, используемые в масштабах приложения, ползущие из конфигов, скинов и прочего, можно назвать полностью (factor).
+1
psylostlife #
Очень понравилась задумка с последними цифрами, которые вроде как напоминают цифры, а вроде и не совсем. В конце-концов, неохота учить наизусть всех «НЛО» в лицо, чтобы узнавать время — все равно рука будет тянуться все время перепроверить, а это излишняя усложненность. Символы же с привязкой на привычное или логичное — самое главное, я считаю.
Молодцы, не забрасывайте идею! zoclock тоже в свое время порадовали.
+4
bazilxp #
А как насчет кастомизации, Уроды, Двоичный вид(типа 011:0000111, Чак норисы…

Идея часиков прикольная=)
+1
bagyr #
Приеду домой, попытаюсь написать плазмоид. Уродов, думаю, лучше сделать в векторе.
0
Riateche #
Фичреквест: хочу, чтобы прога умела слушать не только порт, но и файл (по аналогии с tail -f). Будет удобно для отладки с помощью логов.
0
michurin #
Мне кажется, что это уже частный случай. Можно же сделать
tail -f | nc localhost 7070
Кроме того, тут есть тонкий вопрос: когда обрабатывать и отображать сообщение. Пока мне кажется, что проще (для пользователя), если сообщение будет показываться, когда соединение закрывается. Тогда команда будет выглядеть как-то так
tail -f | (while read i; do echo "$i" | nc localhost 7070; done)
0
Riateche #
Вот видите, команда уже стала нетривиальной. Частный случай теперь достаточно сложен, чтобы его можно было реализовывать.

По поводу «когда соединение закрывается» я не очень понял. Сообщение должно показываться каждый раз, когда изменяется файл. Есть специальная утилита для отслеживания событий изменения файла.
+2
michurin #
Ну… тут есть над чем подумать )
Но мне кажется, во-первых, что в команде нет ничего нетривиального; а во-вторых, «Есть специальная утилита для отслеживания событий изменения файла», вы её знаете, я её знаю, все её знают, давайте ей и пользоваться :-) Зачем делать ещё одну утилиту? Смысл этой затеи для меня пока не очевиден.
0
BugEater #
Идея хороша. Освоить такие часы, на мой взгляд, можно достаточно быстро. Их бы запустить в производство…
0
Stepler #
для фантастических фильмой клёвая фича. какой-нить инопланетянин смотрит в свой монитор и там такое ))) как-то же надо разрабатывать интерфейсы для подобных кино.
+3
bigazzzz #
как раз в данном случае в корне не согласен =) инопланетяне с форматом часов, как и на Земле, правда с другими символами вместо цифр будут выглядеть по-идиотски.
p.s. сразу вспоминается, как в «Дне независимости» Уилл Смит прилетает на корабль-матку инопланетян, подключается со своего ноута (с помощью USB видимо ну или wifi) к центральному компу инопланетян (сервак конечно же) и загружает на него вирус (на а чего нет, то. Вся вселенная работает на Винде и вирусню пишет исключительно на c++)
+4
pietrovich #
— Каждой цифре соответствует своя иконка.
в данный момент глядя на подсказку по цифрам «1» этого не скажешь. первая и последние — две разные иконки. или скрины были сделаны в разное время? если так, то смените, плз, скрины на одно и то же время, станет понятнее :")
0
michurin #
Меганаблюдательность! Снимаю шляпу! :-)
Конечно, скриншоты сделаны в разное время.
+1
santeri #
Непонятки. Хочется сделать опцию «поверх всех окон». Но оказалось, что на Tk это не очень ясно как сделать. Я уверен, что на хабре есть Tk-гуру. Отзовитесь! Спасибо.

tcl: wm attributes. -toplevel 1
+1
santeri #
все напутал.

Tcl:
wm attributes. -topmost 1

а у Вас наверное,
o.wm_attributes("-topmost", 1)

0
michurin #
Спасибо. Копну в эту сторону, хотя у меня не заработало. Возможно виноват отсталый оконный менеджер :-)
0
santeri #
у меня заработало (windows)

Tk.__init__(o)
o.overrideredirect(True)
o.wm_attributes("-topmost", 1)
0
Mock #
На межгаллактическом бы, как в Футураме. Скин сделаете? :-)
0
ddsl #
Реквестирую комментарии в код :)
0
stoune #
Насчёт гаджете, Snarl и Growl for Windows.
0
phillennium #
Пожелание: если бы при наведении мышки обычные цифры отображались не вместо уродов, а под/над ними, то было бы куда проще запомнить, какой цифре какой урод соответствует.
0
FTM #
меня всегда радовали ваши «ненормальные» программулины.
0
RealFLYNN #
Созерцание часов вызвало непреодолимое желание поиграть в invaders
+1
smok #

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