wtorek, 20 grudnia 2011

PrimeFaces 3.0 name space

When You using NetBeans, it gives you PrimeFaces 2.2.1. When You try for example <p:selectOneMenu>, it appears, that namespace is not right.

Change it to: xmlns:p="http://primefaces.org/ui"
Of course: library itself shoud be loaded.

Explanation from primefaces.

poniedziałek, 19 grudnia 2011

Znikająca java w firefox

Była sobie java w firefox i bach! Nie ma jej. Instalacja, reinstalacja pluginu sun nic nie daje. Strona testowa javy zachęca do zainstalowania brakujących wtyczek, do wyboru IcedTea oraz SunJava. Ta druga w domyśle do pobrania ręcznie plików binarnych ze strony Sun. Koniec świata.

Należy:

wejść do katalogu z pluginami mozilli (/usr/lib/mozilla/plugins) i wydać polecenie:

sudo ln -s /usr/lib/jvm/java-6-sun/jre/lib/i386/libnpjp2.so
 
Utworzy się link symboliczny do wymaganej biblioteki i voila. 

czwartek, 22 września 2011

Fatalne czcionki NetBeans w Ubuntu

Nie da się na to patrzeć.
1. Zmiana poprzez "Tools->Options->Fonts" (mam anglojęzyczne NetBeans) daje jedynie zmiany tekstu w oknie edytora. Warto Dejavu Sans Mono 12.

Zmiana czcionki środowiska najłatwiejsza jest przez zmianę preferencji Ubuntu. "System->Preferencje->Ekran->Czcionki" polecam Dejavu Sans Book 10. Domyślna czcionka ubuntu daje kiepskie efekty.

2. Można jeszcze zmienić ustawienie w "netbeans.conf" i w linii: netbeans_default_options=

dodać na końcu:  --laf Nimbus -J-Dswing.aatext=true -J-Dawt.useSystemAAFontSettings=lcd

3. Ubuntu 16.04
a) instalacja gnome tweak
b) wybór czcionki w pozycji interfejs, np. Arial 11

środa, 21 września 2011

The form component needs to have a UIForm in its ancestry. Suggestion: enclose the necessary components within

When you see
The form component needs to have a UIForm in its ancestry. Suggestion: enclose the necessary components within <h:form>
in your NetBeans web application, change web.xml from:
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>



To:
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Production</param-value>
    </context-param>



wtorek, 20 września 2011

Przekazywanie wartości z primefaces dataTable

Aby przekazać wartości wybranego z tabeli wiersza, do na przykład formularza edycji wartości tego wiersza, wystarczy w przypadku dataTable primefaces skorzystać z zaleconego mechanizmu, np:

<p:dataTable var="car" value="#{carBean.cars}" selectionMode="single" selection="#{carBean.selectedCar}">
   
...columns
</p:dataTable>
carBean to oczywiście managed bean z właściwością/polem selectedCar, posiadającym właściwy get i set.

Wystarczy teraz umieścić przycisk wywołujący formularz, który odwoła się do pól/pola beanu carBean. np:
<p:commandButton value="Edit" action="/car/editCar"/>
Jednakże odwołanie na stronie editCar do pól beana carBean, zwrócić może niechybnie null, mimo, że dopiero co były ustawione na właściwe wartości.

Rozwiązanie tkwi w deklaracji zakresu beana, a ściślej w użytej do tej deklaracji bibliotece. Jeśli bean jest @SessionScoped, to należy użyć
import javax.enterprise.context.SessionScoped;
Natomiast użycie:
import javax.faces.bean.SessionScoped;
sprawi, że nie zobaczymy wcześniej ustawionych wartości.

NetBeans, facelets, jsf i znikający css.

Gdy w projekcie opartym o JSF, umieścimy klientów template, w innych katalogach niźli sam template, to szybko może się okazać, że całe opisanie strony w przywołanych w template plikach css, nie pokazuje się wcale w stronach "klienckich".

Objaw: na stronach będących klientami template, brak formatowania css.

Dzieje się tak z powodu sposobu zapisu odwołania do arkuszy stylów css, jaki stosuje wizard NetBeans przy tworzeniu template. Ten sposób to:
<link href="./resources/css/default.css" rel="stylesheet" type="text/css"/>
Zapis powyższy wskazuje, iż arkusz stylów (styli) (ze stylami) znajduje się w podkatalogu "/resources/css" katalogu aktualnie wyświetlanej strony.

Gdy strona znajduje się w innym katalogu niż template, którego jest klientem, nie ma mowy aby zostały na niej zobaczone style css, włączone w templacie.

Rozwiązaniem jest zmiana wskazania arkuszy css w template, na następujące:
<h:outputStylesheet name="default.css" library="css"/>
Wówczas jeśli "default.css znajduje się w podkatalogu /resources/css stron www, style css będą widoczne w stronach klienckich.

czwartek, 21 lipca 2011

UUID i LVM

Wyświetlenie urządzeń z pokazaniem uuid:
sudo blkid
ls -l /dev/disk/by-uuid/

Wyświetlanie urządzeń logicznych dysków:
sudo lvdisplay

Thunderbird - jedno konto dwa komputery

Czy mogę korzystać ze swojego konta pocztowego na Thunderbird z dwóch różnych komputerów?

Tak.

1. Skopiuj katalog profilu na nośnik zewnętrzny np. pendrive. Katalog profilu jest wskazany w ~/.thundebird/profiles.ini

2. Podłącz nośnik zewnętrzny do dowolnego komputera z Thunderbirdem.

3. Uruchom na tym komputerze Thunderbirda poleceniem:
thunderbird -profile "pełna ścieżka dostępu do katalogu profilu"

Można na stałe ustawić korzystanie z poczty na zewnętrznym nośniku. Należy wówczas wpisać w ~/.thunderbird/profiles.ini w sekcji [Profile0] ścieżkę przez podstawienie Path=..... , oraz IsRelative=0

środa, 20 lipca 2011

Ubuntu 11.04, sun java, netbeans

Wraz z ubuntu 11.04 przychodzi java, ale w implementacji "open". Jest to doskonała implementacja z tym, że część np. stron internetowych nie zechce z nią współpracować. Zatem wypada zainstalować javę "sun-java" obecnie od oracle.

Wersję posiadanej javy sprawdzamy: java -version
Używaną wersję wskazujemy: sudo update-alternatives --config java


Sun-java staje się dostępna do instalacji przez wskazanie w repozytoriach korzystania z oprogramowania "partnerów ubuntu". Bez tego może być niedostępna.

Po zainstalowaniu sun-java, właściwie open-java możemy usunąć.

W netbeans (7.0) nie można wybrać java ee version 6.
Istnieją dwa serwery tomcat i glassfish.
Usunięcie (jako dostępnej platformy) tomcata - udostępnia do wyboru wersję 6 javy ee.

poniedziałek, 18 lipca 2011

Introduction to Ajax for Java Web Applications - not working

Z tutorialem "Introduction to Ajax for Java Web Applications" są niezrozumiałe dla mnie problemy. Oficjalny serwer, oficjalnej firmy, materiał do nauki i ... zonk. Why do you do this to me ? Na szczęście jest tam link do chodzącego projektu, tak że można sobie "odcyfrować" w cziom dieła.


Generalnie nie działa ponieważ:
a) brak jest obsługi parametru lookup w nadpisywanej metodzie doGet w servlecie AutoCompleteServlet.
b) brak jest strony na której miałby być wyświetlony wybrany kompozytor - composer.jsp
Dodatkowo w trakcie tworzenia servleta łatwo pominąć właściwy jego kontekst (trzeba zmienić na /autocomplete) a jeszcze nadto warto zaznaczyć opcję tworzenia "Add information to the deployment descriptor web.xml".

ad a)
    if (action.equals("lookup")) {

            // put the target composer in the request scope to display
            if ((targetId != null) && composers.containsKey(targetId.trim())) {
                request.setAttribute("composer", composers.get(targetId));
                context.getRequestDispatcher("/composer.jsp").forward(request, response);
            }
        }
ad b)

<html>
  <head>
    <title>Composer Information</title>

    <link rel="stylesheet" type="text/css" href="stylesheet.css">
  </head>
  <body>

    <table>
      <tr>
        <th colspan="2">Composer Information</th>
      </tr>
      <tr>
        <td>First Name: </td>
        <td>${requestScope.composer.firstName}</td>
      </tr>
      <tr>
        <td>Last Name: </td>
        <td>${requestScope.composer.lastName}</td>
      </tr>
      <tr>
        <td>ID: </td>
        <td>${requestScope.composer.id}</td>
      </tr>
      <tr>
        <td>Category: </td>
        <td>${requestScope.composer.category}</td>
      </tr>     
    </table>

    <p>Go back to <a href="index.jsp" class="link">application home</a>.</p>
  </body>
</html>

Poza tym kod nie jest najlepszy. Są dwa podejścia - dać w miarę bogaty kod aby uczący mógł "się zapoznać " z możliwościami. Dać kod maksymalnie ubogi, pokazujący jedynie to czego się się uczy, pozwalając później na rozwój. Wydaje się, że przykład ze stron netbeans hołduje tej pierwszej zasadzie, która dobra nie jest bo wydłuża czas asymilacji treści, zupełnie bez potrzeby.

Na początek można sobie skasować zarówno nazwę jak i "akcję" głównego formularza strony index.jsp. I co? I działa ? Hihi - no działa. Więc są to parametry nie wpływające na pracę programu.

Parę słów do treści tutoriala.
index.jsp
Istotne są:
  • Dwa elementy "interaktywne". 
    • Pole wprowadzania danych  "complete-field". Pole powiązane jest z funkcją doCompletion() pokazującą tabliczkę z danymi uwzględniającymi wpisany początek.
    • Tablica "complete-table". Tablicę tą wypełnia funkcja callback()
  • Wywołanie funkcji init() wewnątrz znacznika <body. Funkcja init() wiąże zmienne pliku javascript z polami w dokumencie html.
javascript.js
Podstawowa funkcja wyświetlająca wynik podlisty kompozytorów to powiązana z "complete-field" doCompletion(). Funkcja ta:
a) tworzy "request"
b) tworzy parametry dla niego (są to parametry "action" oraz "id") zapisywane w url podawanym jako parametr otwarcia "requesta". "action" jest tu parametrem stałym, zaś "id" to tekst który użytkownik zdążył wpisać do pola wprowadzania tekstu
c) otwiera "request" podając jako metodę "GET", oraz wcześniej ustalony "url" w którym przekazuje parametry "id" oraz "action".


AutoCompleteServlet
Gdy doComplete wywołuje swój request, jest wywołanie skierowane do pewnego adresu z pewnymi parametrami.  Ów adres to "autocomplete", ten sam który wpisany został jako kontekst servletu. Dzięki temu servlet jest wywoływany. Ponieważ przy jego otwarciu wskazano metodę "GET" to wykonywana jest metoda "doGet" servletu. Pobiera ona parametry. 

Jeśli akcja jest "complete" to następuje stworzenie stringa w formacie XML z danymi do wyświetlenia jako podpowiedzi kompozytorów.  Metoda doGet ma dwa parametry. Jeden to wejście (request), drugi to wyjście (response). W wyniku pracy dla akcji complete następuje ostatecznie zapis na wyjście "response.getWriter().write". 


Zapis ten jest odbierany przez funkcję callback() z javascript. gdyż tak był zdefiniowany request otwierany przez doCompletion. callback bierze req.responseXML (odpowiedź z servletu = string sformatowany do XML) i wpisuje go do tabliczki comlete-table. Elementy tej tablicy (imiona i nazwiska kompozytorów) są powiązane z linkami w ten sposób, że ich kliknięcie ponownie kieruje do metody doGet servletu tym razem parametr action jest ustawiony na lookup.


Metoda doGet servletu realizuje drugi z alternatywnych warunków,  pierwszy to action.equals.("complete"). W ramach drugiego z warunków servlet tworzy atrybut requestu z danymi kompozytora i przekazuje request stronie composer.jsp


Strona composer.jsp ma możliwość odczytu danych z "requesta" poprzez np. {requestScope.composer.firstName} i te dane publikuje jako wybranego kompozytora.

sobota, 2 lipca 2011

Jak dodać nowe skojarzenie plików w Gnome Commander

Gnome Commander jest chyba najszybszym i najlepszym dwu panelowym managerem plików dla Gnome i dla Ubuntu. Niestety sprawia kłopoty przy próbie utworzenia skojarzenia między plikami o znanym nam rozszerzeniu a odpowiednią aplikacją.

Case study:
Niech gnome-commander otwiera pliki z rozszerzeniem "mm" za pomocą aplikacji "freemind" (są to tzw. mapy myśli).

1. Stworzyć typ mime dla freemind.
a) instalacja assogiate (np. sudo apt-get install assogiate )
b) stworzenie w tym programie typu mime. Multipurpose files, Name application/freemind, Filenames "*.mm"

2. Uzupełnić wpisy w plikach i katalogach ~/.local/share/applications
a) sprawdzić czy jest jeśli nie to stworzyć: userapp-freemind-QGHGFV.desktop (nazwę można zmienić)
treść:

[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
Exec=freemind %f
Name=freemind
Comment=Własna definicja dla freemind
NoDisplay=true

b) w pliku mimeinfo.cache
wpisać:
application/freemind=userapp-freemind-QGHGFV.desktop

To wszystko.
Poza tym warto zajrzeć na stronę pewnego sympatycznego psa

czwartek, 30 czerwca 2011

Chronione komórki w Excell 2007

Jak odblokować chronione komórki w arkuszu Execella ?

To proste - są porady, w tym firmy z Windy.
Jednak gdy te wszystkie porady zawiodą warto sprawdzić czy:
Arkusz nie pochodzi od "aktywnego formularza", który ktoś sobie ściągnął i zapisał.
Jeśli tak, to czy przypadkiem w trakcie tego niewinnego procesu włączył zapisanie "Arkusz Excell z obsługą makr". Jeśli tego nie uczynił, pozostając przy opcji domyślnej "Arkusz Excell" to tak zwana du...sza blada.

Trza wziąć ponownie oryginalny "aktywny" arkusz i zapisać go sobie z obsługą makr (.xlsm a nie .xlsx). Potem po otwarciu takiego delikwenta, nad paskiem z adresem komórki, pokaże się pasek "Ostrzeżenie o zabezpieczeniach" więc przycisk "Opcje" i "Włącz tę zawartość".

A poza tym warto odwiedzić stronę małego psa.

środa, 29 czerwca 2011

Odzyskiwanie GRUBA

O odzyskiwaniu GRUBA napisano już tysiące tekstów. Sprawa jest jasna. Jest to bardzo proste i wiele razy opisane. Tylko dlaczego tyle z tym szumu?

1. Bo każdemu zdarza się "utracić" gruba.
2. Bo do jasnej tego no, nie ma prostego automatu, który by owym grubem gospodarował. Trzeba wpisywać jakieś zaczarowane komendy, aby gruba odzyskać.


Sposoby na odzyskanie gruba są generalnie trzy:
1. Odpalamy linuxa live np. ubuntu. Ustawiamy sobie środowisko systemu w katalogu mnt. Wydajemy polecenie "grub" potem "find" i "setup" - szczegóły dostępne w internecie.
2. Odpalamy linuxa live i ustawiamy sobie środowisko systemu jw. Wydajemy polecenie "grub-install" szczegóły w internecie.
3. Korzystamy z programu do odzyskiwania gruba np. rescatux i program robi wszystko automatycznie.

No ale.
1. Listy poleceń piszą różni ludzie, nie zawsze dbający o szczegóły. ( zatem nie wychodzi )
2. Przytoczone sposoby dotyczą instalacji standardowych linuxa.
3. Grub zmienił się na grub2.

Ad3. Grub a grub2. Mała sprawa. Ale wersje live linuxa z grubem2 ( także wersje na pendrivie czy gdzieś tam indziej) nie zareagują na polecenie "grub". Pojawi się komunikat, że nie ma takiego programu. Można sobie go "zrobić" przez sudo apt-get install grub i klepanie domyślnych komunikatów. Tyle, że spowoduje to zainstalowanie gruba w wersji "legacy" i usunięcie gruba2. Fajne co nie? Wszystko się zaczyna "upraszczać".

Ad2. Co jest instalacja niestandardowa ?
A na przykład dwie partycje na hd, z których jedna jest montowana jako /boot, zaś druga jest szyfrowana i zawiera grupę wolumenów logicznych (prosty sposób na np. zabezpieczenie lapka. Wówczas wszystkie powyższe metody biorą w przysłowiowy łeb bo inaczej być nie może. Najciekawiej zachowuje się "ciężka altyleria" czyli rescatux. Kończy swoje działanie czarującym komunikatem "Something went wrong". I fajnie.

Zatem drogi użytkowniku, co robić jeśli masz instalację niestandardową? Szyfrowaną partycję, na której jest główny system plików położony w volumenie logicznym należącym do grupy takich wolumenów?

Oczywiście należy odtworzyć środowisko linkuxa zgodnie z tym co jest na dysku, a więc "otworzyć sobie" prawdziwy katalog plików root (deszyfracja i montowanie volumenu logicznego), zamontować wszystko ( w tym /boot) z odpowiednimi podkatalogami do tworzonego "w locie" /mnt/root (czy jak go tam sobie kto nazwie). I dopiero wtedy grub-install. Inaczej klapa.

Ad1. Pomijają, przekręcają. Warto poświęcić chwilę czasu na przejrzenie alternatywnych zestawów poleceń i pokusić się choćby o częściowe ich zrozumienie.

A poza tym warto odwiedzić stronę pewnego małego psa.

poniedziałek, 27 czerwca 2011

Chronione komórki w Open Office (Libre Office)

Jak zdjąć ochronę z zabezpieczonych fragmentów dokumentu ?

Zdjęcie ochrony z całej tabeli:
1. Widok->Nawigator
2. Odnajdujemy tabele a w tej kategorii "tabelę".
3. Menu kontekstowe na tabeli->Tabela->Nie chroń

Zdjęcie ochrony z pojedynczej komórki.
Menu kontekstowe na komórce->Komórka->Nie chroń->

Wprowadzenie ochrony - proces odwrotny.

Warto też odwiedzić stronę małego psa.

niedziela, 26 czerwca 2011

Ubuntu 11.04 nie montuje woluminów logicznych

Zadanie: partycja zaszyfrowana na niej grupa wolumenów logicznych, w tej grupie dwa wolumeny. Klikamy "Miejsca" wybieramy partycję, jesteśmy proszeni o podanie hasła, jesteśmy informowani, że tego co w środku zamontować się nie da. Teraz: wcześniejsze wersje ubuntu po tych czynnościach pokazywały przy ponownym kliknięciu w "Miejsca" woluminy logiczne utworzone na montowanej partycji. Ergo Woluminy były dostępne. Kliknięcie powoduje zamontowanie. 11.04 jest ulepszony - woluminów nie pokazuje, albo jeszcze gorzej, czasem pokazuje a czasem nie.

Można sprawę rozwiązać cyklem komend (trzeba poszukać i kopiuj, wklej). Można zainstalować sobie "system-config-lvm". Mała aplikacja, która w graficzny sposób pozwala na zamontowanie woluminu logicznego. Klikamy w wolumin, pod spodem przycisk właściwości - i tam montowanie.

Warto zajrzeć też na stronę pewnego psa.