8

Водопады долины реки Аше







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

Картинки клмкабельны

6

Об использовании словоформ

Недавно, (на прошлой неделе в пятницу) выходя с работы, я обнаружил на доске объявлений приказ интересного содержания. Выкладываю его здесь :)

Как говорят, "нарочно не придумаешь". Порой, то, что говорят всерьез, оказывается смешнее любой шутки.
6

Клиент для Blogger-своими руками

Знаю, знаю... Мне счас скажут: "на хрен нужно, скачай тут или там-то и пользуйся".
Первый коммент имхо, должен быть об этом :) Сразу хочу ответить, что никого не заставляю
писать такой клиент своими руками, особенно кому это не интересно.
Я хочу его написать, потому что:
1) я люблю писать программы.
2) мне писать программы интересно.
3) см. пункт первый.
Начать нужно пожалуй с того, почему я на это решился. При хождении по справке Блоггера я натыкался на ссылки "для разработчиков" (счас уж точно не помню). Да и сам предполагал, что какая-то поддержка подобного рода должна быть. После 2-х минутных поисков попал на страничку
Client Libraries and Sample Code, где предлагалась поддержка для различных языков.

К моему сожалению, либы для C++ не оказалось (видимо, для ее создания необходимо слишком много работы "ручками"). Выбрал Java (пока что в упор не хочу замечать .NET - слишком тяжелый у этого farmework-а дистрибутив, а так же из религиозных соображений :))) )
Фразочка на этой страничке: "For each language, the client library provides tools
and an abstraction layer, letting you construct queries and use response data
without having to create HTTP requests or process HTTP responses by hand." -
ввергла меня в состояние легкой эйфории - супер, если это правда, то решить
поставленную задачу будет довольно легко.
Итак, идем на Getting Started Guide. и смотрим, чего нам нужно качать. Насколько я понял, далеко не все из этого будет использоваться для blogger-клиента. Похоже, что пакет, который Google предлагает разработчикам (Google data API), обладает гораздо большими возможностями, и кроме blogger-клиента можно много всего понаделать, не мешал бы только геморрой и вредные привычки :)))
Сначала там предлагают качнуть JDK, но если мы пишем на Java, то оно ужо должно у нас быть (на всяк случай - посмотрите, добавлен ли у вас в Path путь к java-компилятору. Если нет - обязательно добавьте). Потом треба качнуть Apache Ant версии не ниже 1.7.
Если этот зверь уже есть- энто хорошо, а то весит он аж 11 МБ. Странный зверь,
в данном случае он нужен только для сборки библиотеки - то есть по сути, используется
как make. Люди добрые, расскажите мне плиз, чего он еще хорошего делает
(просто хочется знать, неужто я скачал всего лишь аналог make весом в 11 МБ?)...
Я просто скачал архив, распаковал его в папку D:\Ant (можно в любую другую, но
_весьма желательно_, чтобы имена всех папок в пути соответствовали формату 8.3).
Чтобы зверь Ant заработал и не гавкал, надо установить переменные окружения ANT_HOME
(в моем случае она будет иметь значение D:\Ant) и JAVA_HOME (в моем случае D:\jdk5).
И в этих переменных также нежелательны длинные имена папок, а уж тем более всякие
двойные кавычки. Потом качаем JavaMail API и JavaBeans Activation Framework.
Кроме этого, будет нужна библиотека servlet-api.jar. Она входит в состав сервлет контейнеров J2EE, Tomcat, WebLogic и т.п. Я скачал отсюда zip-архив Tomcat и выдернул оттуда соответствующий файл.
Теперь можно приступать к установке самого Google Data API. Заходим сюда и скачиваем последнюю версию библиотеки в исходниках - файлы gdata-src.java-1.x.x.java.zip и gdata-samples.java-1.x.x.java.zip. Распаковываем все это в одну папочку, после чего ищем файл gdata/java/build-src/build.properties . Изначально выглядит он следующим образом:

# Points to a external library dependancies
# EDIT-THIS: If rebuilding the authsub or gbase/recipe sample point to,
# servlet jar in Sun's Servlet API library.
servlet.jar=/tmp/gdata_dep/servlet-api-2.4.jar
# EDIT-THIS: Point to mail.jar lib in Sun's Java Mail API.
mail.jar=/tmp/gdata_dep/mail.jar
# EDIT-THIS: If using version older than JDK 1.6,
# Point to activation.jar in Sun's activation framework library.
activation.jar=/tmp/gdata_dep/activation.jar

# Include debugging information in built library files. Possible values "on" or "off"
javac.debug=true
javac.debuglevel=lines,vars,source

Насколько я понял, в этом файле нужно указать правильные пути к используемым библиотекам. Причем если работаешь под виндой, то в путях нужно писать двойной бэкслэш. У меня после редактирования этот файл стал таким:

# Points to a external library dependancies
# EDIT-THIS: If rebuilding the authsub or gbase/recipe sample point to,
# servlet jar in Sun's Servlet API library.
servlet.jar=c:\\Java\\libs\\servlet\\servlet-api.jar
# EDIT-THIS: Point to mail.jar lib in Sun's Java Mail API.
mail.jar=c:\\Java\\libs\\javamail-1.4.1\\mail.jar
# EDIT-THIS: If using version older than JDK 1.6,
# Point to activation.jar in Sun's activation framework library.
activation.jar=c:\\Java\\libs\\jaf-1.1.1\\activation.jar

# Include debugging information in built library files. Possible values "on" or "off"
javac.debug=true
javac.debuglevel=lines,vars,source

Почти все, остался последний штрих - для того, чтобы примеры работали, нужно отредактировать
файл gdata/java/build-samples/build.properties: sample.credentials.username и sample.credentials.password нужно присвоить правильные значения вместо тех, что стоят по умолчанию. Теперь можно запускать компиляцию примеров.
Как и сказано в руководстве по инсталляции, я зашел в директорию gdata\java и запустил сначала компиляцию примера для календаря:

ant -f build-samples.xml sample.calendar.run

Ничего примечательного не произошло, все откомпилилось и только. Но хотелось чего-то более существенного. В примерах нашлась простенькая программка-клиент для блоггера. Пробуем:

ant -f build-samples.xml sample.blogger.run

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

2

Немного о провинциальных изготовителях печатных плат


Давно хотел написать эту заметку, потому что наболело. Начну с того, что работа моя связана не только с программами, но и с железом, поскольку я и еще несколько человек в моем отделе занимаемся разработкой приборов. А так как народу мало, частенько приходится брать на себя функции снабженца, искать что-где-почем продается, где те или иные детали можно изготовить. К сожалению, за последние 3-5 лет "стабильность" в нашей стране привела к тому, что в моем городе (Казань) печатные платы уже никто не делает. Поэтому, если необходимо изготовить более-менее сложный прибор, для которого печатные платы "на коленках" сделать нереально, то приходится обращаться в другие города, где есть соответствующее производство.

Сразу скажу, что "быстро" хорошие платы не делаются, и всякое там "экспресс-изготовление за 3-7 дней" является в большинстве случаев либо экспресс-изготовлением брака, либо уже "не-экспресс". Поэтому в такие фирмы мы даже и не обращались (в прошлом был печальный опыт). Неплохие платы получались почти у всех фирм, с кем мы работали, при сроке изоготовления 3-4 недели. Еще один немаловажный параметр - цена. Сей параметр сильно зависит от города, где находится производство. Цены на платы в Москве, Питере и Новосибирске оказались практически одинаковыми (разница 1-2%) и очень высокими. Гораздо ниже цены оказались в провинциальных городах. Так, цена одного и того же комплекта плат в Ижевске оказалась ниже чем Москве примерно в 2.5 раза! Не скажу, что заказывать платы в Ижевске (см. их сайт и контактная информация) лучше, чем где бы то ни было. Порой достучаться по мылу и дозвониться до них бывает тяжеловато. Но если вы до них достучались и они приняли ваши платы в производство - можете быть уверены, что:
1) эти платы будут сделаны раньше, чем вы заплатите за них деньги.
2) платы к вам приедут сами, если вы не забудете попросить, чтобы в счет включили стоимость доставки
3) платы будут отличного качества.
В начале сентября я как раз закончил разводить платы для очередного опытного образца прибора. Я конечно, стал стучаться в Ижевск, но они сказали что завалены гос. заказами и приступят к нашему заказу не раньше, чем через месяц. Переплачивать столичным "печатникам" мне не хотелось, и я стал искать других "провинциалов", готовых взяться за мою плату. Вскоре таковые нашлись в Саратове, - завод агрегатного машиностроения СЭПО-ЗЭМ. Заказ у меня быстро приняли, и 11 сентября прислали счет на вполне приемлемую сумму. Все бы хорошо, но люди, с которыми я разговаривал, отказались включить в счет доставку. Я (вот дурак!!!) согласился на их условия - доставить платы до Казани через транспортную компанию.
Примерно через 3 недели платы были готовы. Теперь нужно было их доставить в Казань.
Вот тут началось самое интересное. Оказалось, что организовать доставку через транспортную компанию довольно сложно - для этого надо оформить и подписать кучу документов. Поэтому я сначала решил организовать доставку через моих родственников, живущих в Саратове. Увы, эта попытка провалилась, и пришлось идти честным путем - оформлять договор с транспортной компанией.
Офомление договора с "Грузовозофф" и заявки на доставку груза(млин, а весь груз - 9 печатных плат общим весом около пол-кило) заняло у меня 4 дня - почти полная рабочая неделя. Кроме этого, мне необходимо было отправить на завод СЭПО-ЗЭМ доверительное письмо, в которым я подтверждал, что доверяю компании "Грузовозофф" получение моих грузов у завода "СЭПО-ЗЭМ". С представителями завода была достигнута договоренность о том, что платы они отдадут по получению от меня факсимильной копии такого письма, а оригинал я пошлю почтой. Все условия я выполнил, письмо факсом отправил, и получил подтверждение от них том, что факс дошел. Вроде все ОК, остается только ждать. Прошло более недели, и я решил узнать, как обстоят дела. После звонка саратовским "печатникам" выяснилось, что экспедитор из "Грузовозофф" к ним за платами заезжал, но платы ему не дали, потому что якобы доверительного письма от меня они не получали и "никто это письмо в глаза не видел". Это было уже слишком! Я с трудом удержался от непарламентских выражений и сказал, что у нас факт посылки такого письма факсом зарегестрирован. После чего письмо сразу нашлось. Я не знаю, какое слово лучше характеризует такую ситуацию на этом заводе, но имхо, наиболее подходящее - "бардак".
Сегодня платы наконец отгрузили экспедитору "Грузовозофф". Я думаю, они доедут до нас через неделю. Со дня оплаты счета на печатные платы прошло 2 месяца с лишком. Ради чего я все это писал? Просто хочется предупредить: люди добрые, если вам дороги нервы и время - не связывайтесь с саратовским заводом СЭПО-ЗЭМ!
4

Выходной программиста





1

Поиграем!

Теперь мой ход! Передо мной ходила BeBeKK@
:) Правила игры следующие:
получаете букавку от предыдущего участника, вспоминаете литературных персонажей имена, прозвища которых начинаются именно на эту буковку, выбираете пять наиболее близких Вам по духу или самых ярких, даете краткое описание и иллюстрацию.

Мне досталась буква "С".
Итак:



1. Сантьяго - главный герой повести Эрнеста Хемингуэя "Старик и море", вышедшей в 1952 году.
Замысел этого произведения созревал у Хемингуэя в течение многих лет. Еще в 1936 году в очерке «На голубой воде» для журнала «Эсквайр» он описал подобный эпизод, случившийся с кубинским рыбаком. Сама же повесть была опубликована в сентябре 1952 года в журнале «Лайф».



2. Санчо Панса (исп. Sancho Panza) — персонаж романа Мигеля Сервантеса «Хитроумный идальго Дон Кихот Ламанчский», оруженосец Дон Кихота. На протяжении романа активно употребляет в речи пословицы, являющиеся составной частью так называемых санчизмов — монологов, произносимых Санчо. Фамилия Панса, по-испански записываемая также Pança, означает «брюхо». В испанском литературоведении рассматривается как олицетворение испанского народа.


3. Джон Сильвер (англ. John Silver) — вымышленный пират XVIII века, персонаж романа Роберта Льюиса Стивенсона «Остров сокровищ».
Сильвер имел прозвища: «Одноногий», «О'корок», «Долговязый Джон». У него нет одной ноги. На его плече большую часть времени сидит попугай по кличке «Капитан Флинт», который время от времени выкрикивает: «Пиастры, пиастры, пиастры!»
В известных экранизациях Джона Сильвера играли Осип Абдулов (фильм 1937 года), Борис Андреев (фильм 1971 года), Олег Борисов (фильм 1982 года), Армен Джигарханян (мультфильм 1988 года), Чарлтон Хестон (фильм 1990 года).



4. Снегурочка - героиня пьесы А.Н. Островского. В ней Снегурочка предстаёт как дочь Деда-Мороза и Весны-Красны, которая погибает во время летнего ритуала почитания бога Солнца Ярилы. Имеет вид прекрасной бледной светловолосой девушки. Одета в бело-голубую одежду с меховой опушкой (шубка, меховая шапка, рукавички). Первоначально пьеса не имела успеха у публики.
В 1882 году Н. А. Римский-Корсаков поставил по пьесе одноимённую оперу, которая имела громадный успех.



5.Салтан - главный герой пушкинской "СКАЗКА О ЦАРЕ САЛТАНЕ, О СЫНЕ ЕГО СЛАВНОМ И МОГУЧЕМ БОГАТЫРЕ КНЯЗЕ ГВИДОНЕ САЛТАНОВИЧЕ И О ПРЕКРАСНОЙ ЦАРЕВНЕ ЛЕБЕДИ"

Эти строчки все мы помним с детсва:

Три девицы под окном
Пряли поздно вечерком.
«Кабы я была царица, —
Говорит одна девица, —
То на весь крещеный мир
Приготовила б я пир».
«Кабы я была царица, —
Говорит ее сестрица, —
То на весь бы мир одна
Наткала я полотна».
«Кабы я была царица, —
Третья молвила сестрица, —
Я б для батюшки-царя
Родила богатыря».

Только вымолвить успела,
Дверь тихонько заскрыпела,
И в светлицу входит царь,
Стороны той государь.
Во всё время разговора
Он стоял позадь забора;
Речь последней по всему
Полюбилася ему.
«Здравствуй, красная девица, —
Говорит он, — будь царица
И роди богатыря
Мне к исходу сентября.


Вот:)

А еще хотелось написать. да правила не позволяют, про Садко, Самгина, который Клим, Сюзанну из "Женитьбы Фигаро", про стойкого оловянного солдатика, Стародума из "Недоросля" Фонвизина, Софью из грибоедовского "Горе от ума", про Сонечку Мармеладову...

З.Ы. Беззастенчиво пользовалась материалами с Википедии
2

Книжечки для жены программиста


Купила я сегодня себе книжечку, да не простую, а как всегда для работы. Точнее для того чтобы повышать свою квалификацию верстальщика:) А книжечка называется "Скрипты в InDesign. Руководство для умных дизайнеров и ленивых верстальщиков", автор - Михаил Борисов. Не буду льстить себе и называть себя умным дизайнером,
а вот в том, что я ленивый верстальщик, признаюсь, положа руку на сердце:) Но самое интересное в том, что книжечка хоть и про InDesign, но большей частью про программирование, про написание скриптов для Indesign.
Много лет работала в этой программе и не знала к своему стыду ни про какие скрипты, все делала ручками. А вот угораздило меня выйти замуж за программиста и
книги мне теперь все странные какие-то попадаются: по моей тематике, но с уклоном в программирование. Может, программирование - это заразно?
Просто когда я изучала HTML и CSS, я об этом не задумывалась. Но теперь когда выбираю язык для изучения(выбираю между JavaScript и Visual Basic), на котором планирую ПИСАТЬ (страшно представить)эти
самые скрипты, прихожу к выводу, что программирование - это не сумасшествие, т.к. с ума сходят поодиночке, программирование - это какое-то эпидемиологическое заболевание, вакцины от которого нет, а иммунитет на него выработался далеко не у всех...
0

IBM developer Works

Недавно (в пятницу, 7 ноября) я искал по дневникам единомышленников (то бишь народ, пишуший на Java и про Java). Наткнулся на дневник Xatkaru. Последний ее пост (Утечки памяти в Java) меня даже несколько напряг одним своим названием (как, в Java бывают утечки памяти???). Через ссылку в этом ее посте я попал на IBM developer Works, чему очень рад: я давно не встречал столько статей по интересующей меня тематике, сколько нашел там. К сожалению, оставить коммент у нее в блоге не получилось: почему-то комментить там можно только пользователям ЖЖ, а мне даже через OpenID оставить коммент не удалось. И поэтому пишу только тут: спасибо вам, Xatkaru, за ваш пост и ссылочку на интересный ресурс.
6

Компилятор с Java в “родной” код - “на коленках”?

Я на работе почти доделал свой долбаный отчет, и решил устроить себе маленький отдых. В блог долго ничего не писал, поскольку хотелось выдать чо-то такое СУРЬЕЗНОЕ и ИНТЕРЕСНОЕ, в результате ни того, ни другого родить не удалось.

Как обещал в предыдущем посте, объясню, для чего могут понадобиться вещи, описанные мной в постах о SmartPointers и исключениях. Дело в том, что мне нравится Java, пожалуй, даже слишком. Не буду заниматься тут ее рекламой, поскольку сравнение языков - дело неблагодарное. Но Java-программа не может выполнятся без окружения(JRE), а дистрибутив JRE весит 17 Мб. Не хухры-мухры, даже если вы не на диалапе сидите. Моя голубая мечта - компилятор Java-программ в "родной" исполняемый код той платформы, которую я использую. Увы, GNU Java слишком урезана, что бы ее можно было использовать, да и одна важная вещь - шаблоны там пока не поддерживаются. Разжиться такой штукой, как Excelsior Jet мне совсем не по карману.
Посему стали посещать такие мысли - а может, просто преобразовать программу, написанную на Java в прогу на C++? Что в C++ такого, чего нет в Java? На первый взгляд мне показалось, что все очень просто, ведь C++ - охрененно мощный язык. Там есть.... куча всего нужного. И не очень.
Короче, разворачивание стека вызовов, как в Java, на C++ эмулировать просто. Простейший сборщик мусора "для бедных" - тоже. Как мне кажется, можно даже сравнительно просто сделать дефрагментацию кучи. Если кому интересно, каким образом - постараюсь изобразить реализацию. В тупик меня поставил Reflection API. Я всегда пытаюсь избегать категоричных утверждений, но похоже, что Reflection API нельзя эмулировать с помощью той RTTI, которая есть в C++ на сегодняшний день. В черновике стандарта C++ от 19.10.2005 класс type_info описан так:

namespace std{
class type_info {
public:
virtual ~type_info ();
bool operator ==( const type_info & rhs ) const ;
bool operator !=( const type_info & rhs ) const ;
bool before ( const type_info & rhs ) const ;
const char * name () const ;
private :
type_info ( const type_info & rhs );
type_info & operator =( const type_info & rhs );
};
}

Видно, что за просто так вы вряд ли что-то получите, окромя названия типа в виде текстовой строки. Не говоря уже о таких вещах, как получение различных конструкторов типа и их использования для создания экземпляров или получения списка доступных полей и методов. Короче, нужно что-то такое свое ваять, дабы получить требуемый эффект. Причем этот стандарт не требует, что бы функция const char* name() возвращала уникальную для каждого типа строку.
В последнем стандарте (черновик C+0X от 4.10.2008) ситуация стала получше. Там класс type_info описан следующим образом:

namespace std {
class type_info {
public:
virtual ~type_info();
bool operator==(const type_info& rhs) const;
bool operator!=(const type_info& rhs) const;
bool before(const type_info& rhs) const;
size_t hash_code() const throw();
const char* name() const;
type_info(const type_info& rhs) = delete; // cannot be copied
type_info& operator=(const type_info& rhs) = delete; // cannot be copied
};
}

Появилась, к счастью, функция size_t hash_code(), про которую английским по белому накорябано:
"Returns: an unspecified value, except that within a single execution of the program, it shall return the same value for any two type_info objects which compare equal.
Remark: an implementation should return different values for two type_info objects which do not compare equal".
То бишь, если два объекта класса type_info по результатам сравнения оказались не равны, эта функция для разных объектов должна возвращать разные значения, а если равны - то одинаковые.
Сначала хотел закончить этот пост пессиместическим резюме о том, что мои надежды рухнули, эмулировать Reflection API на C++ не получится (помидоры завяли, солнце не светит, и т.п). Но некоторые весчи меня обнадеживают. Так, класс type_info поддерживается библиотекой, и возможно, я смогу его переопределить и добавить в него функцию hash_code. Кроме этого, я заглянул в исходники самого Java Reflection API. Похоже, реализация его сделана в основном на Java, а не зашита полностью в виртуальную машину. Так что есть что почитать, о чем подумать, авось какие мысли появятся.
8

Вот что бывает...

когда моим фотоаппаратом снимаю не я: