Nov
3
2009
Zajmiemy sie dzisiaj tworzeniem prostej aplikacji na platforme Android i uruchomimy ja na naszym Era G1. Jezeli nie masz jeszcze skonfigurowanego srodowiska, to pora poczytac, jak skonfigurowac Android SDK na systemie Ubuntu.
Tworzymy aplikacje HelloWorld
1. Podlaczamy Era G1 do komputera za pomoca kabla USB
2. Wlaczamy debugowanie przez USB w naszym Androidzie
Wybieramy Menu->Ustawienia->Aplikacje->Programowanie a nastepnie zaznaczamy opcje Debugowanie USB

3. Uruchamiamy Eclipse i przechodzimy do widoku Java
4. Tworzymy nowa aplikacje
Wybieramy File->New->Project…, rozwijamy galaz Android, zaznaczamy Android Project i naciskamy Next

5. Wypelniamy formularz New Android Project
Wpisujemy nazwe projektu HelloWorld, nastepnie w grupie Build Target wybieramy Android 1.5 SDK. Teraz uzupelniamy wlasciwosci,
w polu Application name wpisujemy HelloWorld,
w polu Package name wpisujemy rewers naszej domeny, np. org.losoft.android,
w polu Create Activity wpisujemy wyswietlana nazwe skrotu do aplikacji.
Na koniec klikamy Finish.

6. Kompilujemy aplikacje
Wybieramy Project->Clean…
7. Uruchamiamy HelloWorld na Era G1
Jezeli telefon jest poprawnie podlaczony do komputera, to jest rowniez widoczny w DDMS.
Aby uruchomic aplikacje klikamy przycisk Run->Run, w wyswietlonym dialogu

zaznaczamy Android Application i klikamy OK, po chwili w naszym telefonie powinien wyswietlic sie czarny ekran aplikacji z napisem Hello World, HelloWorld!.

That’s it. W menu pojawi sie nowa aplikacja,

ktora usuwamy z telefonu za pomoca standardowego narzedzia Zarzadzaj aplikacjami

brak komentarzy | tagi: Android, hello world, programowanie | wpis w Android, Android
Nov
3
2009
Poprzedni post prawil o screenshotach z Androida, wiec jako, ze jestem w temacie, wroce dzisiaj do SDK i przedstawie jak zainstalowac i skonfigurowac srodowisko Eclipse/DDMS, aby utworzyc prosta aplikacje na Androida.
Na poczatek …
1. Pobieramy Eclipse
2. Pobieramy Android SDK
3. Instalujemy Sun Java JDK
czlowiek@maszyna:~$ sudo apt-get install sun-java6-jdk
4. Wypakowujemy paczke z Android SDK do katalogu /home/czlowiek/Programy/sdk/android
5. Wypakowujemy Eclipse do katalogu /home/czlowiek/Programy/eclipse
6. Uruchamiamy Zacmienie
czlowiek@maszyna:~$ ~/Programy/eclipse/eclipse

7. Instalujemy ADT Plugin (tutaj wersja aktualizowana)
Otwieramy Help->Software Updates…, wybieramy zakladke Available Software, naciskamy przycisk Add Site… i w polu Location wprowadzamy nastepujacy adres url
http://dl-ssl.google.com/android/eclipse/
Po OK’u zaznaczamy nowo dodany element i naciskamy Install…

Gdy wszystko zostanie zainstalowane uruchamiamy ponownie Eclipsa i …
8. Konfigurujemy DDMS’a
Wybieramy Window->Open Perspective->Other…,

zaznaczamy DDMS i klikamy OK. Powinnismy miec podobny widok

9. Podlaczamy Android SDK
Klikamy Window->Preferences, wybieramy zakladke Android i ustalamy sciezke do uprzednio rozpakowanego SDK /home/czlowiek/Programy/sdk/android

To juz koniec, srodowisko jest juz /kompletne/ i /skonfigurowane/. Teraz mozemy przystapic do napisania naszej pierwszej aplikacji.
brak komentarzy | tagi: Android, instalacja, programowanie | wpis w Android, Android
Oct
15
2009
Po tym jak napisalismy i uruchomilismy nasz programik helloworld, mozemy teraz przejsc do bardziej ciekawych rzeczy. Na rozgrzewke proponuje pare watkow. Naszymi bohaterami beda, zbieracze zbierajacy ziarno z pola i znoszacy je do spichlerza.
Czym jest watek? Nie wiem jak w innych systemach, ale w unixach jest to proces, wykonywany w watku glownym, ktory jest procesem
. Dobrze, jak juz wiemy co to jest watek to przejdziemy dalej.
Tworzymy plik programu
czlowiek@maszyna:~$ nano seeds.c
Dolaczamy pliki naglowkowe
#include <stdio.h>
#include <string.h>
#include <pthread.h>
Tworzymy globalne przechowywacze oraz strukture wlasciwosci zbieracza
int grain; // ziarno na polu
int granary; // ziarno w spichlerzu
// struktura wlasciwosci zbieracza
struct collector
{
char name[32]; // nazwa zbieracza
int seeds; // ilosc zebranych ziaren
int performance; // wydajnosc
};
I funkcje watku zbieracza – bedzie wywolywana podczas kazdego utworzenia
void* collect_seeds (void* collector_data)
{
// pobranie danych zbieracza
struct collector *data;
data = (struct collector *) collector_data;
// zebranie ziarna
int collected;
collected = data->performance;
if (collected <= grain) {
grain = grain - collected;
} else {
collected = grain;
grain = 0;
}
// aktualizacja danych zbieracza
data->seeds = data->seeds + collected;
printf ("%s zebral %i\n", data->name, collected);
// zwrocenie ilosci zebranych ziaren
return (void*) collected;
}
A teraz watek glowny
int main (int argc, char *argv[])
{
// ustalenie ilosci ziarna
if (argc == 2 && atoi(argv[1]) > 0) {
grain = atoi(argv[1]);
}
if (grain == 0)
grain = 1000;
granary = 1; // nie wymietli wszystkiego ; )
// mieszadlo liczb losowych
srand (time (0));
// ustalanie danych zbieraczy
struct collector collector1;
strncpy (collector1.name, "Dziwigor", sizeof (collector1.name) - 1);
collector1.seeds = 0;
collector1.performance = rand() % 10 + 1; // losowanie wydajnosci
struct collector collector2;
strncpy (collector2.name, "Niesiebud", sizeof (collector2.name) - 1);
collector2.seeds = 0;
collector2.performance = rand() % 10 + 1;
printf ("Ziarno na polu: %i ziaren\n", grain);
printf ("Ziarno w spichlerzu: %i ziaren\n", granary);
printf ("Zaczely sie zniwa\n\n");
int collected_seeds;
// wskazniki do watkow zbieraczy
pthread_t thread1;
pthread_t thread2;
// petelka dopoki nie zostanie zebrane cale ziarno
while (grain > 0) {
Do tej pory luzik wszystko wiadomo, tworzenie i ustalanie wartosci zmiennych, no i teraz dochodzimy do najwazniejszego elementu programiku – wyzwalanie watkow
Utworzenie watku
// utworzenie watku Dziwigora
pthread_create (&thread1, NULL, collect_seeds, (void*)&collector1);
Pobranie danych z watku
// pobranie zebranych ziaren
pthread_join (thread1, (void*) &collected_seeds);
“Przesypanie” ziarna do spichlerza, i tak w kolko, dopoki ludki nie zbiora wszystkiego
// aktualizacja spichlerza
granary = granary + collected_seeds;
pthread_create (&thread2, NULL, (void*) collect_seeds, (void*)&collector2);
pthread_join (thread1, (void*) &collected_seeds);
granary = granary + collected_seeds;
printf ("Pozostalo: %i ziaren\n", grain);
}
printf ("\nZniwa zakonczone\n");
printf ("%s zebral %i\n", collector1.name, collector1.seeds);
printf ("%s zebral %i\n", collector2.name, collector2.seeds);
printf ("Ziarno na polu: %i ziaren\n", grain);
printf ("Ziarno w spichlerzu: %i ziaren\n", granary);
}
Jezeli skonczylismy pisac kod, to kompilujemy programik
czlowiek@maszyna:~$ gcc -o seeds seeds.c -pthread
za pomoca parametru -pthread informujemy kompilator aby dolaczyl obpowiednie biblioteki, jak tego nie zrobimy to sofcik oczywiscie nie skompiluje sie.
Uruchamiamy programik
czlowiek@maszyna:~$ ./seeds 100
Ziarno na polu: 100 ziaren
Ziarno w spichlerzu: 1 ziaren
Zaczely sie zniwa
Dziwigor zebral 5
Niesiebud zebral 6
Pozostalo: 89 ziaren
Dziwigor zebral 5
Niesiebud zebral 6
Pozostalo: 78 ziaren
...
Dziwigor zebral 5
Niesiebud zebral 6
Pozostalo: 1 ziaren
Dziwigor zebral 1
Niesiebud zebral 0
Pozostalo: 0 ziaren
Zniwa zakonczone
Dziwigor zebral 46
Niesiebud zebral 54
Ziarno na polu: 0 ziaren
Ziarno w spichlerzu: 101 ziaren
Gdy widzimy cos podobnego to odnieslismy kolejny sukces
.
Tutaj wersja dla niecierpliwych:
Pobierz zrodlo i/lub binarke
brak komentarzy | tagi: C/C++, Linux, programowanie | wpis w C/C++, Programy
Oct
13
2009
Wstep do programowania C/C++ w Linuxie zaczniemy standardowo od programiku helloworld.
Przygotowujemy srodowisko
czlowiek@maszyna:~$ sudo apt-get install build-essential
i to juz wystarczy aby napisac prosty programik w C.
Generujemy kod programiku
czlowiek@maszyna:~$ nano helloworld.c
#include <stdio.h>
int main (int argc, char *argv[])
{
printf ("Hello World!\n");
return 0;
}
Kompilujemy programik korzystajac ze standardowego gcc (gcc [opcje] plik)
czlowiek@maszyna:~$ gcc -o helloworld helloworld.c
Uruchamiamy programik
czlowiek@maszyna:~$ ./helloworld
Hello World!
Niama. To teraz C++
Generujemy kodzik
czlowiek@maszyna:~$ nano helloworld.cpp
#include <iostream>
int main (int argc, char *argv[])
{
std::cout << "Hello World!" << std::endl;
return 0;
}
Kompilujemy korzystajac tym razem z g++ (g++ [opcje] plik)
czlowiek@maszyna:~$ g++ -o helloworld_c++ helloworld.cpp
Uruchamiamy programik
czlowiek@maszyna:~$ ./helloworld_c++
Hello World!
cool. To pobawmy sie.
Tworzymy plik viewparams.c
czlowiek@maszyna:~$ nano viewparams.c
i wstawiamy to
#include <stdio.h>
int main (int argc, char *argv[])
{
printf ("argc = %d\n", argc);
int i;
for (i = 0; argv[i]; i++) {
printf("argv[%d]", i);
printf(" = %s\n", argv[i]);
}
return 0;
}
Kompilujemy i uruchamiamy programik z parametrami
czlowiek@maszyna:~$ gcc -o viewparams viewparams.c
czlowiek@maszyna:~$ ./viewparams parametr1 parametr2 parametr3
argc = 4
argv[0] = ./viewparams
argv[1] = parametr1
argv[2] = parametr2
argv[3] = parametr3
Teraz programik plus
czlowiek@maszyna:~$ nano plus.c
#include <stdio.h>
int main (int argc, char *argv[])
{
if (argc < 3) {
printf ("Niepoprawna liczba argumentow :/\n");
printf ("Przyklad uzycia: plus 50 25\n");
return 1;
}
int sum, i;
sum = 0;
for (i = 0; argv[i]; i++) {
sum += atoi(argv[i]);
}
printf ("%d\n", sum);
return 0;
}
Kompilujemy i uruchamiamy
czlowiek@maszyna:~$ gcc -o plus plus.c
czlowiek@maszyna:~$ ./plus 50 25
75
czlowiek@maszyna:~$ ./plus 1 2 3 4 5 6 7 8 9 0
45
plus-minus?
brak komentarzy | tagi: C/C++, hello world, Linux, programowanie, ubuntu | wpis w C/C++, Linux, Programowanie
Oct
5
2009
Nawiazujac do poprzedniego wpisu o instalacji Flex Builder 3, pragne dodac krotki opis konfiguracji tego srodowiska w taki sposob aby mozliwe bylo debugowanie kodu w czasie rzeczywistym. Sam mialem z tym problem, wiec moze komus sie przyda.
1. Na poczatek potrzebujemy zmodyfikowanej wersji Flash Playera
czlowiek@maszyna:~$ wget http://download.macromedia.com/pub/flashplayer/updaters/10/flash_player_10_linux_dev.tar.gz -O /tmp/flash_player_10_linux_dev.tar.gz
2. Nastepnie ekstraktujemy do katalogu tymczasowego
czlowiek@maszyna:~$ tar xzvf /tmp/flash_player_10_linux_dev.tar.gz -C /tmp
czlowiek@maszyna:~$ tar xzvf /tmp/flash_player_10_linux_dev/plugin/debugger/install_flash_player_10_linux.tar.gz -C /tmp
3. Instalujemy Flash Player
czlowiek@maszyna:~$ /tmp/install_flash_player_10_linux/flashplayer-installer
czytamy instrukcje i odpowiadamy na pytania, sciaga: y, n
.
Restartujemy Firefox’a i na upartego powinno wszystko dzialac. Ja osobiscie mam wieczny problem z kompatybilnoscia FF i FP. Firefox potrafi sypnac sie z byle powodu (sa rozne, tylko jemu znane) lub Flash Player nie odpowiada na zapytanie debuggera. Po wielu doswiadczeniach i zmarnowanych godzinach na analizie problemu doszedlem do wniosku, ze FF nie jest jedyna przegladarka i ze w tej kwestii Epiphany Web Browser sprawdza sie znakomicie.
4. Instalujemy Epiphany Web Browser
czlowiek@maszyna:~$ sudo apt-get install epiphany-browser
5. Konfigurujemy Eclipse-Flex do wspolpracy z nowa przegladarka
Window->Preferences, nastepnie zakladka General->Web Browser teraz klikamy New i wypelniamy formularz zgodnie z zalaczonym PrtScrn’em

sciaga:
Epiphany Web Browser
/usr/bin/epiphany-browser
Jako, ze Epiphany nie chwyta FF’owego plugina, musimy nadpisac glowny plik playera.
6. Nadpisujemy liba
czlowiek@maszyna:~$ sudo cp /tmp/install_flash_player_10_linux/libflashplayer.so /usr/lib/adobe-flashplugin/libflashplayer.so
Tak oto po paru zabiegach mozemy cieszyc sie “stabilnym” srodowiskiem Flex Builder 3 pod Ubuntu 

Kodzik
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
creationComplete="init()">
<mx:HBox horizontalAlign="center" verticalAlign="middle" width="100%" height="100%">
<mx:VBox>
<mx:Label id="lb_helloWorld" text="Hello world" fontSize="36" />
<mx:HBox horizontalAlign="center" verticalAlign="middle" width="100%" height="100%">
<mx:Button id="btn_increase" label="+" />
<mx:Button id="btn_decrease" label="-" />
</mx:HBox>
</mx:VBox>
</mx:HBox>
<mx:Script>
<![CDATA[
private var _fontSize: int = 36;
public function init():void
{
this.btn_increase.addEventListener(MouseEvent.CLICK, this.increaseFontSize);
this.btn_decrease.addEventListener(MouseEvent.CLICK, this.decreaseFontSize);
}
public function increaseFontSize(event: MouseEvent): void
{
this._fontSize++;
this.lb_helloWorld.setStyle("fontSize", this._fontSize);
}
public function decreaseFontSize(event: MouseEvent): void
{
this._fontSize--;
this.lb_helloWorld.setStyle("fontSize", this._fontSize);
}
]]>
</mx:Script>
</mx:Application>
Zobacz takze:
- Instalacja Flex Builder 3 na Ubuntu
brak komentarzy | tagi: debugging, Eclipse, Flex, hello world, Konfiguracja, programowanie, ubuntu | wpis w Flex/Air, Konfiguracja, Linux, Programowanie, Web