вторник, 12 августа 2014 г.

И снова Крит.

Вернулся с Крита, где провёл 18 великолепных, а местами не очень, дней. Краткий конспект о посещённых местах.


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




  • Заехали в пещеру Сфедони - огромная и загадочная

  • Прошли по ущелью Маргаритес

  • После долгого перерыва посетили озеро Курна


  • Прошли ущельем Католико, осмотрели развалины монастыря, добрались до моря



  • Прогулялись по ущелью Делиана


  • Осмотрели минойский некрополь Армени


  • Спускались в Курталиотское ущелье к истоком Великой реки



  • Нашли древнюю водяную мельницу (а кое-кто не удержался и забрался наверх) в районе Плакьяса


  • Добрались пешком, по горам, над обрывами, до уединённого пляжа Глика Нера (Сладкие воды)



  • Прошли по Сфакийскому ущелью


  • Навестили Аквариум и Ираклеонский археологический музей


  • Прошли, на этот раз до конца, до пляжа то есть, ущелье Рихтис. С купанием в водопаде, естественно.





И это далеко не все места, где мы побывали. Суммарный пробег составил 1800 км. 
Странно, когда находишься на месте, то кажется, что вроде бы и не видел особо ничего нового. А дома начинаешь разбирать фотографии - и удивляешься, как же много интересных мест посетил, когда только успел.

четверг, 17 июля 2014 г.

первая тысяча

Да да, первая тысяча километров на велосипеде в этом сезоне. Первый раз в жизни 1000 км за сезон. Очень доволен собой и всеми вокруг :)

среда, 16 июля 2014 г.

Часы с гэпээсом

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

четверг, 3 июля 2014 г.

Hibernate : mapping entities without foreign key association

Got a challenge today.
Let's say we have some tables with classificator data, and we need to store translations of the classificators.
One solution is to get a translation table with fields:

- ID (generated Primary Key)
- TABLE_NAME (for which table the translation is created)
- TABLE_ID (PrimaryKey value for particular classificator recordof )
- LANG
- TRANSLATION_VALUE (some text in particular language)

The problem is that there is no any foreign key between Classificator table and Translation table.
I thried to solve the problem using @Loader annotation, but it seems that this functionality is buggy.

The final solution, which seems to work, is using @JoinColumnsOrFormulas annotation:

 

@Entity @Table(name = "i18n_translation")
public class I18nTranslation extends AbstractManagedEntity {

  @Id  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;
  @Column(name = "table_name") private String tableName;
  @Column(name = "table_id") private String tableId;
  @Column(name = "lang_code", nullable = false) private String lang;

  @Basic @Column private String translation;

 ///Boilerplate ///
}

@Entity @Table( name="producer_type")
public class ProducerType extends AbstractDeletableEntity{

  @Id private Long id;
  @Basic private String descr;

  @OneToMany(fetch = FetchType.EAGER)
  @Where(clause = "table_name='producer_type'")
  @JoinColumnsOrFormulas( {@JoinColumnOrFormula(column = @JoinColumn(name = "table_id")) } )
  private Set translations;
 ///Boilerplate ///
}


пятница, 30 мая 2014 г.

Велосипед и бережное отношение к окружающей среде.

Как ни посмотри, а велосипед - отличная штука. ВО-первых, отличное транспортное средство. Конечно, не самое скоростное, но у не пешком ходить. Во-вторых, спортивный снаряд. Скатался на велике на работу и обратно -  30 км. аэробной нагрузки. А ведь мог бы это время в пробках потерять. Для здоровья опять же полезно. А про экологию и говорить нечего - сплошные плюсы.

Приятно, когда и работодатель с уважение относится к идее велосипедного транспорта. В сегодняшнем корпоративном инфолисте  было опубликовано фото нашего конторского коридора.
Foto on tehtud eelmisel nädalal meie rattaparklas. Kaugemalt tulijad sõidavad kohale Lasnamäelt. Pildil ka üks isiklik elektrijalgratas. JÄTKAKE SAMAS VAIMUS!

Перевод: фото сделано на прошлой неделе на нашей велопарковке. Некоторые велосипедисты приезжают даже из Ласнамяэ. Также на картинке и личный электровелосипед. ПРОДОЛЖАЙТЕ В ТОМ ЖЕ ДУХЕ!

понедельник, 26 мая 2014 г.

Первые 500 в сезоне

За 2 месяца проехал 500 км на велосипеде. Мог бы и больше, но погоды подвели. Неплохо, я считаю. Посмотрим, сколько будет в конце сезона.

четверг, 22 мая 2014 г.

Ночь музеев в Таллинне

А вот и наиболее понравившаяся картина, прямо иллюстрация к "Мифам Древней Греции" Куна.

Честно говоря, только зал классического искусства и зацепил.

вторник, 13 мая 2014 г.

Сколько евроцентов в банке?

Почти год самые мелкие монеты сгружались в стеклянную банку. Просто ради эксперимента. Сегодня копилка отправилась в банк на пересчёт. Оказалось, за год накопилось всего 13.06 Евро. Да, с такими темпами на новый велик не накопишь.

среда, 19 марта 2014 г.

Случай в школе

Давеча сынишка писал проверочную работу по русскому языку. В тесте присутствовал провокационный вопрос:
Какой твой родной язык? выбери:
а. эстонский
б. русский 
в. английский

Сын, отметя все сомнения, твёрдой рукой вывел:
ГРЕЧЕСКИЙ.

Невольно испытываю гордость за нестандартное мышление потомка. Однако, до сих пор стесняюсь спросить у учителя, правильно ли было написано слово греческий.

понедельник, 13 января 2014 г.

Крит 2013. Ущелье Платанья.

Зима  окончательно вступила в свои права. За окном минус 8, самое время вспомнить прошлое лето и гостеприимный остров Крит.
Решили мы посетить ущелье Платанья. Оно не так известно, как другие природные красоты Крита, однако фотографии в сети убедили нас, что место стоящее. Информацию я почерпнул отсюда: http://www.psiloritis-natural-park.gr/2/69.html. Ну и наши греческие друзья решили тоже отправиться с нами за компанию. 
Проблема с Платанья в том, что на Крите вы найдёте как минимум 3 деревни с созвучными именами. Поэтому будьте аккуратны в своих поисках, если решите последовать по нашим стопам. Наша цель находится в номе Ретимно, в 38 км южнее города.


пятница, 10 января 2014 г.

Dzone puzzle: Maze Solver

Assume you have a 2D array that represents a maze. Spaces are denoted by a 0 and walls are denoted by a 1. Devise the most efficient way to get through this maze, while following these two simple rules: 
- You can only move right (not left) 
- You can only move down (not up) 

My solution in Scala:

 

package mazesolver


case class Pos( x: Int, y: Int){
  def move(m: Move):Pos = m match {
   case Right => Pos(x+1, y)
   case Down => Pos(x, y+1)
  }
}

class Move
case object Right extends Move
case object Down extends Move

object Solver {
 
  def solve( maze: Maze, start: Pos, end: Pos): List[Move] = {
    
    
    def canMove( p:Pos, m: Move ): Boolean = {
      val newPos = p.move(m)
      if( newPos.x < 0 || newPos.y < 0 || 
          newPos.y >= maze.size || newPos.x >= maze(newPos.y).size ||
          maze(newPos.y)(newPos.x) == 1  ) false
      else true
    } 
    
    def findPathFrom( curr: Pos, moves: List[Move] ):List[Move] = 
     if ( curr == end) moves.reverse
       
     else{
         val pathR= if (canMove( curr, Right)  ) 
              findPathFrom( curr.move(Right), Right::moves)
               else Nil
         val pathD = if (canMove( curr, Down)  ) 
              findPathFrom( curr.move(Down), Down::moves)
            else Nil
         
         if( pathR == Nil ) pathD else  pathR
     }    
    
    findPathFrom( start,  Nil)
  }     
  
}

понедельник, 6 января 2014 г.

Jenkins : How to push Jenkins enviroment properties to Ant

По каким - то причинам Jenkins сам не передаёт переменные в Ant-плугин.
Но это можно сделать вручную,



после чего все переменные становятся доступными с префиксом env , например

env.SVN_REVISION

четверг, 2 января 2014 г.

... Орнелла Мути имеет эстонские корни

Вот кто бы мог подумать? Читаем в Википедии:

"Родилась 9 марта 1955 года в Риме, Италия. Её отец неаполитанец, а мать родом из Эстонии. "

Продолжаю изучать Жизни Замечательных Людей .