Apr 27 2010

Podpisz petycje

Polscy programisci i handlowcy sa dyskryminowani w uslugach takich jak Google Android Market i Google Merchant Center. Powstala na szczescie petycja, ktora mozesz podpisac i w ten sposob zaprotestowac przeciwko tym praktykom. Szanuje Google za mnogosc profesjonalnych i darmowych uslug, ale kwestia AM i MC powinna byc uregulowana.

Platne aplikacje na Android Market


Apr 15 2010

RemotePad i RCServer w wersji Beta

Udalo mi sie w koncu znalezc troche czasu i doprowadzic do ladu RemotePad i RCServer, a przynajmniej do wersji Beta, ktora nie zniszczy urzadzen. Zart. ;)

RemotePad

Program umozliwiajacy zdalne sterowanie komputerem z telefonu wyposazonego w modul Wi-Fi – narazie tez, wyposazonego w system Android – jest juz dostepny w Android Market, mozna go searchnac.

Na dzien dzisiejszy dziala touchpad, po czesci klawiatura (myslalem, ze bedzie to prostsze ;) ), przeszukiwanie sieci i automatyczne dodanie jezeli serwer dziala na domyslnych portach.

Juz wkrotce nastepna wersja z dzialajacym wskaznikiem. Fajny bajer do prowadzenia prezentacji. Nic jednak by nie dzialalo, jakby nie robot instalowany na komputerze, ktorym chcemy sterowac.

RCServer

Serwer umozliwia zdalne sterowanie komputerem z urzadzen przenosnych podlaczonych do sieci WLAN, takich jak nasz smartphone z Androidem. Serwerek napisany w Javie, jest raczej multiplatformowy, a przynajmniej dziala na Linuxie, Windowsie i Mac OS Xie (teoretycznie :) ).

Tutaj do pobrania najswiezsza wersja RCServera

No i QR kod RemotePad’a do zeskanowania


Apr 12 2010

SVN reconnect po przeinstalowaniu systemu

Jezeli juz z jakiegos dziwnego powodu, przeinstalujemy Linuxa, to pojawia sie kwestia ponownego podlaczenia uslug do juz istniejacych danych. Tak jest na przyklad z repo SVN, i tu nalezy …

Zainstalowac subversion

czlowiek@maszyna:~$ sudo apt-get install subversion

I teoretycznie tyle :) .
Jezeli zas, mamy problem z prawami – taki jakis Permission denied – to nalezy …

Grepnac proces SVNa i namierzyc wlasciciela (tu czlowiek)

czlowiek@maszyna:~$ ps faux | grep svnserve
czlowiek      29481  0.0  0.0   3336   800 pts/0    S+   20:45   0:00      \_ grep svnserve

Zmienic ownera repo (tu sciezka /home/svn/)

czlowiek@maszyna:~$ cd /home/svn
czlowiek@maszyna:/home/svn$ sudo chown czlowiek: -R *

I to raczej wystarczy. Mozna oczywiscie bawic sie z Apache, instalowac jakies moduly, itp… ale po co, jezeli chcemy skorzystac jedynie z Eclipse?


Mar 19 2010

XML-RPC, wylaczenie gzipa w Apache dla IE6

W aplikacjach klient-serwer z konektem po XML-RPC, natrafimy na problem komunikacji, gdy klient uzywa przegladarki IE6. Wiec. Jezeli gzip’em sterujemy bezposrednio z Javki to przy generowaniu response musimy go wylaczyc. Jezeli Tomcat nakryty jest Apachem to nastepujaca dyrektywa jest konieczna aby klient stworzony, na przyklad we Flashu mogl poprawnie odebrac odpowiedz.

BrowserMatch \bMSIE\s6 no-gzip gzip-only-text/html

Oczywiscie wlaczamy mod deflate w Apache


Mar 19 2010

JS Call Later

Taki prosty skrypcik, umozliwiajacy wywolanie metody JavaScript z czasowym opoznieniem. Przydatne gdy chcemy na przyklad wyswietlic plywajacego diva 5 sekund po zaladowaniu strony, albo ukryc elementy widoku po 5 sekundach :)

Utworzmy klase obiektu dbajacego o wywolanie okreslonej metody po zadanym czasie a nastepnie sie zniszczy

loCallTimer = function(id, func, args, time)
{
	if (typeof(id) == "undefined") {
		return;
	}
	this.id = id;
	this.func = func || null;
	this.args = args || null;
	this.time = time || 1500;
	this.timer = null;
};
 
loCallTimer.prototype.suicide = function()
{
	this.stopTimer();
	eval("window.ct_" + this.id + " = null;");
};
 
loCallTimer.prototype.onTime = function()
{
	if (typeof(this.args) == "undefined" || this.args == null || this.args.length == 0) {
		this.func();
	} else {
		this.func.apply(this.func, this.args);
	}
	this.suicide();
};
 
loCallTimer.prototype.runTimer = function()
{
	this.stopTimer();
	this.timer = window.setTimeout("window.ct_" + this.id + ".onTime();", this.time);
};
 
loCallTimer.prototype.stopTimer = function()
{
	if (this.timer != null) {
		window.clearTimeout(this.timer);
		this.timer = null;
	}
};

Wyzwalacz

function callLater(func, args, time) {
    var id = (new Date()).getTime();
    var ct = eval("window.ct_" + id + " = new loCallTimer(" + id + ");");
    ct.func = func;
    ct.args = args;
    ct.time = time;
    ct.runTimer();
    return ct;
};

Testujemy
czytaj dalej