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


Mar 1 2010

RemotePad

Android jest coraz bardzie popularny, nie tylko dzieki gigantowi Google czy tez dziesiatkom firm, ktore wypuszczaja co chwile nowe modele smartow wlasnie z Androidem, ale tez dzieki programistom, ktorzy tworza na niego oprogramowanie. Postanowilem miec swoj malutki wklad w to przedsiewziecie, stad tez pomysl na RemotePad – maly programik umozliwiajacy zdalne sterowanie komputerem za pomoca sieci WiFi czy Bluetooth. Ok, po prostu touchpad, klawiatura, gamepad, pointer czy tez sterowanie mediami, np. VLC.

Wiem, ze konkurencja – Gmote, mkRemote czy RemoteDroid, ktory wlasnie zasial we mnie tworcze ziarenko – jest duza, ale sprobuje ;) . Ponizej pare screenow z powstajacej aplikacji.




Niedlugo do sciagniecia wersja beta z dzialajacym touchpadem.


Dec 2 2009

Flex i klasy z “wieloma” konstruktorami

Jako, ze AS3 nie umozliwia przeladowania konstruktorow w klasach, malo tego, ukrywa konstruktory klas dziedziczonych, czym bardzo utrudnia tworzenie zlozonych obiektow, postaramy sie to obejsc, metoda “kontrolowany multi injection”.

Zalozmy, ze mamy klase Employee dziedziczaca po Person, ktora chcemy inicjowac na dwa sposoby:

wstrzykiwanie statyczne

public function Employee(name: String, surname: String, reward: uint = 0)
{
	super(name, surname);
	this._reward = reward;
}
...
var employee: Employee = new Employee("Jan", "Kowalski", 100);

wstrzykiwanie obiektowe

public function Employee(person: Object, reward: uint = 0)
{
	super(person.name, person.surname);
	this._reward = reward;
}
...
var employee: Employee = new Employee( { name : "Jan", surname : "Kowalski" }, 100);

Co musimy zrobic aby klasa Employee umozliwiala obydwie metody inicjacji? Przypomnij sobie jak wyglada obiekt Array. Masz? Zrobimy podobnie.

kontrolowany multi injection

public function Employee(...args)
{
	var name: String;
	var surname: String;
	var l: uint = args.length;
	if (l == 1 && (args[0] is Object)) {
		name = args[0].name;
		surname = args[0].surname;
	} else if (l == 2 && (args[0] is String) && (args[1] is String)) {
		name = args[0];
		surname = args[1];
	}
	if (name && surname) {
		super(name, surname);
	} else {
		throw new Error("Invalid arguments.");
	}
}

Czyz to nie “Multiple Constructors”? Prawie profesjonalnie ;)


Nov 28 2009

Ubuntu Quickly – szybkie programowanie w Ubuntu

Updated: 17.10.2010

quickly-logoCzym jest Ubuntu Quickly i w czym moze sie nam przydac? Na pierwsze pytanie postaram sie odpowiedziec, jednak na drugie, musimy odpowiedziec sobie sami. Biorac pod uwage bogactwo i roznorodnosc jezykow programowania, programowanie w Linux nie powinno sprawiac problemu, jednak autorzy Quickly twierdza, ze nie jest to latwe i przyjemne, wiec postanowili dac nam cos special – platforme, ktora bedzie programowac za nas ;)

Osobiscie uwazam, ze osoba, ktora zna na poziomie przynajmiej srednio-zaawansowanym jezyk C i C++, nauczy sie kazdego nowego jezyka w przeciagu 1 tygodnia. Moze nie bedzie perfekcyjnie znac wszystkich mozliwosci danego API, ale nie ma to wiekszego znaczenia, liczy sie tu umiejetnosc poznawcza. Wiec poczatkujacym programistom, polecam zajac sie w szczegolnosci C/C++ – nawet jezeli sprawia to trudnosci – i to najlepiej programujac w terminalu ;)

Wracajac jednak do Ubuntu Quickly, jest to system automatyzujacy proces tworzenia, edycji, az w koncu pakietowania i publikacji tworzonych aplikacji. Jestem otwarty na wszelkie nowosci, ale z doswiadczenia wiem, ze nie wszystko zloto co sie swieci. Mimo to, musze przyznac, ze Quickly ma racje bytu i moze niedlugo bedzie cenionym narzedziem. Przekonajcie sie jednak sami.

1. Instalujemy quickly

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

2. Tworzymy nowy projekt

czlowiek@maszyna:~$ mkdir -p ~/Work/quickly
czlowiek@maszyna:~$ cd ~/Work/quickly
czlowiek@maszyna:~/Work/quickly$ quickly create ubuntu-application helloworld

quickly utworzy nowy projekt o nazwie helloworld, skompiluje i uruchomi szablonowy program

quickly-helloworld

Teraz mozemy juz przejsc do edycji, na poczatek…

3. Zmieniamy wyglad szablonowej formy

czlowiek@maszyna:~/Work/quickly$ cd helloworld
czlowiek@maszyna:~/Work/quickly/helloworld$ quickly design

quickly-glade-helloworld

4. W ten sposob zaczynamy edycje kodu programu

czlowiek@maszyna:~/Work/quickly/helloworld$ quickly edit

Wszystkie skladowe programu otworza sie w domyslnym edytorze – tu gedit.
quickly-edit-helloworld

5. Odpalamy zmodyfikowany program

czlowiek@maszyna:~/Work/quickly/helloworld$ quickly run

Nie pozostaje juz nic innego, jak wygenerowac paczke programu.

6. Instalujemy wymagane pakiety

czlowiek@maszyna:~/Work/quickly/helloworld$ sudo apt-get install devscripts

7. Generujemy deb’a

czlowiek@maszyna:~/Work/quickly/helloworld$ quickly package

Zapraszam do testowania. No i jeszcze maly tutorial

czlowiek@maszyna:~$ quickly tutorial
ERROR: tutorial command must be followed by a template and no template was found on the command line.
Candidates template are: ubuntu-pygame, ubuntu-application
Aborting.

Jezeli wyswietli sie powyzszy blad, oznacza to, ze jestesmy poza katalogiem projektu.
Wracamy do uprzednio utworzonego projektu helloworld

czlowiek@maszyna:~$ cd ~/Work/quickly/helloworld
czlowiek@maszyna:~/Work/quickly/helloworld$ quickly tutorial

Nov 8 2009

Raportowanie bledow strony klienta

Back-end aplikacji webowej, mozna kontrolowac przegladajac raporty i logi, lecz nijak ma sie to do front-endu wyswietlanego po stronie klienta. Nie dowiemy sie czy i kiedy wystapi blad, dopoki jakis nawiedzony klient nie zwymysla nam do sluchawki, chyba, ze mamy 105 srodowisk testowych, na ktorych mozemy sprawdzic kazda funkcjonalnosc aplikacji.

I tutaj nasuwa sie pytanie, czy nie ma innej mozliwosci?
Sa, a to jedna z nich, dzieki asynchronicznym zapytaniom, raport o bledzie klienta trafi do back-endu, i zapisany zostanie, do bazki czy pliku logow.

Przechwytywanie bledow

1. Dodajemy wymagane pliki bibliotek

<script type="text/javascript" src="http://www.losoft.org/blog/download/ajax/loajax_v1.1.js"></script>

plik mozna pobrac z dzialu Download, albo zamiast klasy loAJAX, linkujemy wlasnego wrappera ajax.

2. Tworzymy metode akcyjna zdarzenia window.onerror

// on/off powiadomienie klienta o bledzie
var suppressErrors = true;
// nowy obiekt ajax
var ajax = new loAJAX(this, "http://www.losoft.org/blog/examples/ajax/errorreport.php", null, AJAX_POST);
// akcja zdarzenia onerror
function errorReport(msg, url, lineNumber)
{
	ajax.reset();
	ajax.addParam("msg", msg);
	ajax.addParam("url", url);
	ajax.addParam("lineNumber", lineNumber);
	ajax.request();
 
	if (suppressErrors) {
		return true;
	}
	alert("Error occurred: " + msg + "\nURL: " + url + "\nLine Number: " + lineNumber);
};

3. Podpiecie akcji

window.onerror = errorReport;

Jak mamy juz gotowa metode, to teraz … czytaj dalej