18.06.2010Машинка!
Вот, чем я занимаюсь после работы:
12.06.2010Оказалось, не казалось
Пока вы спали (и я тоже спал) мне явился правильный ответ: это float в формате little endian (младшим байтом вперёд). Вот код для андроида.
int tmp = Float.floatToRawIntBits(new Float(number));
byte[] msg = {(byte)tmp, (byte)(tmp >> 8), (byte)(tmp >> 16), (byte)(tmp >> 24)};
Непонятно, зачем они так сделали, ведь работает NXT с целыми числами. Даже если и с точкой, то точность оборудования не та.
11.06.2010Профессиональное
Я тут вечерами не могу лечь спать, потому что управляю своим Lego Mindstorms роботом с телефона на Android (моего любимого ненаглядного HTC Desire то бишь) по bluetooth. Я уже написал базовое взаимодействие, и бодро передаю сообщения. Возник лишь один нюанс с передачей целых чисел. Вместо того чтобы совать их в трубу младшим байтом вперёд, как об этом говорят все интернеты, у меня они выглядят не так.
Это был целый детектив. Я слал ему little endian, но он отказывался. Сначала совсем. Потом везде видел нули Тогда я начал его пытать, и заставлял его посылать сообщения из целых чисел.
Если записать это в двоичной форме, то примерно понятно, что он имеет в виду. Но возможно есть матчасть, которую можно почитать, чтобы лучше это понять. Что это за представление, как его просто изобразить, скажем, на Java? Итак, имеем четыре байта:
... симметрично
-4 => 0x00 0x00 0x80 0xC0
-3 => 0x00 0x00 0x40 0xC0
-2 => 0x00 0x00 0x00 0xC0
-1 => 0x00 0x00 0x80 0xBF
0 => 0x00 0x00 0x00 0x00
1 => 0x00 0x00 0x80 0x3F
2 => 0x00 0x00 0x00 0x40
3 => 0x00 0x00 0x40 0x40
4 => 0x00 0x00 0x80 0x40
5 => 0x00 0x00 0xA0 0x40
6 => 0x00 0x00 0xC0 0x40
7 => 0x00 0x00 0xE0 0x40
8 => 0x00 0x00 0x00 0x41
9 => 0x00 0x00 0x10 0x41
10 => 0x00 0x00 0x20 0x41
...
15 => 0x00 0x00 0x70 0x41
16 => 0x00 0x00 0x80 0x41
17 => 0x00 0x00 0x88 0x41
...
555 => 0x00 0xC0 0x0A 0x44
...
2147483648 => 0x00 0x00 0x00 0x4F
По спецификации и из результата видно, что он старательно делает вид, что полностью использует все четыре байта, но тогда не было бы чисел, которые он бы не смог интерпретировать. В районе максимумов заметно, что очень большие числа он не различает между собой, если они отличаются на несколько единиц. Это какая-то экспоненциальная форма? Что это?
09.06.2010Солянка
Сегодня как раз слушал всякие подкасты, подтверждающие мою правоту. Люблю подтверждать свою правоту, что поделать :) Вкратце, чтобы никого никуда не отсылать, там говорилось про то, что ежели ты динамично растущий программист, то полезно фиксировать свои открытия об окружающих. Типа вести блог или что-то подобное. Я реально им пользуюсь столько же, сколько всякой прочей нужной документацией.
Решил со следующего раза возобновить ссылки отсюда в программерский блог по мере появления там статей. К тому же теперь там есть картинки. Для неискушенного читателя.
А ещё есть такие фишки, про которые раньше слышал, но не приходилось сталкиваться. Типа, да, прикольно придумано, но мне не надо. А потом эта фишка в режиме экстренного изучения спасает кучу рабочих часов. Выгода налицо. Про такое, кстати, обычно в блог и пишу. Во-первых, чтобы запомнить, а во вторых — вот это прекрасное состояние, когда ты что-то новое освоил и в полной мере почувствовал его продуктивность, и подмывает всем рассказать, конечно же.
Андроид, кстати, и в использовании, и в разработке оказался вполне приятным.
Такие дела.
28.05.2010Dog's dream
Плавно в течение суток мой бложек перетёк на новый хостинговый план. Со скоростью распространения информации по DNS. Кто-то, возможно, в дальних уголках интернет-пространства видит всё ещё старую копию. Хотя, на глаз не отличишь :)
♯♯♯
А ещё мне не хотелось поднимать свой почтовый сервер, и я узнал, что существует Яндекс почта для домена. Это гениально!
♯♯♯
Сегодня в комментариях (а мне нечасто в блоге пишут комментарии) некто Дмитрий подкинул мне прекрасную идею про «счастливый коммит». Это коммит, у хэша которого сумма левых 20-ти шестнадцатиричных цифр равна сумме правых 20-ти. Конечно же я тоже написал скрипт (конечно же на руби), который проверяет каждый коммит. И коммичу теперь почаще:
#!/usr/bin/env ruby
if `git log -1 --format=format:%H`.chars.each_slice(20).map{ |part| part.inject(0){ |sum, ch| sum + ch.hex } }.uniq.count == 1
puts '**************************************'
puts '* Congratulations! Lucky commit! *'
puts '**************************************'
end
♯♯♯
Наконец-то добрался и посмотрел последнюю серию:
via kuteev
Обтекаемо закончили :) Не то, что старик Линч.
23.05.2010Дайджест
Последнее время много работы. Я люблю, когда много работы. Как это ни странно, заодно успеваешь больше сделать разных дел не связанных с работой. Просто за счёт возросшего ритма.
Мой хостинг-провайдер подогнал новый тарифный план, из которого следует, что умея настраивать сервер, не используя Plesk, можно сэкономить от $20 и более ежемесячно. Я так вообще недолюбливаю этот Plesk и практически не пользуюсь. Попробую с месяцок и перейду насовсем. Вообще в выходные вечерком я люблю понастраивать сервера пару часиков для удовольствия. Особенно, освоив vi.
Меж тем Яндекс обнародовал панорамы улиц другого поставщика. Что, конечно же, радует.
27.04.2010Новьё
Новый постик в бложек лежит в черновиках. Не публикую ничего в начале и в конце недели. От Яндекса научился, хоть моя аудитория и поменьше :) На прошлой неделе не успел ничего написать из-за РИФа. Был там один день, но как докладчик, поэтому выпала первая половина недели, а не вторая.
Очень понравилась в последнее время концепция «достижений» (achievments) в играх и всём подряд. Например, Mass Effect 2 я проходил три раза, чтобы не только спасти всех компаньонов в самоубийственной миссии (no one left behind), но и сохранить их лояльность. А Portal начал проходить ещё раз, чтобы получить достижение «transmission received». Так же отлично это работает и в социальных сервисах. Например, в foursquare уже довольно подробно размечена вся Москва, потому что за внесение и посещение мест на карте дают очки, звания и знаки отличия. Например, сегодня я стал мэром «Улицы ОГИ». Павел «Ксан» Яковлев заявил, что социальным сетям типа Фейсбука или МоегоКруга следует создать для владельцев профилей Компаний систему достижений для их работников. Тогда работники компаний будут вполне себе мотивированно добиваться этих достижений, чтобы их было видно в профиле.
Ещё, с тех пор, как я приобрёл новый телефон мечты (HTC Desire), всё чаще мне попадаются упоминания и примеры Augmented Reality. Например, Google Goggles — пока мне не удалось получить от них много удививших меня результатов. Но он хорошо определяет продукты по баркодам. Если сфотографировать логотип Яндекс, то будут ссылки на википедию про Интернет и Историю Интернета, А если логотип Гугла, то ссылки будут на Гугл :). Однако второй пример поразил воображение не смотря на простоту. Карта звёздного неба от Гугла. Смотришь на небо через телефон, и все созвездия, звёзды и планеты подписаны. Это зашибись просто! Всего то нужно определить местоположение (по GPS или триангуляцией) и время с календарём. Потом акселерометр сообщает, как повернуть сферу.
А что нового у вас?
19.04.201010 000
Когда я сделал себе и Ире сайты, то решил, что у меня есть вполне себе универсальное нечто, что можно легко подстроить под определённый круг нужд. Если бы не обещанное друзьям портфолио, то я бы так и не узнал, насколько мысль о гибсоти и лёгкости настройки далека от истины :) Сегодня выставил его для тестирования — бОльшая часть работы сделана, ура!
В связи с этим часто вспоминаю правило 10 000 часов, о котором узнал из книжки Outliers (ссылка на русское издание, но читаю на английском). Её автор Malcolm Gladwell ссылается на невролога Daniel Levitin, который описал свои исследования ещё в 2006 году в книге This is your brain on music.
Исследования последнего показали, что чтобы стать экспертом мирового уровня в любом деле, необходимо 10 000 часов практики. Нет ни одного признанного мастера мирового уровня, который бы практиковался меньше, чем его конкуренты, при этом их опережая. [Это утверждение работает в обе стороны.] Первый же приводит известные примеры типа Билла Гейтса, «Битлз» и Моцарта, подтверждающих своей биографией это правило. [Кроме всех прочих тонкостей этих конкретных биографий.]
А вспоминаю я это правило в том ключе, что у меня присутствует необоснованное ожидание от себя, что всё получится сразу и круто. Поэтому когда не получается, то я здорово удивляюсь. Потом, конечно, вспоминаю, что практика прежде всего. Да. :)
З.Ы. На мероприятии Яндекса на РИФе мы с Артёмом будем рассказывать о наших технологиях съёмки и обработки панорам улиц. Корпус №6, зал №6, 21 апреля в 14:00.
01.04.2010Соха
Посидел я сегодня пол дня в пустом офисе (понятно, что все по служебным надобностям отсутствовали) и подумал. Всё-таки программирование, даже в команде, обрекает на одиночество. Интеллект при этом напрочь отвязывается от тела, а тело от земли. Решил, что пора заняться чем-то другим, более тёплым, душевным и земным.
Альтернатива не заставила себя долго ждать. То тут, то там встречаю знаки и намёки. То один, то другой человек заговорит со мной на эту тему. Вот из последнего. Френдлента пишет про свой дом. Бывший партнёр продвигает продукты из деревни и периодически собирает заказы. Сельское хозяйство! Вот, где, не только много новых возможностей (и бизнес, и социальные инициативы), но и возвращение к истокам, к более естественному образу жизни. То, чего не получишь в городе, в этих панельных коробочках. То, чего как раз не хватает. Поэтому в ближайшее время я буду искать работу именно в этом направлении.
А на моё место в компанию нек4 нужен толковый на все руки программист. Знание ruby и ActionScript 3 необходимо. Умение самостоятельно удерживать часть проекта без дополнительного контроля тоже необходимо. Зарплата на уровне. Заинтересованным — падать в каменты.
30.03.2010Рационально
Вот интересно, сколько людей умерло в последние 10 лет от инфаркта, рака, передозировки наркотиков и алкоголя, укуса змей, колёс автомобиля, рук хулиганов и бандитов, взрывов бытового газа и, наконец, голода и холода? Совершенно точно больше по каждому пункту, чем от кое-чего на букву «т», вопрос лишь во сколько десятков-сотен раз.
Где новости по первому каналу, почему не приняты меры? Почему мне не звонят проверить, не умер ли я от удара током или подавившись блинчиком?