piątek, 28 sierpnia 2009

Praca magisterska, md5 i nokia 3120 clasic

Dawno nic nie napisałem, ale prawda jest taka, że nie było o czym. Założenie było takie, że piszę tutaj o tym co uda mi się stworzyć w świecie programowania, a od ostatniego posta nie powstało nic. Aż do dziś ;)

Przez ostatnie niemal 2 tygodnie pisałem swoją pracę magisterską. Wciąż jestem w polu, ale w sumie wygląda to coraz lepiej. Już dawno postanowiłem, że napiszę ją w latex'u i jak na razie nie żałuje decyzji. Pisze się naprawdę sprawnie. Najfajniejsze jest to, że nie ma problemów z aktualizacją obrazków i bardzo łatwo jest rozbić cały dokument na osobne piliki. Boli tylko brak sprawdzania pisowni. Jakoś nie udało mi się tego skonfigurować. Teoretycznie Eclipse z dodatkiem Texclipse potrafi skorzystać ze słowników aspell. Niestety sprawa robiła się o kodowanie dokumentu. Nie jest to na szczęście zbyt bolesne, bo wciąż można skorzystać z innego softu, choćby open office'a.

Zanim zacząłem pisać pracę walczyłem jeszcze trochę z tym ładowaniem plików md5. Lipa. Coś mi tu umyka. Nie wiem, czy to błąd w kodzie, czy nie zrozumienie jakiegoś aspektu, np jak posługiwać się kwaternionami. W każdym bądź razie lipa. Udało mi się doprowadzić do tego, że szkielet mojego modelu animował się poprawnie. Jednak gotowiec ma coś nie tak z orientacją. Pozycje są poprawne. Brakło mi czasu, żeby problem rozwiązać.

Co do tego wszystkiego ma Nokia 3120 clasic ? Ano jest pretekstem do spłodzenia tego posta. Otóż mój szanowny rodziciel, wszedł w posiadanie tego modelu, drogą podpisania umowy z jednym z operatorów sieci gsm w Polsce. Telefon potęgą nie jest, czego się zresztą spodziewać po gratisie. Nie spodziewałem się jednak, że aż tak.
Wydawałoby się prosta sprawa skopiować kontakty z jednego telefonu na drugi. Poprzednik to sony erricson. Oba telefony posiadają moduł bluetooth. No to kopiujemy całą listę przez BT i po bólu ;)
Otóż nie. SE potrafi wysłać wszystkie kontakty na raz w formie pliku vcf. Nokia natomiast takiego pliku zrozumieć nie potrafi. Grrr.
Szybko okazało się, że problemem jest to iż jest to lista. Pojedynczą wizytówkę można przesłać. Czyli co, na SE strzałka w dół > opcje > wiecej > zaawansowane > wyslij > bt, Nokia > akceptuj > zapisz. I tak 380 razy. Masakra.
Po długim kombinowaniu wyszło, że takie wizytówki można wysyłać także z komputera. Byleby nie była to lista, a pojedyncze wpisy. Na szybko napisałem kawałek kodu do konwersji listy na osobne pliki.

Nie zagłębiałem się przy tej okazji nadmiernie w strukturę pliku .vcf. Także raczej nie należy się na to powoływać. Programik zadziałał zgodnie z oczekiwaniem, a cała operacja zakończyła się pełnym sukcesem, dając tym samym Nokii pierwszą szansę na dłuższe testy u mnie w domu. Wcześniej była tylko jedna i wytrzymała jeden dzień, zanim mnie szlag trafił ;)

/*
* main.cpp
*
* Created on: 2009-08-28
* Author: Adam Śmigielski
* E-mail: adam.smigielski@gmail.com
* Copyright: Adam Śmigielski
*/


#include <fstream>
#include <iostream>
#include <stdio.h>

using namespace
std;

int
main(int argc, char * argv[])
{

const
char * filename = 0;
if
(2 >= argc)
{

filename = argv[1];
cout << "Plik: " << filename << endl;
}

else

{

cout << "Podaj nazwe pliku" << endl;
return
1;
}


fstream in;
fstream out;
in.open(filename, fstream::in);
if
(false == in.is_open())
{

cout << "Plik nie istnieje" << endl;
return
2;
}

else

{

cout << "Otwarto plik" << endl;
}


char
buffer[256];
unsigned int
count = 0;
char
name[] = "result\\xxxx.vcf";
char
rev[] = "REV:20090828T071515Z";
int
revsize = strlen(rev);

while
(true)
{

in.getline(buffer, 256);

cout << buffer << endl;

if
(0 == strcmp(buffer, "BEGIN:VCARD"))
{

sprintf(name + 7, "%04d.vcf", count++);
cout << "Nazwa pliku: " << name << endl;

out.open(name, fstream::out);
if
(false == out.is_open())
{

cout << "Nie udalo sie otworzyc pliku" << endl;
return
2;
}

else

{

cout << "Otwarto plik" << endl;
}


out << buffer << endl;
while
(true)
{


in.getline(buffer, 256);

cout << buffer << endl;

if
(0 != strstr(buffer, "X-IRMC-LUID:"))
{

out << rev << endl;
}

else if
(0 == strcmp(buffer, "END:VCARD"))
{

out << buffer << endl;
break
;
}

else if
(0 != strstr(buffer, "TEL:"))
{

out << "TEL;CELL:" << buffer + 4 << endl;
}

else

{

out << buffer << endl;
}
}


out.close();
}

else if
(0 == strcmp(buffer, ""))
{

break
;
}
}


in.close();

return
0;
}



EDIT
Właśnie odkryłem, że mój sprytny sposób na zamieszczanie kodu wyświetla bool'e na czarno. Ehh, już zmienione. Teraz będą zielono niebieskawe :)

Brak komentarzy: