Enigma2: Opis kodów dla parametru flag w pliku keymap.xml

, piątek, 31 sierpnia 2012 0 komentarze

Poniżej zestawienie znaczeń związanych z parametrem flag dla pojedynczej pozycji z pliku keymap.xml definiującego mapowanie klawiszy pilota na odpowiednie akcje enigmy.

m - MAKE - normalne naciśnięcie klawisza - zdarzenie obsługiwane raz po naciśnięciu
l - LONG - długie naciśnięcie klawisza - zdarzenie obsługiwane raz po 5-ciu powtórkach, powtórki są obsługiwane do zwolnienia
b - BREAK - zwolnienie klawisza - zdarzenie obsługiwane raz po zwolnieniu klawisza
r - REPEAT - powtarzanie włączone / klawisz zablokowany - zdarzenie obsługiwane po m wielokrotnie do czasu zwolnienia klawisza

Dobrą praktyką jest otwieranie okien dialogowych z użyciem flagi b zamiast m.

Enigma2 - tworzenie pakietów OPKG

, poniedziałek, 20 sierpnia 2012 0 komentarze

W tym artykule opiszę proces tworzenia i przeglądania pakietów OPKG, czyli plików z rozszerzeniem IPK. Na początek informacja w jaki sposób rozpakować pakiet. Powiedzmy, że chcemy podejrzeć zawartość pakietu enigma.ipk. W tym celu należy wykonać następujące kroki:

1. Utwórz katalog tymczasowy:

mkdir ./tmp

2. Wejdź do katalogu tmp:

cd tmp

3. Rozpakować zawartość pakietu IPK:

ar -ox ../enigma2.ipk

4. Rozpakować zawartość archiwów:

gunzip ./*.tar.gz

5. Wypakować pliki TAR:

tar xf ./data.tar
tar xf ./control.tar

6. Usunąć pliki TAR:

rm *.tar

Jeżeli chodzi o strukturę pakietu OPKG to jest ona następująca:

package.opk (ar)
+- debian-binary (text)
+- control.tar.gz (tarball)
...+- control (text)
...+- preinst (script)
...+- postinst (script)
...+- prerm  (script)
...+- postrm (script)
+- data.tar.gz (tarball)
...+- system
......+- bin
.........+- opkg-hello (program)

W strukturze jest stały plik tekstowy debian-binary, następnie spakowane skrypty kontrolne control.tar.gz, a następnie spakowane archiwum docelowe, czyli dane data.tar.gz.
Teraz przejdziemy do procesu tworzenia pakietu. W celu utworzenia pakietu wykonujemy:

1. Tworzymy katalog tmp

mkdir ./tmp

2. Wchodzimy do katalogu tmp:

cd tmp

3. Tworzymy plik tekstowy debian-binary z zawartością "2.0"
4. Tworzymy pliki kontrolne i pakujemy je do archiwum control.tar.gz. Do tworzenia archiwum TAR.GZ uzywany komendy:

tar zcvf control.tar.gz LISTA PLIKÓW/KATALOGÓW

5. Pliki danych pakujemy z docelową strukturą katalogową do data.tar.gz
6. Tworzymy pakiet przy użyciu komendy:

ar -r enigma2.ipk LISTA PLIKÓW/KATALOGÓW

Poniżej znajdują się przykładowe zawartości skryptów kontrolnych.

1. Skrypt control:

Package: enigma2-plugin-extensions-sample                                                                             
Version: 1.2-rc1                                                                                                                  
Description: My Sample Plugin                                                                                 
Maintainer: MASL                                                                                      
Section: base                                                                                                                     
Architecture: mipsel                                                                                                              
Priority: optional                                                                                                                
Homepage: xxxxxx                                                                                                                  
Depends: enigma2                                                                                                                  
Source: xxxxx

2. Skrypt postinst:

#!/bin/sh                                                                                                                         
echo ""                                                                                                                           
echo "********************************************************"                                                                   
echo "*  My Plugin                              *"                                                                       
echo "*  Support:  masl@xxx.pl                *"                                                                             
echo "*  Mod by MASL (c) 2012     *"                                                                                  
echo "********************************************************"                                                                   
echo ""                                                                                                                           
echo "Sample Plugin successfully installed! You should restart enigma2 now"                                                          
echo ""                                                                                                                           
exit 0  

2. Skrypt postrm:

#!/bin/sh                                                                                                                                                                                                                                                        rm -rf /usr/lib/enigma2/python/Plugins/Extensions/SamplePlugin                                                              
echo "Plugin removed! You should restart enigma2 now!"                                                                                                                                                                                                        
exit 0


Linux - jak sprawdzić wielkość katalogów w systemie plików

piątek, 10 sierpnia 2012 0 komentarze

W celu wylistowania systemów plików należy wykonać komendę:

df -h

W wyniku dostaniemy listę filesystemów zamontowanych w naszym linuxie, czyli coś w rodzaju:
Filesystem                Size      Used Available Use% Mounted on
ubi0:rootfs             102.1M     99.3M      2.8M  97% /
udev                      2.0M     88.0K      1.9M   4% /dev
/dev/mtdblock2            2.0M    388.0K      1.6M  19% /boot
tmpfs                    67.6M    268.0K     67.3M   0% /var
tmpfs                    67.6M     16.0K     67.6M   0% /tmp
tmpfs                    67.6M         0     67.6M   0% /dev/shm
/dev/sda1               931.2G     92.3G    838.9G  10% /media/hdd

W celu sprawdzenia wielkości katalogów w wybranym filesystemie należy wykonać:
du -shx -d 1 /

Znaczenie opcji:
- s - wyświetlenie jedynie wartości sumarycznej
- h - pokaż raport w formie czytelnej
- x - zawężenie do bezpośredniego filesystemu - katalogi z innych filesystemów są pomijane w końcowym raporcie
- d - głębokość pokazywanej struktury - wartość 1 oznacza pokazanie tylko bezpośrednich "dzieci"

Przykładowy wynik wykonania komendy:
560.0K /bin
4.2M /etc
21.4M /lib
137.0M /usr
132.0K /home
1.6M /sbin
0 /universe
26.9M /media
191.8M /

VU+ DUO Enigma2 - informacja o portach

, poniedziałek, 30 lipca 2012 0 komentarze

Ostatnio zostałem użytkownikiem sprzętu o nazwie VU+ DUO będącego tunerem telewizji satelitarnej opartym na systemie LINUX. Wszystkim tym którzy chcą mieć naprawdę dobrą maszynę z ładnym interfejsem graficznym (tutaj zachęcam do zainstalowania Black Hole) do oglądania telewizji SAT polecam ten sprzęt.

Przestrzegam wszystkich na wstępie przed tworzeniem hasła zawierającego znak AT (@) ponieważ ja takowe miałem i było to źródłem problemów ze steamingiem na iPAD-a i na inne urządzenia również. Pojawiający się błąd na iPAD w ogóle nic nie mówi na temat problemu z URL-em i dlatego ta przestroga - pół dnia na to straciłem żeby stwierdzić gdzie leży przyczyna.

No to teraz wyjaśnienie na temat otwartych portów:

21 - FTP
22 - SSH
23 - Telnet
80 - WebInterface - można zmienić w ustawieniach pluginu (polecam to zrobić - można uniknąć wielu problemów jak zainstaluje się nam inna wtyczka pracująca na porcie 80 i zrestartujemy system)
111 -
139 - Netbios port
445 - port wymiany plików Windows (SMB)
2029 -
8001 - domyślny port streamingu VIDEO
12000 - port nasłuchu serwera CCcam (można wyłączyć nasłuch ustawiając parametr "SERVER LISTEN PORT" na 0 w pliku /etc/CCcam.conf)
16000 - port telnetu dla CCcam
16001 - port usługi WEB dla CCcam: http://ip_CCcam_server:16001
31335 - STREAM-SEC: przeznaczenie to wysyłanie pojedynczego strumienia - wykorzystywany do strumieniowania AUDIO MP2
31337 -
31338 - STREAM-PES: przeznaczenie to strumieniowanie DVB zawierające kilka ES wewnątrz
31339 - STREAM-TS: przeznaczenie to strumieniowanie DVB z wykorzystaniem transport-stream jako kontenera
31340 - UDP-STREAM-PES
31341 - UDP-STREAM-PES
31342 - STREAM-TS-FILE: przeznaczenie to strumieniowanie DVB - odczyt z pliku zamiast z demultipleksera
31343 - STREAM-ES
57076 -
60533 -



SmartGWT: zamknięcie okna po operacji saveData()

, niedziela, 31 lipca 2011 0 komentarze

Przedstawiam rozwiązanie problemu dotyczącego zamknięcia okna po poprawnym wykonaniu operacji save. Problem polega na tym, że po wykonaniu kodu jak poniżej dostaniemy błąd NULL-owej referencji do okna.

public class DynamicFormWindow extends Window {
protected DynamicForm form;
private ActionPanel actionPanel = new ActionPanel();

public DynamicFormWindow(DynamicForm form, String title) {
this.form = form;

setShowShadow(true);
setShadowSoftness(4);
setShadowOffset(3);

this.setTitle(title);
this.setLayoutMargin(4);
this.setShowMinimizeButton(false);
this.setCanDragResize(true);
this.setAutoSize(true);
this.setIsModal(true);
this.setShowModalMask(false);
this.centerInPage();

this.addCloseClickHandler(new CloseClickHandler() {
@Override
public void onCloseClick(CloseClientEvent event) {
destroy();
}
});

VPanel panel = new VPanel();
panel.setPadding(2);
panel.addMember(form);
panel.addMember(this.actionPanel);

this.addItem(panel);

IButton saveButton = new IButton("Zapisz");
saveButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
DynamicFormWindow.this.saveData();
}
});
addActionButton(saveButton);
}

protected void saveData() {
this.form.saveData();
this.destroy();
}

protected void addActionButton(IButton button) {
this.actionPanel.addMember(button);
}

}


Problem polega na tym, że po wykonaniu saveData() automatycznie wykonywane jest destroy(), gdzie saveData() wykonuje akcję asynchronicznie używając GWT-RPC po stronie serwerowej aplikacji.

Rozwiązaniem problemu jest wykorzystanie Callbacka na saveData() oraz funkcjonalności Scheduler-a. W tym celu zmieniamy ciało metody saveData() w następujący sposób:


protected void saveData() {
if (this.form.validate()) {
this.form.saveData(new DSCallback() {
@Override
public void execute(DSResponse response, Object rawData, DSRequest request) {
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
@Override
public void execute() {
DynamicFormWindow.this.destroy();
}
});
}
});
}
}


Takie podejście daje nam to, że kod zamykający okno wykonywany jest po tym jak zakończy się operacja saveData() oraz bieżąca pętla obsługi zdarzeń GWT. Oznacza to, że kod zamykający okno wykona się po całkowitym zakończeniu obsługi związanej z akcją saveData().

Dodatkowe metody Schedulera scheduleEntry/scheduleFinally wykonywane są wewnątrz pętli obsługi zdarzeń zaraz przed/po tym jak wykonany zostanie kod związany z obsługą zdarzeń GWT. W przypadku wykonywania manipulacji DOM wewnątrz tej samej pętli obsługi zdarzeń, można przeciwdziałać dodatkowemu odmalowaniu przez browser.

GlossyBlue Blogger by Black Quanta. Theme & Icons by N.Design Studio
Entries RSS Comments RSS