Tag Archives: Programowanie

Iphone Contact Exporter

Wczoraj pojawił się mały problem. Michał kombinował jak by tu wydłubać kontakty z Iphone ale jednocześnie nie synchronizować go z niczym. Pomyślałem, że dobrym pomysłem byłoby wyeksportowanie kontaktów do pliku CSV i przesłanie ich mailem. Potem można już z tym zrobić co się chce.

Napisałem więc prostą aplikację i wrzucę kawałki kodu źródłowego, bo może ktoś jeszcze będzie chciał z tego skorzystać.

Na początek importy:

Dla dostępu do książki adresowej potrzebujemy:

#import <AddressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>

Do wysłania emaila będziemy potrzebować jeszcze:

#import <MessageUI/MessageUI.h>
#import <MessageUI/MFMailComposeViewController.h>

Dodatkowo trzeba dodać w deklaracji naszego view controllera obsługę protokołu <MFMailComposeViewControllerDelegate>

Kod do importu książki adresowej wygląda tak:

- (IBAction)Import:(id)sender {
    ABAddressBookRef ab=ABAddressBookCreate();
    CFArrayRef people=ABAddressBookCopyArrayOfAllPeople(ab);
    CFIndex ii=ABAddressBookGetPersonCount(ab);
    NSString *wszystko=@"";
    for(int i=0;i<ii;i++)
    {
        ABRecordRef record=CFArrayGetValueAtIndex(people, i);
        NSString   *FirstName=(__bridge NSString *)ABRecordCopyValue(record, kABPersonFirstNameProperty);
        NSString   *LastName=(__bridge NSString *)ABRecordCopyValue(record, kABPersonLastNameProperty);
        NSArray *Email=(__bridge NSArray *)ABMultiValueCopyArrayOfAllValues(ABRecordCopyValue(record, kABPersonEmailProperty));
         NSArray *Phone=(__bridge NSArray *)ABMultiValueCopyArrayOfAllValues(ABRecordCopyValue(record, kABPersonPhoneProperty));

        NSString *outputRecord=[NSString stringWithFormat:@"%@; %@; %@; %@\n",FirstName,LastName,[self arrayToString: Email],[self arrayToString: Phone]];

        wszystko=[wszystko stringByAppendingString:outputRecord];
    }

    [OutputContactList setText:wszystko];
}

Zaimportowane kontakty z będą zapisane jako tekst oddzielany średnikami – po jednej linii na kontakt. Importuję tylko pola: imię, nazwisko, wszystkie numery telefonów i wszystkie adresy e-mail.

Na końcu przygotowane dane wrzucam do TextView OutputContactList

W związku z tym, że numery telefonów i emaile są przechowywane w tablicy zrobiłem sobie jeszcze jedną pomocnicza funkcję:

- (NSString *)arrayToString:(NSArray *)ar
    {
        NSString *s=@"";
        int i=0;
        if([ar count]>0)
        {
        for(NSString *pozycja in ar)
        {
            i=i+1;
            s=[[s stringByAppendingString:pozycja] stringByAppendingString:@";"];
        }
        }
        for (int j=i;  j <= 3 ;j++)
        {
            s=[s stringByAppendingString:@";"];
        }
        return s;
    }

Przekształca ona tablice na ciąg 4 elementów oddzielanych średnikami – jak tablica jest mniejsza to dopełnia ją – zakładam, że nie będę miał więcej numerów telefonów lub adresów email.

Pozostaje jeszcze wysłanie emaila z danymi:

- (IBAction)sendMail:(id)sender {
    MFMailComposeViewController *mailController=[[MFMailComposeViewController alloc]init];
    [mailController setMailComposeDelegate:self];
    [mailController setMessageBody:[OutputContactList text] isHTML:NO];
    [mailController setSubject:@"Sending contacts"];
    NSArray *recp=[[NSArray alloc]initWithObjects:[emailAddress text], nil ];
    [mailController setToRecipients:recp];
    [self presentModalViewController:mailController animated:YES]; 
}

Ten kod otworzy okienko i przygotuje e-mail do wysłania.

Pozostaje jeszcze obsłużenie zamknięcia okna:

-(void ) mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
    [controller dismissModalViewControllerAnimated:YES];
}

I właściwie gotowe.

Efekt końcowy u mnie wygląda mniej więcej tak:

 

Jeżeli macie pytania to zapraszam do komentowania

Voli.PicasaDownloader

Mój kolega Krzysiu prosił mnie już jakiś czas temu, żeby rozwiązać jego drobny problem z Picasą. Chodzi o to, że ma tam wiele albumów ze zdjęciami i nie ma pomysłu w jaki sposób ściągnać je wszystkie na dysk aby utworzyć sobie kopię.

Dzisiaj postanowiłem “zaprzyjaźnić” się z Google API i okazało się, że sprawa nie jest specjalnie skomplikowana. Udało mi się napisać prostą aplikację, której jedynym zadaniem jest zapisanie zdjęć z picasy na lokalny dysk do lokalnego folderu. Aplikacja tworzy subfoldery o nazwach katalogów i tam zapisuj wszystkie zdjęcia.

Pomyślałem sobie, że komuś jeszcze może się to przydać dlatego wrzucam dla wszystkich – miłego używania. Link do aplikacji (acha – ważna rzecz – aplikacja działa pod windows i jest publikowana przez click once – jak nie będzie się chciała zainstalować to spróbujcie IE wtedy zawsze działa).

Oczywiście czekam na opinie – jak zawsze 🙂

Plan lekcji na iPhone

Update – nowa wersja programu jest w App store – wszystkie informacje na ten temat są dostępne tutaj

Jakiś czas temu Krzysiek wpadł na pomysł, że fajnie byłoby mieć aplikację, w której można by zapisać plan lekcji swoich dzieci po to, żeby wiedzieć o której kończą zajęcia i kiedy mają jakie lekcje.

W tym roku moje dzieciaki poszły do szkoły i okazało się, że to całkiem niezły pomysł, jednak jakoś nie było czasu na jego wdrożenie.

Tak się jednak złożyło, że ostatnio sprawdzałem jak działa obsługa Sqlite w iOS więc postanowiłem jako wprawkę zrobić ten projekt.

Oto filmik, który pokazuje efekt:

Funkcje jakie mamy w tej chwili to:

  • wprowadzanie imion dzieci
  • oddzielne plany dla każdego dziecka
  • plan na kolejne dni tygodnia (włączając sobotę i niedzielę)
  • plan podzielony na dwie części – lekcje i zajęcia pozalekcyjne

Planuję udostępnić tą aplikację w app store więc pojawi się tutaj link do niej.

Czy macie sugestie odnośnie funkcji?

 

Info, aplikacja nagle wylądowała w top chart, nie wiem co z tym zrobić, bo nie chciałem już rozwijać tej wersji….

Przewijanie do konkretnego miejsca strony w kontrolce WebBrowser WPF

Jakiś czas temu szukałem sposobu na przewinięcie strony w kontrolce WebBrowser w WPF. Trochę się z tym męczyłem, trochę też szukałem na sieci i wszędzie nie było jakichś sprytnych prostych rozwiązań. Było kilka patentów z wstrzykiwaniem java scriptu do strony, ale nie wydawało mi sie to eleganckie.

Udało mi się jednak znaleźć inny sposób, który jest dość prosty więc się nim dzielę.

Po pierwsze element do którego chcemy przewinąć musi mieć określone ID – kiedyś nie było to zbyt popularne, ale teraz już bardzo wiele stron ma ponadawane ID kolejnym tagom, więc nie powinno być z tym wielkiego problemu. Jeżeli sami generujemy stronę to tym bardziej jest to proste.

Jak znamy ID naszego tagu to kod wygląda tak – kod jest VB.NET

Dim doc = WebBrowserDokument.Document
Dim d = doc.getElementById(sp.id.ToString)
d.scrollIntoView()
 Jeżeli jednak nie znamy ID – wtedy mamy wersję trudniejszą, ale też możemy skorzystać z kolekcji getElementsByTagName i wtedy po prostu przenieść się do któregoś z elemntów tej kolekcji.
Mam nadzieję, że ten przykład był pomocny.

 

 

Speech – usprawniłem odrobinkę systemowe text to speech osx lion

W ramach poświątecznych porządków, zebrałem się w sobie i dorzucam stare rzeczy, o których chciałem pisać już dawno.

W momencie, kiedy pojawił się Mac OS X 10.7 pojawił się też polski lektor w systemowym text ot speech. Generalnie działa rewelacynie, szczególnie, że można ściągnąć dodatkowe głosy. W związku z tym, że ostatnio stałem się wielkim fanem audiobooków bardzo zainteresowało mnie to. Niestety wbudowane odtwarzanie mowy na text troszkę kuleje – nie ma chociażby możliwości pauzowania dźwięku i odtworzenia go ponownie. Można tylko odtworzyć cały tekst jeszcze raz.

W sumie to dość zabawne, bo sam OS X w swoim API ma NSSpeechSynthesizer, który ma bardzo dużo fajnych możliwości. Pobawiłem się nim trochę i od jakiegoś czasu mam programik, który nazwałem Speech i którego podstawowym zadaniem dla mnie jest odczytywanie tekstu a także tworzenie plików do audiobooków.

Program wraz z całą jego instrukcją obsługi (notatki na screenie) wygląda tak:

Jak widać – nie jest specjalnie skomplikowany – w sumie taki miał nie być.

Jeżeli chcecie potestować to możecie ściągnąć go stąd jeżeli ktoś chce kod źródłowy proszę dać znać to też go udostępnię.

Miłej zabawy i czekam na opinie/komentarze/sugestie

Nauka czytania

W ubiegłym tygodniu postanowiłem pomóc trochę moim chłopakom w nauce czytania. Okazuje się, że to dość skomplikowany proces, ale wymyśliłem aplikację, która może pomóc troszkę.

Idea jest taka, aby można było wczytać dowolny tekst. Później podzielić go na zdania i w każdym zdaniu wyświetlić kolejne słowa. Jednak pomysł jest także taki, że przecież dzieci nie zawsze pamiętają jaka literka jest która dlatego też po najechaniu myszą na literkę wyświetla się obrazek, który podpowiada z jaką literką mamy do czynienia. Dodatkowo chłopcy chcieli aby samogłoski były innego koloru, w ten sposób łatwiej im łączyć słowa w sylaby. Okazało się, że chłopcy mają także problem z głoskami zapisywanymi jako dwie litery w języku polskim, dlatego też program rozpoznaje takie głoski i łączy je razem.

Oto efekt:

Aplikacja jest napisana w silverlight więc można się nią pobawić bezpośrednio w przeglądarce pod adresem:

http://goluda.pl/naukaczytania

Testowałem na Windows i Mac OSX – na linuxie też powinno działać.

Miłej zabawy i czekam na sugestie.

Klient mamopony.pl na iPhone

Postanowiłem zrobić klienta storny mamopony.pl na iPhone. Ta aplikacja jest realizacją mojego małego pomysłu na zrobienie natywnych aplikacji dla iPhone do obsługi sklepów internetowych. Tutaj mamy wyszukiwanie i prezentację danych sklepu, natomiast nie ma tutaj funkcojonalności dokonywania zakupu, jednak to w tej chwili nie jest już żaden problem.

W tej chwili aplikacja pozwala na wyszukiwanie aktualnych danych ze sklepu – wyszukujemy opony dla samochodów osobowych w zależności od sezonu (letnie/zimowe) i rozmiaru.

Aplikacja odpytuje stronę internetową sklepu i prezentuje odebrane dane w formie listy, po wybraniu interesującej nas opony wyświetlane są szczegóły opony wraz zwiększym zdjeciem.

Teraz garść zrzutów z aplikacji:

Okno wprowadzania parametrów wyszukiwania:

Okno listy znalezionych opon:

i szczegóły wybranej opony:

Dodatkowo krótka prezentacja, którą umieściłem na youtube – prezentacja jest po angielsku

Jak zwykle czekam na wszelkie info

Transmisje żużla na iPhone

Tak jak pisałem wcześniej mój plan stworzenia klientów na dla mojej aplikacji do podglądu transmisji żużla trwa nadal.

Gotowa jest już aplikacja dla iPhona. Niestety nie mam konta developerskiego (jeszcze) i nie mogę jej umieścić w app store, więc można się nia bawić tylko w symulatorze, ale screeny już są.

Więc, najpierw główne okno aplikacji z listą transmisji

Standardowo, jak w poprzednich wersjach lista transmisji odświerza się przyciskiem odświerzenia w lewym górnym rogu programu.

Po wybraniu transmisji jesteśmy przeniesieni do zakładki ze szczegółami transmisji, gdzie dostępne są trzy sekcje:

1. biegi – opis wszystkich biegów

2. drużyna 1 – informacje o zawodnikach pierwszej drużyny

3. drużyna 2 – informacje o zawodnikach drugiej drużyny

To w zasadzie tyle. Tym razem nie będzie pliku do ściągnięcia, bo w sumie i tak nie mozna go zainstalować, chyba, że ktoś zna jakiś sposób – wtedy proszę o info – to wrzucę.

Transmisje żużla na Mac OS X

Wpadłem na nowy pomysł – postanowiłem rozbudować moją aplikację do podglądu transmisji żużlowych o klientów na inne platformy. Pomyślałem sobie, że będzie to niezła wprawka dla mnie i okazja do nauki programowania dla Maca i iPhone/iPad. Docelowo chciałbym, żeby program działał jeszcze na Windows – aplikacja desktopowa, w przeglądarce przez Silverlight, na Androidzie (to już jest), na Windows Phone 7 oraz Mac OSX – (to dziś) i iPhone/iPad.

Dziś Mac OS X

Aplikacja działa tak jak aplikacja na androida, czyli na w pierwszej zakładce mamy listę dostępnych transmisji (jeżeli na zuzelend.com dostępne są transmisje) lub dwie testowe (jeżeli nie ma żadnych dostępnych transmisji)

Listę transmisji aktualizuje się przyciskiem “Pobierz listę aktualnych transmisji”.

Następnie należy kliknąć wybraną transmisję, wtedy zostanie wczytana wybrana transmisja i zostaniemy przeniesieni do zakładki ze szczegółami

Tutaj widzimy przebieg transmisji – kolejne biegi i wyniki w kolejnych biegach oraz zawodników, którzy w nich uczestniczyli (tak jak w wersji dla Androida).

Na dole okna mamy dwie listy z nazwiskami zawodników obu startujących drużyn.

Odświeżamy transmisję manualnie klikając przycisk “Odśwież wynik”).

Aktualna wersja aplikacji dostępna jest do pobrania tutaj.

Transmisje żużla na Androidzie

Dla wszystkich zaglądających na tą stronę informacja, że nowa wersja aplikacji jest do pobrania i obejrzenia w tym poście

Wczoraj rano Filip wpadł na pomysł, że potrzebna mu jest aplikacja, dzięki której mógłby na telefonie przeglądać transmisje z meczy żużlowych, tak jak to jest dostępne na stronach www. Właściwie to chodziło właśnie o parser strony z relacjami.

Tak się złożyło, że Filip ma telefon z Androidem, więc była dobra okazja wypróbować jak to wszystko działa pod Mac OSX – działa 😉 instalacja nie była specjalnie skomplikowana, jedyny problem pojawił się z jakimś tajemniczym okienkiem googli w eclipse, które nie chciało się zamknąć, ale to wszystko.

Ustaliliśmy, że będziemy parsować relacje meczy umieszczone na stronie http://zuzelend.com/

Utworzyłem następującą architekturę.

1. aplikacja w ASP.NET, która przygotuje dane dla aplikacji dla telefonu – przede wszystkim VB.net jest dla mnie łatwiejszym językiem, a dodatkowo w ten sposób zmniejszymy zapotrzebowanie na dane telefonu.

2. aplikacja w javie dla androida – jako finalny front end

Teraz trochę screenów dla ciekawych jak to wygląda

okno wyboru listy relacji (nie zapanowałem nad polskimi znakami tutaj jeszcze, ale daje się odczytać).

Widać tutaj:
– godzinę relacji
– drużyny
– wynik (nie wiem dlaczego dla archiwalnych relacji podają na stronie 0:0)

Okno szczegółów meczu (wyświetla się po wybraniu meczu).

Widać tutaj:
– Nazwy drużyn
– przycisk odświeżenia (lista odświeża się ręcznie)
– opisy biegów
(numer biegu, zawodnicy, zdobyte punkty przez zawodników, wynik biegu, wynik meczu do tego biegu, komentarz do biegu)
– Opisy drużyn (zawodnicy wraz z ilością zdobytych punktów)

Aplikacja wyświetla dokładnie te same dane, które dostępne są na stronie zuzelend.com.

Aktualną wersję można pobrać stąd