Eksport i import listy kanałów dla Technisat Technistar S2, Digicorder HD K2, Digit HD8+

W tym poście opiszę jak wyeksportować oraz zaimportować listę kanałów dla tunera TechniSat:

  • Technistar S2 / S2+
  • Digicorder HD K2
  • Digit HD8+

inne urządzenia TechniSat także powinny zadziałać.

Wymagania
USB stick/dongle z systemem plików FAT32. USB można sformatować bezpośrednio w tunerze:
Przycisk Menu - Zarządzanie nośnikami pamięci - System plików Formatowanie
UWAGA: wszystkie dane zostaną usunięte

2 pliki (kliknij aby ściągnąć archiwum)

Eskport ustawień wraz z listą kanałów

  • skopiuj plik „dbdump” na USB
  • włóż USB do włączonego tunera (pojawią się 2 komunikaty, jeden o odczycie, drugi że baza została wyeksportowana)
  • jak zobaczysz obraz z telewizora możesz wyciągnąć USB

Baza danych z ustawieniami jak i listą kanałów została zapisana w pliku pod nazwą: databse.cdp

Import ustawień wraz z listą listą kanałów

  • na USB skopiuj pliki „dbload” oraz „databse.cdp” (nie powinno być na nim pliku dbdump; najlepiej jak USB jest czysty przed operacją)
  • włóż USB do włączonego tunera
  • pocyekaj aż tuner wgra ustawienia

Całkiem proste :)

Opublikowano sat, technisat | Otagowano , , , , , , , | Komentowanie nie jest możliwe

groovy immutable annotation and map instantiation

I like very much object instantiation by map parameter. Anyway, it is very useful when you create complex object (for example from JSON or database).
Unfortunately, map object instantiation is not possible for classes which are @Immutable annotated and contains mutable objects.

Lets see it on the very simple groovy script (code bellow).
First create an MutableClass object with map as an constructor parameter. This class contains mutable field of type Sub.
Second try the same with ImmutableClass – it does not work.
What’s uncool : it is a RuntimeException … so be careful!

You can fix it by making Sub class also immutable – annotate it with @Immutable, too.


import groovy.transform.ToString
import groovy.transform.Immutable

@ToString
class MutableClass {
String field1
Sub field2
}

@Immutable
class ImmutableClass {
String field1
Sub field2
}

@ToString
// avoid RuntimeException by uncommenting line bellow
// @Immutable
class Sub {
String sub1
}

def map = ['field1': 'value1', 'field2': new Sub('sub1':'sub1value')]
def mutable = new MutableClass(map)
println mutable

assert mutable.field1 == 'value1'

def immutable = new ImmutableClass(map)

println immutable

Happy coding!

Opublikowano groovy | Otagowano , , , , | Komentowanie nie jest możliwe

MAC OSX: aktualizacja / update NodeJS z NPM

Nieaktualny NodeJS jest problematyczny … szczególnie jak kompilujemy projekt z zależnościami (wiele z nich wymaga NodeJS w wersji większej jak).

3 Kroki jak łatwo odświerzyć NodeJS:

      1. wyczyść CACHE:
      sudo npm cache clean -f
      2. zainstaluj pomocnika o nazwie „n”:
      sudo npm install -g n
      3. zainstaluj ostatnią, stabilną wersję NPM
      sudo n stable

gotowe :)

Opublikowano mac, nodejs, npm, web | Komentowanie nie jest możliwe

Logstash example with log4j input and JSON message content

Target

I want to use log4j SocketAppender to log into logstash. It is pretty straight since Logstash has log4j input type – supports internally log4j.
Additionally, I want that log4j message will be send in JSON format and in that form comes into Elasticsearch. That is pretty important for me since Elasticsearch can be easily queried afterwards.
So, let’s start.

Solution

Download Logstash

Download logstash from http://logstash.net
into the project directory called „logstash”. You can download Logstash in anywhere you want but then please use a config file from „logstash” directory. In the other case example will not work for you.

Start logstash

here is example for the version 1.3.3:
java -jar logstash-1.3.3-flatjar.jar agent -f logstash-log4j.conf -- web

Download project

you can clone in as git repo:
https://github.com/agorski/logstash-log4j-example.git
or download as ZIP file:
https://github.com/agorski/logstash-log4j-example/archive/master.zip

Execute Unit Test

just start terminal, go to project directory and execute following command:
mvn clean test

What the test do?
There are 2 Unit Tests, each creates 1 Log entry:

  1. simple with a map content "msg" : { "first-name" : "Albert", "last-name" : "Gorski", "city" :"Berlin" }
  2. complex with a map content which includes a sub-map: "msg": {"customer" : { "first-name" : "Albert", "last-name" : "Gorski", "city" : "Berlin" } }

Log entries, Maps, are converted to JSON String on the Java side and logged normally with log4j. Then send to Logstash by SocketAppender. Logstash gets field message, converts String to JSON format and saves it as msg field. It also mutate entry – all fields like message, path, priority, etc. are stripped – they are only a noise in my case. All stripped fields are not visible in Elsaticsearch / Kibana.
You can configure all this stuff in the logstash-log4j.conf config file.

Look at Kibana frontend to see log events

start browser you like and go to Kibana dashboard:
http://localhost:9292/index.html#/dashboard/file/logstash.json

Fun: Query Elasticsearch in Kibana frontend

Now you can query Elasticserach for JSON messages in Kibana like:

  1. query simple entry with: msg.city:Berlin
  2. query complex entry with: msg.customer.city:Berlin

Logstash Hero

wanna be Logstash hero? Read a fantastic book about Logstash: The Logstash Book by James Turnbull

Happy logging with Logstash!

Opublikowano elasticsearch, java, logstash | Otagowano , , , , , , , , , | Komentowanie nie jest możliwe

MAC OS: wyszukanie wszyskich plików (nie) zawierających podany tekst z poziomu terminala

Najłtwiej wyszukać wszyskie pliki zawierające lub nie podany tekst z poziomu terminala (konsoli).

W poniższym przykładzie będę szukał wszyskie pliki, które:

  • leżą w katalogu lub podkatalogu, w którym komenda została wywołana
  • nazwa pliku kończy się na Test (początek jest dowolny)
  • plik ma rozszerzenie java
  • plik posiada frazę @Category

find . -iname '*Test.java' -print | xargs grep -il "@Category"

Jeśli chcesz znaleźć pliki, które nie posiadają podanej frazy, wystarczy zamienić parameter komendy grep z małego l na duże L.

W poniższym przykładzie będę szukał wszyskie pliki jak wyżej, z tą różnicą, że plik ma nie posiadać frazy @Category.

find . -iname '*Test.java' -print | xargs grep -iL "@Category"

Opublikowano java, mac, os, ubuntu | Otagowano , , , , , , , | Komentowanie nie jest możliwe