My Shiny Weblog!

programming, photography and lifestyle

Breaking Up

My relationship came to its expected end. Instead of honesty and mutual respect, it was based on lies and scandals. Missed second chances made things worse. The few beautiful moments were quickly forgotten and everything that remained was pain and agony. So now I have a lot more bitterly earned experience. Can’t help myself from thinking about what gone wrong and the simple, objectivist love rules. This world needs more Dagny Taggarts and Hank Reardens.

Sex is a physical capacity, but its exercise is determined by man’s mind—by his choice of values, held consciously or subconsciously. To a rational man, sex is an expression of self-esteem—a celebration of himself and of existence. To the man who lacks self-esteem, sex is an attempt to fake it, to acquire its momentary illusion.

Romantic love, in the full sense of the term, is an emotion possible only to the man (or woman) of unbreached self-esteem: it is his response to his own highest values in the person of another—an integrated response of mind and body, of love and sexual desire. Such a man (or woman) is incapable of experiencing a sexual desire divorced from spiritual values.

Ayn Rand The Voice of Reason

Europeana

Europeana is the european cultural heritage aggregator. The idea behind it is simple. Every library, museum or other cultural institution within EU should provide metadata about its items. This metadata contains the identifier, description, location and the type of the item. It is in XML format, validated with Europeana Semantic Elements schema. A collection of record tags should be contained within metadata tag. Each record has a text, image, sound or video type. We have a collection of folk songs, which metadata was uploaded to Europeana. A folk song in our collection could be described like that:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?xml version='1.0' encoding='UTF-8'?>

<metadata xmlns="http://www.europeana.eu/schemas/ese/"
          xmlns:europeana="http://www.europeana.eu/schemas/ese/"
          xmlns:dc="http://purl.org/dc/elements/1.1/"
          xmlns:dcterms="http://purl.org/dc/terms/">

   <record>
      <dc:identifier>BA,001,2,09</dc:identifier>
      <dc:title xml:lang="en">Bulgarian folklore song</dc:title>
      <dc:title xml:lang="bg">Българска народна песен -- Снощи отидох, мамо</dc:title>
      <dc:subject xml:lang="bg">Фолклор -- България -- Кортен</dc:subject>
      <dc:description xml:lang="bg">Лазарска народна песен</dc:description>
      <dc:publisher>Magrathea Information Technologies</dc:publisher>
      <dc:type>Text</dc:type>
      <dc:format>text/pdf</dc:format>
      <dc:date>1908</dc:date>
      <dc:rights>Institute of folklore, BAS</dc:rights>
      <dc:language>bg</dc:language>
      <europeana:object>https://folk.magrathea.bg/pdf/ba_001_2_09/0</europeana:object>
      <europeana:provider>Bulgarian Academy of Sciences</europeana:provider>
      <europeana:type>TEXT</europeana:type>
      <europeana:rights>http://creativecommons.org/licenses/by/3.0/bg/</europeana:rights>
      <europeana:dataProvider>Institute of folklore, BAS</europeana:dataProvider>
      <europeana:isShownAt>https://folk.magrathea.bg/pdf/ba_001_2_09/0</europeana:isShownAt>
   </record>
</metadata>

Files like this should be send for validation in Europeana content checker. A JNLP for upload is provided here. The metadata is validated and published on the content checker site. I expected that more flexible API is available. Maybe something like Facebook or Twitter, that could be used for live systems integration. But that is appearantly not (yet) the case. Guess I should rerun my indexing script and upload again when there is new content in our repository. Reading the documentation on the site was not pleasant experiance. There are far too many PDF and DOC files out there, with Windows screenshots and click-through guides. I think it should be far more simple, short and developer oriented.

Using Amazon EC2 With Fog

So, my cloud deployment marathon week met me with Fog. It could be used for cross cloud service compatibility. I don’t care much about that, but simplicity is cool. Fog is a RubyGem and should be installed with:

1
gem install fog

Working with irb is fine. Two access keys are provided with Amazon AWS registration, they should be used here:

1
2
3
4
5
6
7
8
9
require 'rubygems'
require 'fog'

# create a connection
connection = Fog::Compute.new({
  :provider                 => 'AWS',
  :aws_secret_access_key    => YOUR_SECRET_ACCESS_KEY,
  :aws_access_key_id        => YOUR_SECRET_ACCESS_KEY_ID
})

The connection object allows EC2 API calls. Now a server object could be created, by providing SSH access keys:

1
server = connection.servers.bootstrap(:private_key_path => '~/.ssh/id_rsa', :public_key_path => '~/.ssh/id_rsa.pub', :username => 'ubuntu')

The server object is a working Ubuntu instance on Amazon EC2. It is a Micro instance, 64-bit CPU, 613 MB RAM, 8 GB partition on Amazon EBS and 15 GB bandwith. The AWS Free Usage Tier conditions should be available here. Sending SSH commands with the server object is easy:

1
server.ssh 'pwd'

Of course the server is also available with the standart SSH client, but a public IP is needed:

1
puts server.public_ip_address

The server instance is not removed or stopped with irb termination. All running instances could be destroyed using the connection object:

1
connection.servers.select {|server| server.ready? && server.destroy}

One server instance per user on Amazon EC2 could run free of charge for one year. As usual with cloud providers, that depends on its resource usage. The payment thresholds are reasonably high. Usage statistics are available here.

Reloaded

So I started using Octopress. My old blog used Jekyll and was in Bulgarian. The new one will be in English, because I want to improve my language skills. Some of the old content will be available soon. There are also some nice photos coming along.

Юни

Този месец беше дълъг и доста изнервен. Хубавото е, че имам време сериозно да се занимавам с Haskell. Прочетох LYAH, вися във Freenode канала и научих много нови неща. Свършиха ми проектите до момента и ми спряха “джобните”. Естествено подобни неща се случват, когато човек реши да си обзаведе апартамента например. За това все още нямам някои дребни удобства, като кухня, телевизор, маса и други мебели. Направих си Facebook, намерих много стари колеги и приятели. Посещавам и социалната мрежа на младите – jobs.bg. За идиотизмите там вече съм писал, но сега ми се отвори възможност да организирам интервюта за работодатели. Скоро един млад “сеньор” програмист ми обясни, че Ruby било същото, като PHP. Нямало смисъл да се пише на него, защото PHP било по-лесно. Дефиниция на лесно разбира се не последва. Споменаването на функционално програмиране и NoSQL бази данни обикновено води до празни погледи. Очевидно образованието в България не е прогресирало особено в последите 10 години. Едно момиче ме хвана да й обяснявам C++/SDL с цел кандидатстване за работа в известна фирма за програмиране на игрални автомати. Трябваше да реализира глупава хазартна игра на карти с прости правила. Организирали и курс, да подготвят потенциалните кандидати. А това във всички случаи води до генериране на ферми от code monkeys. Попаднах на още няколко такива — познават се по тишината, която цари в в залата, често пъти от порядъка на 20 и повече работни места. Втренчили поглед в текстовите редактори, калват стотици редове безмислен код на ден. Не се шегувайте на такива места и говорете тихо, иначе маймунките се цупят. Лесно се изпадало от там, ако сеньорите или шефовете не са доволни от количеството работа. Трябва да бачкаш много и да си комуникативен, мисленето не е приоритет, че и дори пречи. Иначе искат да имаш желание за развитие, след време човек дори може да стигне до някое решение, което е мъчило и други програмисти през 1970 година. Можеш да хвърчиш до другия край на света за да се занимаваш с глупости, защото тамошните специалисти са скъпи или тъпи…или и двете. Това разбира се не пречи на подобни фирми да са зелени. Изгорените тонове керосин в бизнес класа не се броят. Заприличали сме на Индия, модерните офис сгради са на метри от панелките в Дружба. Това позволява човек да наблюдава свинщината в гетото от висотата на своята позиция и луксозен офис на висок етаж. Гледката на прелитащите мотористи отдолу, бездомните кучета и разбитите панелки, няма как да не разчувства и най-коравото капиталистическо сърце. В една такава фирма пък ми обясниха, че те всъщност борят бедността. Единствената фирма, която ми допадна намерих чрез приятел. Опитах и малко нова проектна работа, което генерира интересни въпроси. Например колко ми е тарифата на час. Обвиниха ме, че вземам 50+ лв. на час. Разбира се, трябваше да отричам. Това би ме сложило в една категория с някои по-висши членове на обществото, като например по-евтините проститутки. А и как ли се мерят часовете, дали когато пътувам, зяпам през прозореца и си мисля за решение на даден проблем се брои за работа. Това е малко, като виртуалните свирки, сигурно се брои, ама не се заплаща добре. НАП ми “запорира” сметката, защото не си преведох данъка навреме. След преговори по телефона стана ясно, че това е един лесен и сравнително удобен начин да си платиш — пълно обслужване от тяхна страна, без да се иска нищо от управителя на фирмата. Държавицата бърка в сметката и си взема точната сума пари. Става въпрос за едни 350 евро, върху които така или иначе се начисляваха лихви. Традиционно в България се работи кокошкарски, но странно защо пък преди изборите. Сега за наказание няма да гласувам за настоящите вождове. Всеки ден обядвам или вечерям сам в отсрещния китайски ресторант. Сам, защото ходя без компания и сам, защото там никой друг не ходи. Сигурно заради кризата. Китаецът е голям образ и вече почти сме приятели. Готви добре, а и по обясними причини — много бързо. Приготвям се да замина за малко в Германия. Планирам да се срещна с колеги и приятели там. Ако излезе някоя интересна работа може да напусна кочинката и за по-дълго време.