0

Ностальгическое...

Предложила мне BeBeKK@ поучаствовать в эстафете. А мне это напомнило "дела давно минувших дней", времена моего школьного детсва. Была тогда у девчонок забава - анкеты. Заводилась терадочка, составлялся опросник. Вопросы не сказать, что глупые, скорее наивные. Кстати, очень похожие на ниже следующие:) Анкетка обязательно украшалась рисунками или вырезками из журналов. Передавалась для заполнения исключительно по желанию и исходя из дружеских привязанностей хозяйки. Не секрет, что в любом коллективе, а тем более классе есть свои лидеры, а потому было особенно почетно, заполнить анкеты каких-то конкретных одноклассниц. В конце опросника всегда предлагалось что-нибудь пожелать хозяйке. И вот из тетрадки в тетрадку кочевали такие стишки:
Что пожелать тебе не знаю.
Так трудно подобрать слова.
Желать любви я не желаю,
Она придет к тебе сама...


или

Алая роза упала на грудь.
Ты нашей дружбы вовек не забудь...


Где-то дома, у родителей, у меня такая анкетка сохранилась...
Вот такой вот привет из дества...

Ну что ж приступим:)

Список из 5-ти вещей, которые я вижу, не вставая из-за стола
Всего 5? Постараюсь уложиться:) Ну во-первых, компьютер полностью (монитор, системный блок, мышь, клава и т.д.). Во-вторых, авторский оригинал книги, которую я сейчас верстаю. Затем - этажерка с бумагами, стопка компактдисков и цветное лазерное дорогущее МФУ.

Как вы причёсываетесь?
По-всякому бывает... иногда молча, а иногда беседуя с кем-нибудь... да куча вариантов:)

Что на вас надето?
Одежда, обувь, часы, обручальное кольцо,цепочка на запястье, цепочка с крестиком

Чем занимаетесь по жизни?
В разные периоды жизни и занятия у меня были разные. Когда только родилась, все больше спала, ела, пачкала пеленки и ревела. По мере взросления отключались одни опции, подключались другие:)

Ваше самое большое достижение в жизни на данный момент?
да я откуда знаю? Потомки разберутся что к чему...

Кого вы обняли последним?
Любимого мужа

Ваше нынешнее хобби, увлечение?
Фотография и гитара

Что вы съели последним перед заполнением этого опросника?
ух, обед уже 2 часа как закончился... Салатик морковный, говядина с овощами, фрутто-роллы и чашка зеленого чая - мой обед.

Содержание последней полученной смс-ки
23,0,09 na Vash litsevoy schet zachisleno 100 rub.

Какие сайты вы всегда посещаете, даже во время небольшой интернет-сессии?
почтовый ящик, блог, новостную ленту, ридер и т.д.

Последняя вещь, которую вы купили?
Книжечку!!!:) Люблю я книги покупать:) Благо есть куда их ставить. Так вот приобрела я сегодня книгу Дмитрия Быкова "ЖД".

Что вы сейчас слушаете?
Звуки всякие, жужжание оргтехники, стук клавы... о! лязг трамвая:)

О чём вы думаете вечером, перед тем как лечь спать?
Спать хочу! Просто спать ложусь, когда уже не могу не спать:)

Последний CD, который вы купили?
не помню. Вот подарили мне недавно сборник песен из советских кинофильмов на CD.

Что вы сейчас читаете или перечитываете?
Вот только закончила читать "Магический круг" Кэтрин Нэвил, бредятина редкостноя, но затягивает.
Постоянно читаю всякую специальную литературу по полиграфии и различную фотографическую литературу.

Если бы вы могли играть на любом музыкальном инструменте, что бы вы выбрали?
Играю на классической гитаре. А еще хочу на саксофоне научиться...

Как ваше общее самочувствие?
Как говорят у нас на работе, "не дождетесь!":)

Что бы вы сейчас хотели кому-нибудь сказать?
"Когда сидишь в собраньях шумных, язык пылает и горит; но люди делятся на умных и тех, кто много говорит" © И. Губерман

Скажите что-нибудь про осалившего вас.
BeBeKK@, предложившая мне эстафету, - по разумению моему, человек весьма активный, творческий, а главное с хорошим чувством юмора!:)

3

No pasaran!

Как для Вас закончится кризис?
За время кризиса Вы так ничему и не научились. Как были неисправимым оптимистом, так и остались. Ну, разве может какой-то там экономический кризис лишить человека его личного счастья? Конечно, нет! Такой подход к жизни позволил Вам выйти сухим из воды, да еще и с улыбкой до ушей. Во время кризиса могли быть некоторые трудности, но Вы сохранили главное – радость и душевное тепло.


12

Микроконтроллеры и язык Си: указатели на функции

Последние пару месяцев я занимаюсь тем, что пишу программку для одного микроконтроллера (для M30624, семейство m16c/62). Хотя называть его "микроконтроллер" - не совсем правильно, поскольку микросхема эта довольно навороченная.

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

while(1)
{
int res;
int cmd = getCommand();
switch(STATE)
{
case STATE_1:
res = sub_prog1(cmd);
break;
case STATE_2:
res = sub_prog2(cmd);
break;
...
..
case STATE_N:
res = sub_progN(cmd);
}
STATE = res;
}

В этот раз состояний оказалось многовато, более 20 штук (а точнее - 22). Возможно, я что-то не то сделал, и все это можно было как-то иначе описать, но... пока не хочется, думаю что и так все будет фурыкать. Другое дело, что неохота было такой громадный оператор switch расписывать. Тут я вовремя вспомнил про указатели на функции. Хорошая штука, только на работе, млин, ни одной книжки по Сям не оказалось, а я, как на зло, забыл, как оно называется. Искал в инете по словам "процедурный тип", "функциональный тип" и т.п, и ессно, ничего нужного мне не нашел. На скорую руку написал по памяти:

typedef int (*StateHandler)(int);

По моим представлениям, такое объявление дает понять компилятору, что StateHandler - это указатель на функцию, возвращающую тип int и принимающую один параметр тоже типа int. Как потом оказалось, правильно я его все-таки объявил :) После этого приведенный в начале поста код можно переписать уже вот так:

StateHandler handlers[] = {sub_prog1, sub_prog2, ... sub_progN};

while(1)
{
cmd = getCommand();
STATE = (*(handlers[STATE]))(cmd);
}

По-моему, получается короче, да и работать наверняка будет побыстрее. Главное, чтобы значения переменной STATE шли по-порядку, но имхо, это как раз не проблема.

2

Беззнаковые целые и Java

Недавно напоролся на один подводный камень в Java, который я до поры до времени обходил стороной потому, что не было необходимости собирать из байтов более длинные целые числа, а следовательно - и необходимости использовать поразрядные операции (сдвиг и т.п). Задача была простая - через порт от внешнего устр-ва приходит последовательность байт. Байты - это данные от 10-разрядного АЦП, первый байт - младший, второй - старший, третий - младший, четвертый - старший и т.д. Сделал я все как обычно, то есть наподобие того, как в этом примере:
import java.lang.*;

public class sign
{
public static void main(String [] args)
{
byte bytes[] = new byte[2];

bytes[0] = 0x56;//младший байт
bytes[1] = 0x02;//старший байт
short a = 0;
a = bytes[0];
a |= ((short)bytes[1]) << 8;
System.out.println("Value 1 = " + String.format("0x%04X", a) + "\r\n");
bytes[0] = (byte)0x85;//без оператора приведения не компилится
bytes[1] = 0x01;
a = bytes[0];
a |= ((short)bytes[1]) << 8;
System.out.println("Value 2 = " + String.format("0x%04X", a) + "\r\n");
}
}

Первый println выводит то, что и ожидалось - 0x256. Но вот второй... Сразу честно скажу: компилятор отказывался глотать этот пример, говоря, мол "possible loss of precision". Но в реальной ситуации байты шли из последовательного порта и предугадать их значения он в принципе не мог. И получалось у меня нечто невразумительное - примерно то, что выдавалось при печати во втором случае - вместо ожидаемого 0x0185 получилось 0xFF85. До сегодняшнего дня я думал, что беззнаковые числа нафиг не нужны и от них больше вреда, чем пользы, и авторы Java правильно сделали, что от них отказались. Но вот млин, были бы в они в Java. А еще лучше - наличие объединений (как в сях) или записей с вариантами (как в Паскале). Тогда бы вообще никаких сдвигов не надо, писваиваешь значения нужным полям, и... вуаля! Ну а по причине отсутствия в Java таких вкусностей, как объединения, проблему я решил следующим образом:
class sign2
{
public static void main(String [] args)
{
byte bytes[] = new byte[2];
short a;
bytes[0] = (byte)0x85;//без оператора приведения не компилится
bytes[1] = 0x01;
a = (short)(bytes[0] & 0x00FF);
a |= ((short)bytes[1]) << 8;
System.out.println("Value 2 = " + String.format("0x%04X", a) + "\r\n");
}
}

Конечно, аналог объединения можно сымитировать и в Java, но писанины много, да и доступ будет не на прямую, а через методы. Например, так:
class ByteShort
{
private short a = 0;
public void setFull(short d){ a = d; }
public short getFull(){return a; }
public void setByte(byte d, int index)
{
short mask = 0x00FF,
tmp = (short)(d & mask);
mask <<= index*8;
mask = (short)(~mask);
a &= mask;
a |= tmp;
}
public byte getByte(int index)
{
short tmp = (short)(a >> index*8);
return (byte)tmp;
}
}
Какой вывод можно сделать из всего этого? Я для себя вывод сделал следующий - из тех языков программирования, с которыми я знаком (Си, Си++, Java, Ada, Pascal, Fortran) пока нет такого, который был бы одинаково удобен как для быстрого создания приложений со сложной логикой, так и для написания программ взаимодействия с аппаратурой, и при этом безопасного. До этого случая на роль такого универсального языка (с моей точки зрения) претендовала Java, но счас... я прям в недоумении развожу руками.
8

Как хорошо быть женой программиста и почему нужно слушаться мужа

Те, кто занимается фотографией и имеет зеркальную камеру прекрасно знают, что как только появилась зеркалка, к ней сразу же "требуется" куча аксессуаров: объективов, светофильтров, бленд и пр...
Я в этом состоянии живу уже более года, с тех пор как у меня появилась ЦЗ. У меня уже есть дополнительный объектив, защитный фильтр для китового объектива, штатив, рюкзак, несколько штук флеш-карт, куча кисточек, груш и салфеточек... А желание приобретать новые аксессуары не пропадает. Продолжаю мечтать об объективах, внешней вспышке, пульте ДУ и т.д. Но есть у меня огромное желание к своему canon eos 400d приобрести батарейную ручку для пальчиковых батареек, которая к тому же позволит удобно снимать вертикальные кадры:))) Но стоит это удовольствие довольно дорого. А разобраться, что мне нужнее в данный момент трудно - приоритеты не расставлены. Поэтому этой самой ручки у меня нет. А есть только один аккумулятор, тот что шел в базовой комплектации. И вроде бы мне его хватало всегда. потому-то на уговоры мужа приобрести запасной, я все время отнекивалась... Но. как говорится, и на старуху бывает проруха...
В минувшее воскресенье отправились мы погулять в лес с намерением попробовать себя в роли фотоохотников, т.е. поснимать птичек и если удастся белок. Техника была уложена в рюкзак и благополучно привезена в лес. К нашей немалой радости хмурое небо начало проясняться и погода стала по-настоящему весенней. Казалось, что все благоприятствует фотоохоте. Вот мы вышли на полянку с кормушками, где резвились синички и поползни. Достала я аппарат, начала эксперементы с ISO, экспопарой. Пожалела, что не додумалась взять с собой штатив. И вот тут обратила внимание на то, что аккумулятор мне скоро покажет фигуру из трех гипотетических пальцев. И действительно, удалось сделать еще несколько кадров, и фотоаппарат потребовал заменить батарею. Вытащила аккумулятор, отогрела его за пазухой, но это меня не спасло, еще один совсем неудавшийся кадр...
Пришлось упаковать аппарат обратно в рюкзак и просто погулять по лесу, порадоваться наступившей весне.
Из отснятого, увы, ничего интересного не получилось, а посему не выкладываю... Эх. если бы не аккумулятор...

А отсюда вывод: слушай мужа и делай то, что он говорит!!!

А вчера муж обошел все близлежащие магазины, торгующие фототехникой, и, не найдя аккумулятор в продаже, заказл его. Вот такой вот у меня муж-программист! И мне от этого хорошо-хорошо!:)
Так что скоро будет у меня два аккумулятора и, надеюсь, тогда смогу похвастаться результатми - удачными фотовыстрелами!
Фотоохота весьма увлекательное занятие, требующее внимательности, терпения и разумеется любви к природе:)