о компах

Мелкие и мягкие

Прошел Microsoft Imagine Cup, который я по тупости пропустил, за что очень на себя злился. Сейчас в руки попал проспект с проектами финалистов. Прочитав, я перестал жалеть о такой потере. Выкладываю сканы проспекта под катом, имхо, стоит обратить внимание на два последних проекта. Целиком, от описания до анкет. А так — no comments.
Кстати, как вы думаете, кто победил?
Образ
(Кликабельно, 583kB)

glibc 2.10

Хорошо иметь разработчиков из RedHat во френдах в ЖЖ. Я прочитал про новшества в сабже раньше, чем появилась новость на LOR.

HP Pavilion (help wanted)

У друга и сокамерника сломался ноут HP Pavilion dv9940er. Симптомы похожи на типичные для термического повреждения мостов/видях, да и в ноуте стоит nVidia 8xxx: после нажатия на кнопку включения и продувки вентиляторов ничего не происходит, хард не мигает, экран не включается.

В связи с этим несколько вопросов. Ноут с пиратской вендой в HP'ном сервис-центре починят? И вообще, пошел бы ты, мой дорогой читатель, в СЦ HP? Ноут нужен для ботанья, поэтому если его там на пару месяцев заберут — не дело. И сколько может стоить ремонт не в СЦ?

Akinator

http://en.akinator.com/ — пытается угадать загаданную сущность. Интересен алгоритм. Джеймса Мейнарда Кинана оно отгадало со второй попытки, а вот Пита Лоефлера — нет.

Немного плохого

В адрес Qt 4.5. Собственно, в этом релизе программа стала регулярно падать где-то в недрах QtNetwork при работе с SSL, где-то в недрах QtCore при работе с QSortFilterProxyModel (что раздражает, потому что основная вкладка проги построена на куче вложенных QSortFilterProxyModel). Надеюсь, к 4.5.1 починят. Да и ваще, нефиг было софт из experimental ставить )

Превьюшечки же!

Теперь личкрафт показывает предпросмотр веб-страницы шириной 200 пикселей и высотой как получится (надо бы обрезать, кстати) при наведении мышки на закладку в табах. Кстати, это помогло также найти баг в куте, который заставил передвинуть те три контрола из левого верхнего угла в правый верхний.
Образ
(Кликабельно, 214kB)

Над этой хренью я парился последние 3 часа. А все потому, что кутешный rich text engine не умеет ури-схему data: в src тега img. Пришлось юзать Qxt. А когда увидел, как оно выглядит — пробило на ржач.

Также, на комменты к предыдущему посту отвечу завтра. Сегодня задолбан и хочу спать.

Блджад же!

Читаю сорсы Aurora, чиста поржать. Вызывает желание взять и уе^W наказать за отсутствие каких-бы то ни было смартпоинтеров. И вообще не особо безопасный код.

Также, уважаемые фанаты D/lo/еще-какого-нибудь-концептуального-но-не-особо-распространенного-языка, несущие его в массы, а не ставящие чиста поржать и реализовать что-то, что легче сделать шелл-скриптом: блио, промышленная разработка ведется на плюсах. Джаве. Шарпе. Похапе еще, если речь о веб-разработке. Могу напрячься, помечтать и предположить хаскель. Но не D/Io/еще-какой-нибудь-мне-лень-перепечатывать. Ни в каком виде. </thread>

Также, завтра еду стричься. Коротко. Наверное.

3 года

А между делом, где-то между 7 и 8 марта празднуется ДР LeechCraft'а. 3 года назад был первый коммит в SVN. А позавчера я допилил OpenSearch, наконец. Скоро можно релизить 0.3.0, хехе.

В общем, три года, а с проектом все интереснее и интереснее заниматься.

Sauerbraten

Образ
(Кликабельно, 845kB)

Двое сокамерников затянулись и попросили мой LiveUSB с линухом и сабжем, дабы погамать. Вот как надо переводить людей на линугзы!

Логика же!

Образ
(Кликабельно, 139kB)

Что делает ca:lyrics (chevelle - blank earth OR tool - bottom) OR ca:d OR ca:h t:w cs:off *.pdf? Это который на скриншоте. Да, кстати, он эквивалентен более длинному category:lyrics (chevelle - blank earth OR tool - bottom) OR category:downloads OR category:history type:wildcard casesensitivity:off *.pdf, если раскрыть все сокращения. Он выполняет четыре элементарных подзапроса — находит тексты соответствующих песен, показывает список закачек и выполняет поиск по истории с маской *.pdf, и объединяет результаты.

Как это работает: сначала функция парсинга запросов упрощает запрос — удаляет все лишние пробелы и парные скобки по краям, находит все OR'ы, разрезает запрос пополам вместо OR'а и рекурсивно вызывает сама себя. Если OR'ов нет — аналогично для AND'а. Как раз получается, что приоритет AND'а выше приоритета OR'а, что логично, потому что:

  • Курс булевой алгебры.
  • AND сужает область поиска, поэтому лучше вызывать сначала его.
  • Это логично.

Если и AND'ов нет, но скобки остались, то преобразует выражение типа expr1 (expr2 OP expr3) в expr1 expr2 OR expr1 expr3 и опять же вызывается уже для него. Если осталось банальное выражение expr — строит на его основе элементарный подзапрос.

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

Еще одно преимущество графов — не нужно раскрывать скобки вида expr1 OP1 (expr2 OP2 expr3), выражение под скобками естественным образом становится дочерним для OP1.

После написания кучи поисковых плагинов можно будет развернуться на полную!

Fuck Konsole!

urxvtc -ss -j -fade 25 -tr -sh 15 -fg gray -rv -fn "xft:terminus:antialias=false:pixelsize=12"

Обязательный пост

И у меня говномыло не грузится.

Хей-хей-хей!

Ну вот, стандалон снова up and running! Когда пришло время продлять домен, я внезапно понял, что напрямую это сделать не получится, ибо он был на реселлерском аккаунте majordomo, у которого я хостился раньше, и прямого доступа к продлению не было. Написал товарищам из majordomo, они попросили 1200 рублей, хотя на деле это стоит 450-500 рублей ($ 13.49). В итоге устроил трансфер домена на свой аккаунт на godaddy, так что с мажордомами теперь меня вообще ничего не связывает.

А по бложеку скучал, да. Графоман хренов.

О препроцессоре

Первый раз за последние N лет заюзал препроцессор для чего-то, кроме include guard'а. А именно, потому что ленивый.

  1. namespace
  2. {
  3. void ShowHelper (QWidget *w, QFormLayout *lay, bool show)
  4. {
  5. w->setVisible (show);
  6. lay->labelForField (w)->setVisible (show);
  7. }
  8. };
  9.  
  10. #define SH(a,b) ShowHelper(Ui_.Label##a, \
  11. layout, \
  12. XmlSettingsManager::Instance ()->property ("Active##b##").toBool ())

И далее код, отвечающий за сокрытие некоторых полей в панели информации о торрент-файле:
  1. QFormLayout *layout = qobject_cast<QFormLayout*> (TabWidget_->layout ());
  2.  
  3. SH (OverheadDownloadRate_, OverheadSpeeds);
  4. SH (OverheadUploadRate_, OverheadSpeeds);
  5. SH (TrackerDownloadRate_, TrackerSpeeds);
  6. ...

Также, этот код демонстрирует, что GeSHI иногда сосет.

Олсо

Хочется отметить невыносимое удолбанство — ставить в background-repeat фотографию.