And not a moment too soon…

April 15, 2009

Over a year ago, I had a pretty interesting conversation with Richard Stallman, the founder of the Free Software Foundation. In this conversation, I asked him among other things about applicability of free software terms to web applications; while he initially resisted the idea, I managed to convince him that it was an issue of GPL being unsuitable for web applications as it was. And over a year since then he made a public statement (also reported on Slashdot in a complete agreement with my proposition… except that he never gives me the credit for bringing the problem to his attention and logically proving his previous attitude wrong. My inquiries on the subject were left without a reply.

So long, and thanks for all the fish, Richard! It’s disgusting to see one of the greatest programmers of our time to become just another politician: incompetent enough so he cannot even use a browser, shady enough so he plagiarizes ideas and doesn’t even drop a word about where he got them. Oh, and read the conversation itself if you have the time: you will surely find many interesting statements made by RMS that would lead many companies withdraw any financial support of FSF should they learn about them…


С днем космонавтики!

April 12, 2009

Всех космонавтов, операторов ЦУПа, сотрудников космодромов, ракетчиков, инженеров, программистов, и всех-всех-всех

С ПРАЗДНИКОМ!


Construction complete

April 3, 2009

After quite a long bit of silence, we’re back! Among the interesting stuff that’s been happening lately, me and Wera have built a plywood computer chassis. The reason? Industrial ones that I could buy were either too large, or didn’t allow to access components easily. Some had other drawbacks, like only fitting MicroATX motherboards (I don’t have a spare one right now) or being unsuitable for lugging around. So here is the solution:

 

Front view

Front view

Ready to go!

Ready to go!

See the internals

See the internals

What did we use?

  • Three evenings’ work to cut the plywood parts, paint them in green and stick some foil on the inner side.
  • A metal shampoo shelf for the air intake vent
  • An egg-cutter knife for the air outtake vent above the CPU
  • An automobile doortop handle
  • Two upright bolts so the case doesn’t open up now and then.

What did we get? A case that’s small, easy to carry, easy to connect to peripherial devices, easy to open, plus a huge doze of fun. Next time I build a PC from old parts, it will be an iMac-like thing styled as an old Soviet TV set :-) Stay tuned.


Finding cursor position in a contenteditable div

January 6, 2009

Several days ago (last year, actually) I started researching the problem of implementing a browser-based rich text editor. Among other questions that need to be answered there is the following one: if we use a div element as the text editor or a text display widget (e.g. when capturing user input with a hidden textarea), how shall we track the current caret position?

As usual, there are two solutions: for Internet Explorer and everything else :-) Both involve installing keyup and click event handlers:

<div id="test" contenteditable="true" onclick="getCursorPos();" onkeyup="getCursorPos();">Lots of text for testing</div>

As a rule, cursor position and the current selection are tightly wired together: when nothing is selected, the current selection begins and ends at the cursor position. So, we retrieve the selection range (in the code below, we assume that there is only one selection range in the window. I leave proper handling of the situation where multiple selection ranges exist as an exercise for the reader).
Now, the actual findNode function depends on the method you build the text editor and on your algorithmic skills. When you use a single long text node which includes all the text in the editor, it will be different from the case when every character is a separate text node. Besides, you are welcome to use optimized search algorithms if you are going to work with large documents. The important part here is that the anchorNode property references the first character in the selection, and you will only need to find its index among the other characters [1]. An example findNode() function is given below.
The cursor position and the selection display some dexterity in their mutual dependency. The quirk is that when you click on a character, the cursor is sometimes positioned by different math than the selection’s anchor. For instance, the cursor is positioned before the character if you click on its left 50% and after the character if you click on its right 50%, while if it is included in the selection or not depends on its geometry or the percentages are merely different. So, in order to reflect this, we add the selection object’s anchorOffset (actually, the selection length in characters) [2] to the value returned by the findNode function.
To make things work for Internet Explorer, we have to rely on a proprietary undocumented possibility. It appears that the second Unicode character in the bookmark of the selection range contains the value we need plus 11. Currently, I don’t know the meaning of this number, and whether its exact value changes depending on circumstances and can be calculated somehow.

function getCursorPos() {
var cursorPos;
if (window.getSelection) {
var selObj = window.getSelection();
var selRange = selObj.getRangeAt(0);
cursorPos =  findNode(selObj.anchorNode.parentNode.childNodes, selObj.anchorNode
) + selObj.anchorOffset;
/* FIXME the following works wrong in Opera when the document is longer than 32767 chars */
alert(cursorPos);
}
else if (document.selection) {
var range = document.selection.createRange();
var bookmark = range.getBookmark();
/* FIXME the following works wrong when the document is longer than 65535 chars */
cursorPos = bookmark.charCodeAt(2) - 11; /* Undocumented function [3] */
alert(cursorPos);
}
}

function findNode(list, node) {
for (var i = 0; i < list.length; i++) {
if (list[i] == node) {
return i;
}
}
return -1;
}

Well, that’s all. Solution tested in Firefox 3, Opera 9, Google Chrome, Safari 3.1 and IE7.


Мечта

November 6, 2008

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

Давным-давно жил один маленький мальчик, который очень любил читать книги. Читал он преимущественно не художественные книги, а научно-популярную литературу, энциклопедии, задачники по физике развлекательной направленности и т.п. Поскольку мальчик был маленький, то и вел он себя соответственно: рисовал самолеты, космические корабли и глубоководные батискафы, обсерватории, угольные шахты, хлебоуборочные комбайны и атомные ледоколы. Все эти сюжеты имели одну общую отличительную черту: на них непременно была начертана красная звездочка, серпик с молотом, или очень важное слово из четырех заглавных букв. Он не понимал – почему, но знал, что так надо. Что по-другому – не бывает. Что именно это важное слово, и никакое другое, будет обязательно написано на гермошлеме космонавта, который первым пройдется по Марсу. Что именно красная звездочка, и никакая другая, будет на груди у ребят, которых поведут на экскурсию на новый научно-исследовательский корабль. Что именно знамя с серпом и молотом, и никакое другое, будет реять над зданием, которое станут когда-нибудь показывать в Новый Год по телевизору во всем мире. И поскольку мальчик был действительно маленький, он не понимал, когда взрослые ему говорили, что все это неправда. Что этого всего никогда не будет. Что никогда не исполнится его мечта ходить на работу в самое (ведь правда самое?!) важное место на свете – АН СССР.

Мальчик вырос, но мечта не умерла. Когда-нибудь она сбудется. И все, что мальчик рисовал, пока был маленьким, окажется правдой. С праздником!


Антошка, Антошка…

October 17, 2008

Позавчера вечером решили мы с Верой пообедать. Недалеко от нашего корпуса расположен батальон всевозможных киосков продовольственного назначения: хот-доги, слойки, шаурма, мороженое – в общем, фаст-фуд на любой вкус. Среди прочих ларьков затаилась и “Крошка-Картошка”.

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

Именно в ней и было решено отовариться с означенной целью. Были приобретены две порции картошки с салатами, плюс бутылочка кваса. Непосредственно по возвращении в лабораторию и вскрытии упаковки было установлено, что салаты, входящие в состав блюда, съедобными не являются т.к. по всей видимости просрочены и источают неприятное амбре. Дальнейших вариантов действий рассматривалось три: звонок в санэпиднадзор, донос лично тов.Онищенко, и попытка вернуть некондиционный товар с возвратом финансовых средств. По стечению обстоятельств был выбран именно третий вариант.

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

Итог

  • Факт продажи испорченных овощей: -5 баллов кармы (далее БК)
  • Факт возврата денег после пятиминутного разговора (4:27, если быть точным): +15 БК

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

Будьте зорки и бдительны!


Mission accomplished

October 10, 2008

Вот, собственно, и всё. После того, как мастер сказал, что телефон лучше поменять в месте покупки, а Веру по телефону грубо послали с идеей произвести обмен или возврат (”Если Вы в магазине купите тухлую колбасу, то это Ваши личные проблемы”), продавцу было указано на то, что:

  • По закону две недели на возврат в полной комплектации и сохранению товарного вида у меня есть
  • Этот же факт упомянут на сайте фирмы-продавца.
  • У них могут быть неприятности (равно как и у магазина, торгующего тухлой колбасой – санэпиднадзор с радостью ухватится за любой повод наглядно продемонстрировать свою полезность), если дело будет двигаться в том же направлении.

Продавец впал в раздумье, после чего с надеждой так спросил: “Ну Вы, наверное, уже пленочку с экрана содрали, правда?”. Пришлось его огорчить: все пленочки были на месте.

Посовещавшись и перезвонив мне, они сообщили, что если я подъеду на Горбушку, то телефон мне заменят.

Собственно замена заняла буквально пять минут: без проверки каких-либо документов типа кассового чека мужичок мне выдал принесенный в пупырчатом пакетике телефон, и принялся очень торопиться. Я проверил все, что мог – вроде работает, подвоха нет. Мой аппарат он тут же забрал и исчез (встреча происходила в кафе на Горбушке). Желаю удачи и дьявольского терпения его следующему владельцу!

Итог

Хотя телефон мне заменили (и на том спасибо), сделали это абсолютно по-левому, что не вызывает восторга. Продавец получает твердую двойку, причем в полугодии. Не верьте двум её звездочкам на Price.ru. Ремонтник идет туда же: нехорошо, когда мастера приходится искать с милицией, а он после этого еще и отфутболивает к продавцу.

В ролях

Фирма-продавец: Майкин.ру.

Сервис-центр: павильон №111 на Горбушке.

(Оба получают вечный бан и черный билет)

Объект спора: Nokia N82. Смартфон заслуживает по своим характеристикам твердой пятерки.


Enraging people

October 9, 2008

Сервис-центр – просто чудо. Сказали, что мастера сегодня нет и не будет, дали визитку с телефоном, который пока что “абонент не абонент”. Если не удастся за сегодня связаться и договориться с мастером, буду требовать возврата.

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


Irritating people

October 9, 2008

Продолжаем знакомиться с дефектами N82. Выяснилось, что корпус скрипит при нажатии на левую его часть. У меня вообще сложилось впечатление, что телефон хорошенько обо что-то приложили, прежде чем продать мне. Это объясняет и дребезжание динамика (где-то трещина есть), и люфт.

Плюс ко всему комплектация неполная: не хватает кабеля microUSB с выходом на телевизор. Хотя он мне нафиг не нужен, всё равно обидно. Сейчас поеду в сервис воевать.


Connecting people

October 6, 2008

Сегодня ко мне приехал замечательный аппарат: Nokia N82. За крайние несколько дней я составил твердое мнение, что если что-то и покупать, то его (хотя изначально планировал купить себе Sony Ericsson C902).

Плюсы

  • Камера. Судя и по обзорам на множестве сайтов (в т.ч. MobileReview), и по собственным ощущениям, аналогов ей сейчас нет (по крайней мере, в телефонах дешевле 20кр). 5Мп, неплохое шумоподавление, ксеноновая вспышка, хорошая математика. Поскольку в оптическом зуме я лично не нуждаюсь, необходимость в отдельном фотоаппарате моментально отсохла.
  • Музыка. По качеству звука из стереодинамиков находится на одном уровне с продвинутыми SE Walkman. Басы слышны намного лучше, чем в K790. Гарнитуру пока не проверял, но наличие стандартного 3.5мм разъема дает возможность купить отдельно понравившиеся уши.
  • Видео. Проигрывается. В ландшафтном режиме тоже не тормозит.
  • Вкусности. GPS (точнее, Assisted GPS, что улучшает его характеристики в помещении), акселерометр (включает упомянутый выше ландшафтный режим), диктофон и видеозапись без ограничения по длительности (и то, и другое дает прекрасный звук), WiFi b/g, Bluetooth и много чего ещё.
  • Поддержка открытых стандартов. В отличие от Sony Ericsson, забитого под завязку фирменными решениями, в Nokia любят стандартизованные решения – такие, как microUSB и microSDHC. В силу определенных обстоятельств, в моих глазах это большущий плюс.
  • Экран большой, симпатичный, и хорошо виден даже на ярком солнце. Картинка на солнце немного выцветает, но по сравнению с тем, чем я имел честь пользоваться ранее – небо и земля.
  • Клавиатура. Несмотря на то, что тонкие и высокие кнопки выглядят непривычно (для меня) и даже устрашающе, такая клавиатура оказалась на удивление удобной.
  • Цена. Стоит всё это великолепие 13.25кр, что предельно мало по сравнению со смартфонами аналогичных возможностей.

Минусы

  • Акселерометр нуждается в калибровке, иначе при угле π/8 резво перескакивает обратно в портретный режим.
  • Меню время от времени подтормаживает. Ровно настолько, чтобы успеть это заметить, но не настолько, чтобы это раздражало. Будем ждать оптимизации в последующих прошивках.

Эпопея с покупкой

Аппарат бывает двух окрасов – черного и серебристого. Также аппарат бывает двух национальностей – финской и китайской. По совету старших товарищей было решено заплатить на 2кр больше и заказать представителя финской фауны.

Заказ был оформлен в 10 часов утра. В 14 приехал курьер с телефоном и спросил,  где поблизости есть какое-нибудь кафе, где можно посидеть; там он распотрошил коробку, показал комплектность, пожаловался на отсутствие сдачи (она потом все-таки нашлась) и остался пообедать.

Буквально через пару минут после покупки в процессе первого же звонка было замечено, что динамик у него дребезжит. В течение еще пары минут было установлено, что это дефект конкретной особи (есть знакомые владельцы точно такого же аппарата, у которых с динамиками все в порядке). Сразу позвонил в фирму-продавец; там мне сказали, что менеджер по возвратам будет в районе пяти часов, и что они мне перезвонят. Ждем-с.

P.S. Название фирмы будет открыто широкой общественности только после того,как ситуация будет улажена тем или иным образом.

UPDATE 1

Менеджер по возвратам самостоятельно не перезвонил. Позвонил им я и выяснил, что нужно подъехать в сервис-центр на Горбушке, где будет установлено, является ли дефект заводским браком. Завтра я этого, по-видимому, сделать не смогу. Так что продолжение следует в среду.