„Face the book” lub „Book the face”

Analiza postanowień regulaminu
i politykę prywatności Facebook

0) Podczas rejestracji na polskiej wersji
nie jest wyświetlany regulamin w języku polskim,
polityka prywatności również w języku angielskim
– czujecie tą manipulację?

1a) Czego nie wolno -> http://www.facebook.com/terms.php?ref=pf

1b) Polityka prywatności -> http://www.facebook.com/policy.php

a)

Content:
If you do not want us to store metadata associated with content you share on Facebook (such as photos),
please remove the metadata before uploading the content.

‘Jeżeli nie chcesz przechowywać metadanych powiązanych z zawartości, którą się dzielisz
na Facebook (taką jak zdjęcia), prosimy o usunięcie metadanych zanim wgrasz zawartość’

]
– super, większość osób pewnie korzysta z aplikacji łączycych się do Facebook,
która automatycznie usuwa metadane, nie jest dokładnie określone, co to są metadane
]

Friend Information:
If you give us your password to retrieve those contacts, we will not store your password
after you have uploaded your contacts’ information

‘Import listy kontaktów, jeżeli zostaniesz poproszony o hasło, aby pobrać listę
kontaktów z innego źródła, po jego wprowadzeniu i pobraniu listy kontaktów
nie będziemy przechowywać hasła.’

]
Dobra, hmm, a co w przypadku, kiedy wprowadzę hasło, a nie uda się pobrać listy kontaktów?
]

c)

Information we collect when you interact with Facebook:

Access Device and Browser Information. When you access Facebook from a computer, mobile phone,
or other device, we may collect information from that device about your browser type, location,
and IP address, as well as the pages you visit.

Urządzenie dostępowe i informacje o przeglądarce:
Kiedy wejdziesz na Facebook przy użyciu komputera, telefonu komórkowego lub innego urządzenia,
będziemy mogli gromadzić informacje z tego urządzenia na temat rodzaju twojej przeglądarki,
geolokalizacji i adresu IP, jak i również stron, które odwiedzasz.

]
Te ostatnie zdanie „jak i również stron, które odwiedzasz.”
Pierwszy raz słyszę, że ze strony X jest legalnym odczytywanie informacji o stronach,
które odwiedziłem !!!

Jedynie można z poziomu serwera odczytywać tzw „HTTP_REFERER”
i to o dziwo jest zapisywane w ciastku sesyjnym z nazwą „reg_ext_ref”
]

d)

Information from other websites.

If in any of these cases we receive data that we do not already have,
we will “anonymize” it within 180 days, meaning we will stop associating the information
with any particular user.
If we institute these programs, we will only use the information in the ways we explain
in the “How We Use Your Information” section below

Sprawa odnosi się do reklamodawców, twórców dodatków, aplikacji i obustronnej wymiany
informacji.

‘W przypadku, gdy nie posiadamy jeszcze tych danych, które zostały nam dostarczone przez firmę
trzecią, w przeciągu 180 dni (pół roku) usuniemy ich powiązanie z jakimkolwiek użytkownikiem.
Jeżeli nadzorujemy wydawanie tych programów, użyjemy danych w ten sposób zgromadzonych
zgodnie z warunkami opisanymi w sekcji ‘How We Use Your Information’ ‘

]
Super, uzyskałem dane od reklamodawcy, gwarantuję sobie przez 179 dni serwowanie
Tobie reklam powiązanych z Twoimi preferencjami.
Prywatność pełną gębą.
]

e)

3. Sharing information on Facebook.

Gender and Birth Date.

We ask for your date of birth to verify that you are 13 or older,
and so that we can better limit your access to content and advertisements
that are not age appropriate. Because your date of birth and gender are required, you cannot delete them.
You can, however, edit your profile to hide all (or part) of such fields from other users

‘Wymagamy, aby podczas procesu rejestracji podać datę urodzenia, aby zweryfikować,
czy mamy do czynienia z osobą 13letnią lub starszą,
takie zachowanie jest wymagane, aby zablokować dostęp do treści lub reklam
dla ciebie nieprzeznaczonych.’

No tak – dobry sposób na weryfikację danych

Ponieważ data urodzenia i płeć są wymagane, nie możesz ich usunąć.
Możesz natomiast wyedytować profil, aby ukryć wszystkie lub część danych
przed innymi użytkownikami.

]
Nowy sposób edycji danych
]

f)

# Even after you remove information from your profile or delete your account,
copies of that information may remain viewable elsewhere to the extent
it has been shared with others,
it was otherwise distributed pursuant to your privacy settings,
or it was copied or stored by other users.
# You understand that information might be reshared
or copied by other users.
# Certain types of communications that you send to other
users cannot be removed, such as messages.


Nawet kiedy usuniesz informacje ze swojego profilu lub usuniesz konto,
kopie tych informacji mogą pozostać widoczne gdzieindziej w przypadkach,
a) kiedy podzieliłeś się tymi informacjami z innym użytkownikem
b) zostały udostępnione zgodnie z ustawieniami prywatności
c) lub zostało skopiowane lub przechowane przez innych użytkowników

Zgadzasz się na to, że informacje przez ciebie udostępniane mogą być współdzielone
lub kopiowane przez innych użytkowników

Określone formy komunikacji z innymi użytkownikami, chociażby wiadomości,
nie mogą być usuwane.

]
Czyli użytkownik Facebook może wejść i gromadzić wszystkie informacje o Tobie
i po usunięcia twojego konta, nie masz prawa zarządać ich usunięcia
czy nawet wglądu w dane, które zostały zgromadzone
]

g)

Advertisements. Sometimes the advertisers who present ads on Facebook use technological methods
to measure the effectiveness of their ads and to personalize advertising content.
You may opt-out of the placement of cookies by many of these advertisers here
-> http://www.networkadvertising.org/managing/opt_out.asp.
You may also use your browser cookie settings to limit or prevent the placement of cookies
by advertising networks.

‘Możesz zablokować pliki cookies od dostawców reklam. Nawet podajemy tobie adres stronę z informacjami,
które firmy wykorzystują pliki cookies do śledzenia aktywności użytkownika.’

]
Uczciwość wobec reklamodawcy gwarantowana.
]

h)

To serve personalized advertising to you:

Even though we do not share your information with advertisers without your consent,
when you click on or otherwise interact with an advertisement there is a possibility
that the advertiser may place a cookie in your browser and note that it meets the criteria they selected.

‘Pomimo tego, że nie przekazujemy informacji o tobie bez twojej zgody reklamodawcom,
to kiedy klikniesz lub w inny sposób zareagujesz na reklamę istnieje możliwość,
że reklamodawca zapisze cookie w przeglądarce oraz zapisze, że spełnia kryteria,
które wybrał.]

]
Czyli generalnie rzecz ujmując, wyświetli się reklama na całą stronę, a ty zamykając
ją zostaniesz zasypany ciastkami
lub nawet najedziesz na nią kursorem myszy.
]

i)

To provide you with services.
We may provide information to service providers that help us bring you the services we offer
These service providers may have access to your personal information for use for a limited time,
but when this occurs we implement reasonable contractual and technical protections to limit
their use of that information to helping us provide the service

‘Możemy przekazywać informację i twoje dane osobowe innym dostawcom,
którzy pomagają utrzymać nas serwis – np.: serwerownię.’

]
Jasne, i teraz wyobraźmy sobie, że służby specjalne są firmą hostującą.
]

h)

Transfer in the Event of Sale or Change of Control.
If the ownership of all or substantially all of our business changes,
we may transfer your information to the new owner so that the service can continue to operate.
In such a case, your information would remain subject to the promises made in any pre-existing Privacy Policy.

‘Jeżeli zmieni się właściciel, rezerwujemy sobie prawo do przekazania mu twoich danych, tak aby serwis mógł nadal funkcjonować.
W takim wypadku, obowiązuje polityka prywatności, którą zaakceptowałeś przed przeniesieniem własności.’

]
Jasne, i teraz wyobraźmy sobie, że służby specjalne są firmą przejmującą.
]

1c) Regulamin serwisu -> http://www.facebook.com/terms.php

a)

Sharing Your Content and Information

For content that is covered by intellectual property rights,
like photos and videos („IP content”),
you specifically give us the following permission,
subject to your privacy and application settings:
you grant us a non-exclusive, transferable, sub-licensable, royalty-free,
worldwide license to use any IP content that you post on or in connection with Facebook („IP License”).
This IP License ends when you delete your IP content or your account
unless your content has been shared with others, and they have not deleted it.

‘Dajesz na prawo do redystrybuowania twoich zdjęć i nagrań i innych materiałów
chronionych prawem autorskim, które opublikujesz na naszym portalu.
Ta licencja wygasa z chwilą usunięcia twojego konta,
chyba że te materiały zostały przekazane innym, a oni ich nie usunęli’

]
Jak warto zauważyć, jest stwierdzenie ‘others’, które nie wiadomo kogo
dotyczy – użytkowników, reklamodawców?
]

b)

Safety:
You will not collect users’ content or information, or otherwise access Facebook,
using automated means (such as harvesting bots, robots, spiders, or scrapers) without our permission.

‘Nie będziesz gromadził bez naszej zgody wykorzystując automatyzację (boty, archiwizery itd)
zawartości powiązanej z użytkownikiem’

]
Czyli mogą na to wyrazić zgodę
]

Opublikowano Licencja | Dodaj komentarz

Informatyczne teorie spiskowe XXI wieku

Jak to się kiedyś wspominało:
„Zobaczysz, powietrze też będzie na open-source,
życie już jest.”.

Trochę chyba w tym absurdalnym twierdzeniu prawdy,
chociażby dotyczących firm i ich praktyk marketingowych.

1. Przekaz podprogowy

Trzeba przygotować dowolny film, który ma szansę odnieść
sukces w Sieci – na przykład jestem producentem znanej
przeglądarki – przygotuję webcast na temat mojej przeglądarki
i luk w niej istniejących – umieszczając dodatkowo kilka
klatek o długości trwania 0,5 sekundy, w których będę sugerował,
że produkty konkurencji są gorsze.

Po przygotowaniu promocja takiego filmu jest bardzo prosta
– youtube, dailymotion, z naszego podwórka smog

i oczywiście kilku współpracowników publikuje te filmy.

Żaden portal nie jest obecnie przygotowany na analizę
filmów pod tym względem,

obecne mechanizmy np.: youtube nie są w stanie nawet przeanalizować filmu pod względem legalności, jeżeli obraz zostanie obrócony o 180 stopni – przykład odcinki anime Bleach

2. Licencje, umowy, polityki prywatności
Jestem w trakcie analizy wszystkich dokumentów
dotyczących rejestracji na Facebooku – z niektórych filmów
wynika, że regulamin serwisu jest obwarowany wieloma
warunkami, zastrzegającymi prawo właścicieli serwisu
do rozporządzania

– ale wyniki opublikuję dopiero w następnym tygodniu.

Z resztą, czy ktoś czyta umowy licencyjne, regulaminy serwisów
społecznościowych – nie, skądże, przecież czasu nie mamy
na takie „pierdoły”?

I wiadomo, konkurencja też może się na takie warunki „nabrać”
przy próbach analizy serwisu i rejestracji.

3. Odsprzedaż technologii

Często się zdarza, że firmy pozbywają się swoich technologii,
które albo okazały się niewypałem albo miały okazać się
niewypałem, zawierające z góry ustalone wady projektowe
- np.: obsługujące tylko liczby 32bitowe kontrolki kalendarza.

4. Tworzymy za darmo, nie naprawiamy określonych błędów,
promujemy później komercyjne rozwiązania

a)
- SAMBA i CIFS (implementacja dla Javy)
możecie korzystać z naszych rozwiązań, ale pamiętajcie, że nasza implementacja SSO(Single-Sign On) zawiera błąd związany z bezpieczeństwem, który wyklucza wykorzystanie jej w środowisku produkcyjnym
– prosimy, abyście kupowali rozwiązanie tej firmy

http://jcifs.samba.org/FAQ.html

http://jcifs.samba.org/src/docs/ntlmhttpauth.html

b)
implementacja dostępu do kart kryptograficznych (SunPKCS11 Provider)
oparty w większości na darmowym IAIK PKCS#11 Wrapper,

wprowadzony do Javy w wersji 5 (w przygotowaniu 7), jako istotny dodatek, natomiast
nie rozwijamy i nie dostosowujemy do nowych kart kryptograficznych i urządzeń HSM

Opublikowano Licencja | Dodaj komentarz

Instalacja Tomcat 6 i bibliotek mu towarzyszących w Debian Lenny

Instalacja Tomcat 6 i bibliotek mu towarzyszących w Debian Lenny (wersja 32bitowa z jądrem 2.6.26-2-686) – powód, dopiero w Ubuntu znajdziemy oficjalne paczki z Tomcat 6.

Założenie jest takie, że Tomcat oraz JDK
zostaną zainstalowane z paczek przygotowanych
przez producentów,
(Oracle [niegdyś Sun) JDK)
i Tomcat fundacji Apache

Dla Tomcata wymagane jest zainstalowanie JDK w wersji 5
lub wyższej, stabilną jest 6u20 (1.6.0.20)

0a. Na potrzeby pobrania wszystkich bibliotek
trzeba się będzie zaopatrzyć w strukturę katalogów

mkdir /root/java
cd /root/java

1. Niestety, trzeba skorzystać z wizualnych
przeglądarek, aby pobrać JDK
(wymagana jest obsługa javascriptu)

http://java.sun.com/javase/downloads/widget/jdk6.jsp

i zapisujemy jako

jdk-6u20-linux-i586.bin

2. Pobieramy Tomcat w wersji 6.0.26

wget http://www.apache.net.pl/tomcat/tomcat-6/v6.0.26/bin/apache-tomcat-6.0.26.zip

3. Pobieramy dodatkowy program "Deployer",
którym będziemy się posługiwać z linii poleceń,
do usuwania/wgrywania aplikacji.

wget http://www.apache.net.pl/tomcat/tomcat-6/v6.0.26/bin/apache-tomcat-6.0.26-deployer.zi

4. Tworzymy katalog /opt/java/libs
i przenosimy do katalogu /opt/java/libs instalator
lub go kopiujemy

mkdir -p /opt/java/libs
mv /root/java/jdk-6u20-linux-i586.bin /opt/java/libs

5. Nadajemy uprawnienia do wykonania dla instalatora JDK

chmod +x /opt/jdk-6u20-linux-i586.bin

Należy przy tym pamiętać, że instalator domyślnie
rozpakowuje biblioteki do katalogu, w którym się
aktualnie znajdujemy,
czyli warto przejść do /opt/java/libs

cd /opt/java/libs
./jdk-6u20-linux-i586.bin

Czeka nas długie przewijanie ekranu poprzez przytrzymanie
Enter i czytanie licencji, aż dojdziemy do pytania
"Please enter "yes" or "no".
Do you agree to the above license terms? [yes or no]„

wpisujemy yes i „Enter”

Na zakończenie instalacji też raz Enter
i done

6. To teraz czas sprawdzić, czy java odpowiada

/opt/java/libs/jdk1.6.0_20/bin/java -version

7. Przystępujemy do instalacji serwera Tomcat,
i tak, aby nie zakłócić struktury umieszczania
bibliotek w systemie

mkdir -p /opt/http-servers/j2ee/tomcat
cp /root/java/apache-tomcat-6.0.26.zip /opt/http-servers/j2ee
cp /root/java/apache-tomcat-6.0.26-deployer.zip /opt/http-servers/j2ee
cd /opt/http-servers/j2ee/

apt-get install unzip
unzip /opt/http-servers/j2ee/tomcat

i mamy rozpakowaną dystrybucję serwera

8. Kroki konfiguracyjne,

Tomcat bez Javy, nie ruszy.

cd /opt/http-servers/j2ee/apache-tomcat-6.0.26/bin

i tworzymy skrypt do uruchamiania Tomcata
zawierający wiersze

mkdir -p /root/scripts/j2ee
vim /root/scripts/j2ee/start-tomcat.sh

skrypt:
#!/bin/sh
CATALINA_HOME=/opt/http-servers/j2ee/apache-tomcat-6.0.26
export CATALINA_HOME
JAVA_HOME=/opt/java/libs/jdk1.6.0_20
export JAVA_HOME
$CATALINA_HOME/bin/startup.sh

chmod +x /root/scripts/j2ee/start-tomcat.sh

należy również nadać uprawnienia do wykonywania
dla wszystkich skryptów sh
w katalogu $CATALINA_HOME/bin

chmod 775 /opt/http-servers/j2ee/apache-tomcat-6.0.26/bin/*.sh

i uruchamiamy skrypt
/root/scripts/j2ee/start-tomcat.sh

Powinniśmy otrzymać komunikaty
informujące, że dane zmienne systemowe
są wykorzystywane:


Using CATALINA_BASE:   /opt/http-servers/j2ee/apache-tomcat-6.0.26
Using CATALINA_HOME:   /opt/http-servers/j2ee/apache-tomcat-6.0.26
Using CATALINA_TMPDIR: /opt/http-servers/j2ee/apache-tomcat-6.0.26/temp
Using JRE_HOME:        /opt/java/libs/jdk1.6.0_20
Using CLASSPATH:       /opt/http-servers/j2ee/apache-tomcat-6.0.26/bin/bootstrap.jar

Utworzenie skryptu do zatrzymania serwera

vim /root/scripts/j2ee/stop-tomcat.sh

skrypt:
#!/bin/sh
CATALINA_HOME=/opt/http-servers/j2ee/apache-tomcat-6.0.26
export CATALINA_HOME
JAVA_HOME=/opt/java/libs/jdk1.6.0_20
export JAVA_HOME
$CATALINA_HOME/bin/shutdown.sh

chmod +x /root/scripts/j2ee/stop-tomcat.sh

8a. Testowanie, czy usługa działa
Domyślnie serwer nasłuchuje na wszystkich interfejsach
sieciowych dostępnych dla serwera
na porcie 8080

Przeglądarka, http://adres_ip:8080/

i strona główna Tomcata

To jeszcze teraz przydałoby się spróbować
dowolną aplikację wgrać.

W tym celu uruchamiamy skrypt
/root/scripts/j2ee/stop-tomcat.sh

i przechodzimy do $CATALINA_HOME/conf

cd /opt/http-servers/j2ee/apache-tomcat-6.0.26/conf

i edytujemy plik tomcat-users.xml,

Jest to domyślny sposób przechowywania
listy kont użytkowników,
którymi możemy się posługiwać w ramach serwera.
W tomcat-users.xml również dla danego konta
użytkownika definiujemy role (od 1 do +)
oraz hasło.

Pomiędzy tagi <tomcat-users>
a </tomcat-users>

wstawiamy wiersz

<user username=”zarzadca” password=”twoje_tajne_haslo_1″ roles=”manager”/>

Otwieramy przeglądarkę,
przechodzimy do http://adres_ip:8080/

i klikamy na link Tomcat Manager

lub bezpośrednio

http://adres_ip:8080/manager/html

Jest to typowy sposób uwierzytelniania HTTP BASIC Authentication,
co ciekawe, nie potrzeba dodawać do tomcat-users.xml
wiersza <role rolename=”manager”/>
pomimo takiego wskazania w przypadku niepoprawnego
wprowadzenia danych.

8b. wgrywamy najprostszą aplikację w postaci pliku war
poprzez formularz z sekcji „WAR file to deploy”

10.

Instalujemy pakiet Deployer

I tu zaczynają się schody… chyba

Pakiet Deployer wymaga narzędzia ANT

cd /root/java
wget http://www.apache.net.pl/ant/binaries/apache-ant-1.8.1-bin.tar.gz
cp /root/java/apache-ant-1.8.1-bin.tar.gz /opt/java/libs
cd /opt/java/libs
tar -xf apache-ant-1.8.1-bin.tar.gz
rm apache-ant-1.8.1-bin.tar.gz

czyli posiadamy już ścieżkę do ANTa

/opt/java/libs/apache-ant-1.8.1/bin

więc co należy?

10a. Skrypty, skrypty, skrypty,

vim /root/scripts/j2ee/deployer-tomcat.sh

skrypt:
#!/bin/sh
CATALINA_HOME=/opt/http-servers/j2ee/apache-tomcat-6.0.26
export CATALINA_HOME
JAVA_HOME=/opt/java/libs/jdk1.6.0_20
export JAVA_HOME
ANT_HOME=/opt/java/libs/apache-ant-1.8.1
export ANT_HOME
$ANT_HOME/bin/ant $1 $2 $3 $4 $5

chmod +x /root/scripts/j2ee/deployer-tomcat.sh

10b.

Dodanie pakietu „Deployer” do Tomcata – w tym przypadku
tylko rozpakujemy zadania dla ANT_HOME/lib

[co ważne, nie musi się on znaleźć w katalogu
serwera, natomiast aby utrzymać w miarę
spójną bazę bibliotek dodamy do nowo tworzonego
katalogu deployer w $CATALINA_HOME ]

cd /opt/http-servers/j2ee/apache-tomcat-6.0.26
cp /root/java/apache-tomcat-6.0.26-deployer.zip /opt/http-servers/j2ee/apache-tomcat-6.0.26
unzip apache-tomcat-6.0.26-deployer.zip
mv apache-tomcat-6.0.26-deployer deployer
rm apache-tomcat-6.0.26-deployer.zip
cd ./deployer

10c.

Należy skopiować z katalogu deployer plik zawierający definicje
zadań (tasks), które można będzie wykonać.

cp lib/catalina-ant.jar /opt/java/libs/apache-ant-1.8.1/lib

teraz trzeba przygotować plik build.xml (w naszym przypadku domyślnym
zadaniem jest deploy, czyli wgranie aplikacji)

i uruchomić ANT z linii poleceń,
plik build.xml należy umieścić w tym samym katalogu co nasz skrypt
deployer-tomcat.sh

i wywołać przekazując parametry do wiersza poleceń

1)
-Dusername=login_konta_w_roli_manager
2)
-Dpassword=haslo_konta_w_roli_manager
3)
-DcontextPath=/adres_url_aplikacji

4)
deploy/reload/undeploy (z zależności co chcemy uzyskać)

5)     ten parametr jest tylko wymagany, kiedy będziemy chcieli
załadować aplikację na serwer
-DsrcWAR=sciezka_do_pliku_war

Przykłady:
./deployer-tomcat.sh -Dusername=zarzadca -Dpassword=twoje_tajne_haslo_1 -DcontextPath=/moja_aplikacja deploy -DsrcWAR=/root/java/testowa.war
./deployer-tomcat.sh -Dusername=zarzadca -Dpassword=twoje_tajne_haslo_1 -DcontextPath=/moja_aplikacja undeploy

*********************************

zawartość pliku build.xml

<project name=”Moja aplikacja” default=”deploy” basedir=”.”>

<!–
Tutaj jest okreslana zmienna, z wartości której pobierana jest
ścieżka bezwględna do lokalnego pliku war
–>
<property name=”srcWAR”    value=”"/>

<property name=”contextPath”     value=”/myapp”/>

<property name=”url”      value=”http://localhost:8080/manager”/>
<property name=”username” value=”myusername”/>
<property name=”password” value=”mypassword”/>

<taskdef name=”deploy”    classname=”org.apache.catalina.ant.DeployTask”/>
<taskdef name=”list”      classname=”org.apache.catalina.ant.ListTask”/>
<taskdef name=”reload”    classname=”org.apache.catalina.ant.ReloadTask”/>
<taskdef name=”resources” classname=”org.apache.catalina.ant.ResourcesTask”/>
<taskdef name=”roles”     classname=”org.apache.catalina.ant.RolesTask”/>
<taskdef name=”start”     classname=”org.apache.catalina.ant.StartTask”/>
<taskdef name=”stop”      classname=”org.apache.catalina.ant.StopTask”/>
<taskdef name=”undeploy”  classname=”org.apache.catalina.ant.UndeployTask”/>

<target name=”deploy” description=”Install web application”>
<deploy url=”${url}” username=”${username}” password=”${password}”
path=”${contextPath}” war=”file:${srcWAR}”/>
</target>

<target name=”reload” description=”Reload web application”>
<reload url=”${url}” username=”${username}” password=”${password}”
path=”${contextPath}”/>
</target>

<target name=”undeploy” description=”Remove web application”>
<undeploy url=”${url}” username=”${username}” password=”${password}”
path=”${contextPath}”/>
</target>
</project>

Opublikowano Java | 2 komentarzy

Java w służbie .NET

*************************
Z półki Interop

[    http://www.janetdev.org/    ]

czyli -> implementacja Javy 5 (JDK i JRE) dla .NET
powiedzmy, że jest to odpowiednik J# .NET (wydawanego kiedyś przez Microsoft)

… i jestem w trakcie testów, jak dobrze pójdzie to w ciagu
tygodnia będę mógł mówić o sukcesie w postaci skompilowanego
serwera Jetty,

Zestaw zawiera zarówno biblioteki klienckie, jak i typowe
narzędzia deweloperskie, czyli kompilator javac.

Krótko ujmując – możliwość skompilowania projektów napisanych

w javie (rozumiemy to jako czystą javę bez odwołań do bibliotek natywnych) do kodu rozumianego przez biblioteki .NET

I się zaczęło.

Pobranie JDDK nie nastręczało problemów. Instalacja również,
chociaż konieczność wykorzystania konta z uprawnieniami administracyjnymi, gdy i tak samodzielnie trzeba niektóre kroki wykonać przy instalacji SDK

(np.: ustawienie zmiennej systemowej JANET_INSTALL)

http://www.janetdev.org/ManualJaNETSEInstallation/tabid/91/Default.aspx

Nauczony doświadczeniem nie korzystałem ze ścieżki docelowej
zawierającej spacje … od taka porada, że niektóre narzędzia
słabo sobie z tym radzą.

Folder instalacyjny:
G:\zainstalowane\dotnet\janetse-jddk

Folder z narzędziami typu kompilator (javac)

G:\zainstalowane\dotnet\janetse-jddk\jdk\bin

Instalacja zakończona.

Używanie kompilatora javac bez dodatkowych narzędzi jest mówiąc krótko, czasochłonne. Wybór padł na ANT (ant.apache.org),
jednak jeszcze łatwiej go wykorzystać z poziomu edytorów
takich jak Netbeans czy Eclipse.

Jako, że korzystam na codzień z Netbeans,
został on uruchomiony, stworzony najprostszy projekt,
typu Java Application …
dodanych kilka klas w różnych paczkach (z dotnetowego przestrzeni nazw)

Następny krok: trzeba było stworzyć skrypt dla ANTa,
(prawym klawiszem myszy na projekcie -> New -> Other
-> z listy dostępnych szablonów Other -> Ant Build Script
-> nadanie nazwy)
najprościej stworzyć go w głównym katalogu projektu i
nazwać go np.: build_with_janet.xml

Należało dokonać pewnych modyfikacji,
mianowicie dodać polecenie mkdir
oraz javac

<?xml version=”1.0″ encoding=”UTF-8″?>
<project name=”changeme” default=”all” basedir=”.”>
<target name=”all”>
<mkdir dir=”build/dotnet” />
<javac srcdir=”src”
destdir=”build/dotnet”
executable=”G:\zainstalowane\dotnet\janetse-jddk\jdk\bin\javac”
fork=”true”
compiler=”modern”>
<compilerarg value=”-bam:test.dll”/>
</javac>
</target>
</project>

Trochę na temat składni:

mkdir -> twórz katalog (tworzy rekursywnie)
javac    ->    srcdir – ścieżka do plików źródłowych (domyślnie jest to src w Netbeans)
->    destdir    - ścieżka, gdzie zostaną umieszczone pliki classes, czy efekt kompilacji
->    executable    - ścieżka do kompilatora javac, który jest spoza standardowego jdk
->    fork=”true”    -    wskazanie, że używamy zewnętrznego kompilatora
->    compiler=”modern”    -    wskazanie, że kompilator ma kompilować zgodnie ze standardami kompilatora w wersji co najmniej 1.4
compilerarg ->    dodatkowe parametry kompilatora
->value=”-bam:test.dll” – wskazanie, że kompilator jadev ma utworzyć z wszystkich klas
które znajdzie w destdir bibliotekę dll

W przypadku tak prostego projektu przeszło gładko

czyli należało przełączyć się na zakładkę Files
rozwinąć główne drzewo katalogów,
kliknąć prawym klawiszem myszy na nowo utworzony plik,
Run Target->all

i zachciało mi się kompilować projekt typu jetty
(najprostszy serwer j2ee – http://jetty.codehaus.org/jetty/

Problemy, jakie można obecnie napotkać to:

1)    samemu trzeba pobrać, wygrzebać implementację jsp (np.: ze źródeł Apache Tomcat)
2)    samemu trzeba pobrać mx4j    (na standardzie w zwykłej javie dysponujemy tym mechanizmem,
z przestrzeni nazw javax.managment  -> http://mx4j.sourceforge.net/

a)    i co gorsza, trzeba się było trochę namęczyć, aby wyłączyć BCEL
(też na standardzie używane w Javie) – BCEL to biblioteka służąca
do analizy kodu pośredniego (byte code),
coś ala analizator MSIL służący do generowania szybszych odwołań
do klas, struktur, danych działający poza warstwą Reflection

b)    i co gorsza po raz drugi trzeba było usunąć odwołania do loggera z org.apache.commons.logging

c)    i tak dalej można było by narzekać, nie wspominając o konieczność usunięcia odwołań
do CORBA

3)    gdy już wszystko było przygotowane, kompilowanie się rozpoczęło, trwało, trwało
i naraz kompilator stwierdził

———-
java.lang.reflect.InvocationTargetException: Zgłoszono wyjątek typu ‘java.lang.reflect.InvocationTargetException’.
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.harmony.tools.javac.Compiler.main(Unknown Source)
at org.apache.harmony.tools.javac.Main.compile(Unknown Source)
at org.apache.harmony.tools.javac.Main.compile(Unknown Source)
at org.apache.harmony.tools.javac.Main.main(Unknown Source)
Caused by: System.ArgumentOutOfRangeException: Indeks jest spoza zakresu. Musi mieć wartość nieujemną i mniejszą niż rozmiar kolekcji.
Nazwa parametru: index
w System.Collections.CollectionBase.System.Collections.IList.get_Item(Int32 index)
w Mono.Cecil.Cil.VariableDefinitionCollection.get_Item(Int32 index)
w org.eclipse.jdt.internal.compiler.codegen.CLICodeStream.Stloc(LocalVariableBinding var)
w org.eclipse.jdt.internal.compiler.codegen.CLICodeStream.store(LocalVariableBinding localBinding, Boolean strictfpReq, Boolean valueRequired)
w org.eclipse.jdt.internal.compiler.codegen.CLICodeStream.store(LocalVariableBinding localBinding, Boolean valueRequired)
w org.eclipse.jdt.internal.compiler.ast.LocalDeclaration.generateCode(BlockScope currentScope, CLICodeStream codeStream)
w org.eclipse.jdt.internal.compiler.ast.Block.generateCode(BlockScope currentScope, CLICodeStream codeStream)
w org.eclipse.jdt.internal.compiler.ast.TryStatement.generateCode(BlockScope currentScope, CLICodeStream codeStream)
w org.eclipse.jdt.internal.compiler.ast.Block.generateCode(BlockScope currentScope, CLICodeStream codeStream)
w org.eclipse.jdt.internal.compiler.ast.Initializer.generateCode(BlockScope currentScope, CLICodeStream codeStream)
w org.eclipse.jdt.internal.compiler.ast.ConstructorDeclaration.internalGenerateCode(ClassScope classScope, CLIClassFile classFile)
w org.eclipse.jdt.internal.compiler.ast.ConstructorDeclaration.generateCode(ClassScope classScope, CLIClassFile classFile)
w org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.generateCode(CLIClassFile enclosingClassFile)
w org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.generateCILCode(CompilationUnitScope unitScope)
w org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.generateCode()
w org.eclipse.jdt.internal.compiler.Compiler.process(CompilationUnitDeclaration unit, Int32 i)
w org.eclipse.jdt.internal.compiler.Compiler.compile(ICompilationUnit[] sourceUnits)
w org.eclipse.jdt.internal.compiler.batch.Main.performCompilation()
w org.eclipse.jdt.internal.compiler.batch.Main.compile(String[] argv)
w ??CallMethod(Object , Object[] )
w java.lang.reflect.Method.invoke(Object obj, Object[] args)
at Mono.Cecil.Cil.VariableDefinitionCollection.get_Item(Unknown Source)
at org.eclipse.jdt.internal.compiler.codegen.CLICodeStream.Stloc(Unknown Source)
at org.eclipse.jdt.internal.compiler.codegen.CLICodeStream.store(Unknown Source)
at org.eclipse.jdt.internal.compiler.codegen.CLICodeStream.store(Unknown Source)
at org.eclipse.jdt.internal.compiler.ast.LocalDeclaration.generateCode(Unknown Source)
at org.eclipse.jdt.internal.compiler.ast.Block.generateCode(Unknown Source)
at org.eclipse.jdt.internal.compiler.ast.TryStatement.generateCode(Unknown Source)
at org.eclipse.jdt.internal.compiler.ast.Block.generateCode(Unknown Source)
at org.eclipse.jdt.internal.compiler.ast.Initializer.generateCode(Unknown Source)
at org.eclipse.jdt.internal.compiler.ast.ConstructorDeclaration.internalGenerateCode(Unknown Source)
at org.eclipse.jdt.internal.compiler.ast.ConstructorDeclaration.generateCode(Unknown Source)
at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.generateCode(Unknown Source)
at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.generateCILCode(Unknown Source)
at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.generateCode(Unknown Source)
at org.eclipse.jdt.internal.compiler.Compiler.process(Unknown Source)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Unknown Source)
at org.eclipse.jdt.internal.compiler.batch.Main.performCompilation(Unknown Source)
at org.eclipse.jdt.internal.compiler.batch.Main.compile(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)

Mi co prawda nie przeszła ochota na testowanie tego narzędzia,
ale jeszcze gwoli ścisłości – dokumentacja dostępnego api
dla tej wersji JRE/JDK

-> http://janetdev.org/janetse/1.5/api/index.html

Opublikowano Interop | Dodaj komentarz

Biuletyn numer 2

Z półki web developera

1.
Web Developer Helper dla IE6 -> IE8
[    http://projects.nikhilk.net/WebDevHelper    ],
czyli odpowiednik naszego ulubionego narzędzia Firebuga
Warto przeczytać readme – chociażby dla samego nazewnictwa,
testowałem pod IE8 i sprawuje się naprawdę solidnie,
wymaga zainstalowanego środowiska .NET 2.0
jeżeli chodzi o IE9 to już właściwe narzędzie zawarli
samy twórcy w przeglądarce ;)

Aby dostać się do naszego „FireIE” lub jak kto woli „IEBuga” :p
-> Narzędzia -> Paski Eksploratora -> Web Development Helper

Jako console.log wykorzystywany jest window.debugService.trace
natomiast można sprawdzać zawartość obiektów poprzez
window.debugService.inspect – wywołane zostanie dodatkowe okno
z grafem obiektu

co do sprawdzania żądań i odpowiedzi z serwera
(HTTP -> Enable HTTP logging) i po wywołaniu jakiegoś skryptu
można sprawdzać klikając dwukrotnie na danym zapytaniu
zostanie wyświetlone dodatkowe dodatkowe okno,
odpowiedź z serwera jest przedstawiana albo w formie
tekstowej albo szesnatkowej.

w ustawieniach narzędzia można określić, do jakich typów plików
odwołania mają być rejestrowane.

Jakby to kogoś zainteresowało, twórca tego narzędzia stworzył
Script# (kompilator C# do javascriptu)
-> darmowe narzędzie, wykorzystywane chociażby przez … Microsoft
w ich systemach live.com (w załączniku listu dowód -> windowsLiveHotmail.jpg).

2.
IE Compat VHD – czyli IE6, IE7, IE8 w maszynie wirtualnej XP lub Vista
- niestety wymaga do pracy Virtual PC 2007
[    http://www.microsoft.com/downloads/details.aspx?FamilyId=21EABB90-958F-4B64-B5F1-73D0A413C8EF&displaylang=en    ]

Kolejnym ważnym szczegółem jest to, że:
1)    co 4 miesiące wydawana jest nowa wersja – ćwicz cierpliowość z wujkiem Balmerem
- ostatnio została opublikowana 30 marca

2)    domyślnie w systemach XP (pod Vistą nie sprawdzałem) jest wyłączona możliwość
„Dodaj/Usuń programy”, ale rozwiązanie jest proste
a)    Start->Run->regedit
b)    Przechodzimy do klucza rejestru HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Uninstall
c)    W tej gałęzi zmieniamy wartość NoAddRemovePrograms zmienić na 0 (dwa razy klikamy na ten klucz i wpisujemy w „Value Data” 0)

Dla ścisłości (Kopiuj, Wklej ) działa między maszyną wirtualizowaną a naszym systemem ;)

3.
Komodo Edit
[    http://www.activestate.com/komodo_edit/downloads/    ]
- darmowa wersja Komodo IDE bez zdolności do synchronizowania kodu
(no cóż, nikt nie mówił, że wszystko za darmo trzeba dostać)

a)    naprawdę solidne podpowiadanie składni php, budowanie podpowiadania składni
dla dajmy na to, Zend Framework na moim jednordzeniowcu pod Ubuntu trwało
z dwie minuty, na Windzie + trzy rdzeniowcu trwało minutę
b)    solidne podpowiadanie składni dla javascript, można własnoręcznie
przygotować podpowiadanie składni -> (plik xml),
chociaż ma już wbudowane podpowiadnie dla ext 3.0
czy jquery (niestety 1.3.2)
c)    obsługa innych języków, np.: python
d)    możliwość samodzielnego rozszerzenia możliwości edytora z wykorzystaniem javascriptu ;)

Warto po uruchomieniu pomajstrować przy ustawieniach samego edytora
(kodowania znaków, tabulatory kontra spacje itd)
(Edit -> Preferences)

oraz wyłączyć rozszerzenia do obsługi innych języków niż są nam potrzebne
Tools -> Addons -> Extensions

oraz wtyczki (Addons), które pobierze z domyślnej instalacji …. Firefoxa

Tak, jest to oparty na silniku Gecko edytor.

*************************
Z półki Interop

1.
[    http://www.janetdev.org/    ]

czyli -> implementacja Javy 5 (JDK i JRE) dla .NET
powiedzmy, że jest to odpowiednik J# .NET (wydawanego kiedyś przez Microsoft)

… i jestem w trakcie testów, jak dobrze pójdzie to w ciagu
tygodnia będę mógł mówić o sukcesie w postaci skompilowanego
serwera Jetty,

Zestaw zawiera zarówno biblioteki klienckie, jak i typowe
narzędzia deweloperskie, czyli kompilator javac.

Krótko ujmując – możliwość skompilowania projektów napisanych w javie
(rozumiemy to jako czystą javę bez odwołań do bibliotek natywnych)
do kodu rozumianego przez biblioteki .NET

2.
Budowanie aplikacji java z użyciem javascriptu, xml, json

[    http://sourceforge.net/projects/vexi/    ]

została napisana również wtyczka do Eclipsa
[    http://vexi.sourceforge.net/VexiDev    ]

3. Narzędzia do wykrywania/konwersji kodowania znaków
w plikach tekstowych

Enca [    http://gitorious.org/enca)    ]
lub chardet [    http://chardet.feedparser.org/    ]

Jestem w trakcie testów tego pierwszego narzędzia

4. Narzędzia gnu dla Windy

No cóż, mamy do wyboru:

a)    GnuWin32
[    http://gnuwin32.sourceforge.net/     ]
[    http://getgnuwin32.sourceforge.net/    ]
Polecam instalator GetGnuWin32, około 30 minut z pobraniem wszystkich
pakietów, ale nie trzeba się męczyć z pobieraniem wszystkich narzędzi)

b)    SFU (Services for Unix) / Interix
+ dodatkowe pakiety/programy dostępne tutaj
[    http://www.suacommunity.com/tool_warehouse.aspx

Co do samego Interixa, próbowałem kiedyś skompilować Debiana
pod Interixa

[    http://www.debian-interix.net/

i powiem jedno -> nie jest to klik&play

Wadą tak uruchamianego Debiana jest ... konieczność używania
głównego konta administratora, również w systemach serwerowych.

c)    coLinux i oparte na nim andLinux

[    http://www.colinux.org/
[    http://www.andlinux.org

czyli jądro linuksa dla Windows (coLinux)
i jego wydanie oskryptowane z Ubuntu (andLinux)

generalna zasada -> dużo co prawda do oskryptowania i konfiguracji,
ale potężne narzędzia tak mają.

d)    Cygwin
[    http://www.cygwin.com/    ]
Długa historia, dużo testów,
chociaż podobnie jak przy instalacji SFU (Interix),
zostajemy poproszeni o decyzję – czy system plików
to ma wspierać rozróżnianie wielkości liter czy też nie

**************************

Coś dla ciekawskich, czyli głównie administratorów i takich nudziarzy
jak autor tego biuletynu
- polecam Wam wchodzić przez linuxa, nie przez windę

http://www.spamhaus.org/xbl

Lista komputerów (według IP), do których się ktoś włamał
- razem z opisanym typem zagrożenia.

Opublikowano Podsumowania | Dodaj komentarz

Biuletyn uno

Odpowiedź Javy na XAML (czyli tworzymy GUI za pomocą XML)
(informacyjnie -> pierwszym projektem, który wykorzystywał
XML do tworzenia interfejsów aplikacji „okienkowych” był GTK Glade ;) )

http://pivot.apache.org/index.html

*************************

Programowanie w języku wysokopoziomowym (o składni javy lub c#),
który jest kompilowany do kodu natywnego – Vala (również pod Windę ;) )
Są to tak naprawdę biblioteki GTK ->

Jeżeli chodzi o podpowiadanie składni polecam ze swoich doświadczeń
(dla Ubuntu)

http://yorba.org/valencia/ (czyli tak naprawdę paczkę skryptów dla systemowego gedita
-> rozwijane na podstawie Vala Toys for gedit )

na początek polecam Wam zapoznanie się ze składnią,
typami danych:

http://www.vala-project.org/doc/vala-draft/

*****************

i mój konik – czyli interop:

Zestaw informacji o dostępnych technologiach open-source współpracujących
z technologiami Microsoft

http://www.interoperabilitybridges.com/Projects

oraz klasy w php5 czy javy do obsługi formatów z Office 2007
(jest oczywiście wersja darmowa i płatna, natomiast do generowania i odczytu
podstawowych dokumentów wystarcza wersja darmowa – na licencji LGPL)

http://www.phpdocx.com

http://www.javadocx.com

lub tak jak wskazują w interoperabilitybridges można użyć zupełnie
darmowych klas Apache POI wykorzystywanych chociażby w OpenOffice.

****************

Implementacja PHP 5 w javie

http://quercus.caucho.com/

http://www.caucho.com/resin-3.0/quercus/

- pytanie po co? skoro jest perl, python, groovy, scala,
to czemu php nie mogło się pojawić,

osobom, które chcą zapoznać się z językiem java polecam
przejrzenie źródeł np.: pod kątem implementacji niektórych metod
czy też operacji na tablicach – naprawdę przydatna kopalnia wiedzy

Domyślnie na serwerze Glassfish musicie wyłączyć tzw. Security Manager
(zaznaczam, tylko w warunkach testowych !), aby poprawnie działało,

o warunkach produkcyjnych możemy porozmawiać później ;)

***************

Darmowe biblioteki dla Javy do obsługi SFTP, SSH

http://www.zehon.com/downloads.htm

Testowane w warunkach produkcyjnych ;)

Opublikowano Podsumowania | Dodaj komentarz

Licencja i polityka prywatności

Prawa autorskie są zastrzeżone.

Publikowane tutaj informacje można wykorzystywać
w środowisku produkcyjnym, natomiast nie wolno
publikować ich we własnych dokumentach
ani przygotowywać materiałów szkoleniowych
i dokumentacji technicznych na ich podstawie
bez mojej zgody.

Nie ponoszę odpowiedzialności za treść
publikowanych komentarzy i zastrzegam sobie
prawo do ich usuwania w przypadku,
gdy naruszą obowiązujące normy prawne,
w tym dobre imię osób trzecich.

Karol

Opublikowano Licencja | Dodaj komentarz

Witaj świecie

Tak się zaczyna przygoda z blogowaniem,

w języku ojczystym o sprawach oczywistych i tych mniej banalnych, związanych z karierą, rozrywką i kilkoma dodatkowymi zajęciami.

Opublikowano Strona startowa | 1 komentarz