piątek, 18 lutego 2011

Ściąganie simlock Option GIO225 3G Modems - Windows 7 and other

Nie znalazłem w sieci kompletnego poradniki, który byłby po polsku i przedstawiał krok po kroku jak ściągnąć sim locka z Modemu Icon Optio 225. Rozpiszę to w kilki krokach.

  1. Instalujemy python 2.6.* (32bit version)  http://www.python.org/download/releases/  (koniecznie wersja 2.6.* nie inna)
  2. Instalujemy pywin32 dla python 2.6  http://sourceforge.net/projects/pywin32/files/pywin32/Build%20212/
  3. Instalujemy pyserial http://sourceforge.net/projects/pyserial/files/
  4. Ściągamy unlocker msm-unlock-v1.6.zip (Download na samym dole strony) i wypakujemy do D:\UNLOCK
  5. Ściągamy firmware update do modemu w wersji FW2.5.24Hd ze strony http://www.option.com/en/support/software-download/consumer-broadband-solutions/icon225/  (na samym dole strony, żeby ściągnąć musimy podać numer IMEI modemu, lub ściągamy wszystkie pliki potrzebne z linków przygotowanych przeze mnie na dole strony)
  6. Wypakujmy ściągnięte FW (firmware) do katalogu gdzie unlocker D:\UNLOCK
  7. Wyciągnijmy kartę z modemu i podłączmy do komputera (modem musi być zainstalowany).
  8. Teraz przejdziemy do aktualizacji firmware w modemie. Robi się to za pomocą pliku Superfire.exe, tylko że producent zablokował możliwość aktualizacji firmware w modemach OEM (sim-lockiem ery, orange itd.) Możesz ściągnąć już przerobiony plik Superfire.exe, (ale może nie działać z twoim modemem, plik jest przerobiony na modemy blueconnect, jeśli nie będziesz mógł zainstalować aktualizacji to wykonaj kroki 9-13) link jest na dole posta, wtedy omijasz kroki 9-13. 
  9. W tym kroku przerobimy plik Superfire.exe tak by można było zainstalować aktualizację do naszego modemu.
  10. Otwieramy plik Superfire.exe, który wcześniej wypakowaliśmy do katalogu UNLOCK, po uruchomieniu zaznaczmy opcję Generate log file i klikamy Next (pamiętajmy, że modemu musi być podłączony do komputera). Wyświetli się nam komunikat na czerwono i klikamy Cancel.
  11. Utworzył nam się plik superfire.txt w katalogu z programem, otwieramy go i szukamy linijki (prawie na końcu pliku):
    10.952: CPagePreparation::Do: unsupported card (GI0225-11100)
    Ta część w nawiasie (GI0225-11100) może się różnić zależnie od modemu. Zapiszmy to co jest po GIO255- w ty wypadku to 11100.
  12. Ściągnijmy dowolny Hex Editor (w moim przypadku Hex Editor Neo). Otwieramy w nim plik Superfire.exe i szukamy (CTR+F) kodu hex (4700490030003200320035): (na dole strony zdjęcie)
  13. Kod zaznaczony w czerwonej ramce (1.1.2.2.5) zamieniamy na ten   zapisany wcześniej kod naszego modemu (1.1.1.0.0). Po prostu wpisujemy i zapisujemy plik na D:\UNLOCK pod nazwą Superfire.exe
  14. Następnym krokiem jest po prostu zainstalowanie aktualizacji, klikamy na nasz zmodyfikowany plik i instalujemy aktualizację (Programy korzystające z modemu muszą być wyłączone).
  15. Wszystkie plik mają znajdować się w katalogu D:\UNLOCK . A te pliki to: msm_unlock.py, msm_apply.py, crctable.py, bootloader.py, folder patch, oraz plik Superfire.exe (jeśli ten plik ma inną nazwę to zmnieniamy na taką jak podałem).
  16. Teraz ściągniemy sim locka. Uruchamiamy teraz skrypt msm_unlock.py w CMD*: D:\UNLOCK\msm_unlock.py Jeśli nie wystąpią żadne problemy dostaniemy key, zapisujemy go i wyciągamy modem po chwili wkładamy z powrotem i przechodzimy do kolejnego kroku. Jeśli by coś nie działało to czytajmy komunikaty i spróbujmy rozkminić o co chodzi. Czasami pomaga włożenie modemu do innego usb lub restart kompa.
  17. Uruchamiamy w CMD msm_apply.py D:\UNLOCK\msm_apply.py wpisujemy key, klikamy enter i czekamy na komunikat o ściągniętym sim-lock. Wyciągamy modem i to tyle powodzenia!:D

*CMD to konsola systemu Windows, aby ją uruchomić w Windows 7 klikamy na  Start, w pole "Wyszukaj programy i pliki" wpisujemy cmd i klikamy Enter.

Artykuł oryginalny na stronie: http://dogber1.blogspot.com/2010/01/unlocker-for-option-gio225.html
DOWNLOAD:

Wszystkie pliki pod:
http://chomikuj.pl/onid/OPTIO+GIO225+3G+MODEM

wtorek, 8 lutego 2011

C++/C to html



Zamieszczam program, który zamienia kod napisany w C++/C do kodu html, efekt jak poniżej. W tym poście program będzie aktualizowany. Żeby użyć programu musimy go na początku skompilować, później gotowy program umieszczamy w katalogu z plikiem, który chcemy zamienić na html. Włączamy program i wpisujemy nazwę pliku z rozszerzeniem np. "main.cpp". Po tej operacji w katalogu z programem pokaże się nowy plik main.cpp.html. I to tyle:D

    Program został napisany żeby wrzucać kod C++/C, na bloga w bardziej czytelny sposób.


main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/*
*            Autor: Vevensi, onidpl@gmail.com
*            Wersja Programu: 0.2.1v
*/
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

int ilosc_lini(char[]);
void zamien(std::string&);
void koloruj(std::string&);

int main(){
    const int np = 20; //max důugoúă tekstu(nazwa pliku)
    char n_bgcolor[7] = "000000"; //kolor tůa numeracji
    char n_color[7] = "FFFFFF"; //kolor tekstu numeracji
    char bgcolor[7] = "000000"; //kolor tůa kodu
    char color[7] = "FFFFFF"; //kolor tekstu kodu
   
    //jest to program który bćdzie zamieniaă plik cpp na kod html który moýna
    //wrzuciă na stronć, póęniej zostanie moýliwoúă kolorowania skůadni i bćdzie
    //moýna wybraă czy linie majŕ byă ponumerowane czy nie
   
    //pierwszym krokiem jest zapytanie uýytkownika o nazwć pliku do otwarcia,
    //plik powinien byă w katalogu z programem
    //kolejny krok to odczytanie ile jest lini w programie i zapisanie tego do zmiennej
    //nastćpnie zacziemy od torzenie pliku html
    //pierw dodamy te poczŕtkowe znaczniki
    //póęniej numercaja a na końcu kaýdy wiersz bćdziemy odczytywany i zaisywany osobno
    //to do dzieůŕ
    //http://cpp0x.pl/kursy/Kurs-C++/Obsluga-plikow/305
   
    ifstream plikcpp; //tworzymy nowŕ zmienna która nam posůuýy do operacji na pilku
    ofstream plikhtml; //plik kótry utworzymy i zapiszemy w nim gotowy kod programu
    char nazwa_pliku[np];
    char nazwa_pliku_html[np];
    cout << "Podaj nazwe pliku do otwarcia: ";
    cin >> nazwa_pliku;
    //próbujemy otworzyă plik
    plikcpp.open(nazwa_pliku, ios_base::in);
    //sprawdzamy czy otworzono
    if(plikcpp.good()){
        cout << "Uzyskano dostep do pliku" << endl;
    }else{
        cout << "Nie mozna uzyskac dostepu!" << endl;
        return 1;
    }
    //kopiowanie nazwy pliku
    strcpy(nazwa_pliku_html,nazwa_pliku);
    //dopisanie rozszerzenia html
    strcat(nazwa_pliku_html,".html");
   
    plikhtml.open(nazwa_pliku_html, ios_base::out);
    //sprawdzamy czy otworzono
    if(plikhtml.good()){
        cout << "Utworzylem plik do zapisu" << endl;
    }else{
        cout << "Nie mozna otworzyc pliku!" << endl;
        return 1;
    }
   
    cout << "Plik: " << nazwa_pliku_html << endl;
   
    //wpisujemy do pliku poczŕtkowe elementy
    plikhtml << "<font face=\"Verdana\"><table cellspacing=\"0\" cellpadding=\"7\">";
    plikhtml << "<caption align=\"top\">" << nazwa_pliku <<"</caption>";
   
    //instrukcje wstawiajŕce numeracjć
    int linie = ilosc_lini(nazwa_pliku);
    //ustawiamy kolor tůa numercji
    plikhtml << "<td bgcolor=#" << bgcolor << ">";
    //ustawiamy kolor tesktu numeracji
    plikhtml << "<font color=#" << color << ">";
   
    //numeracja
    for(int i=1; i<=linie; i++){
        plikhtml << i << "<br />";
    }
    //koncowe elementy
    plikhtml << "</font></td>";
   
    //instrukcje wpisujŕce kod programu
    plikhtml << "<td nowrap=\"nowrap\" bgcolor=#" << bgcolor << ">";
    plikhtml << "<font color=#" << color << ">";
   
    //przepisujemy kolejno kaýdŕ linie z cpp do html
    string *buff = new string;
    while(getline(plikcpp,*buff)){
        //wywoůanie f. wykrywajŕcej znaki specjalne
        zamien(*buff);
        //kolorujemy skladnie
        koloruj(*buff);
        plikhtml << *buff << "<br />";
    };
   
    //wpisujemy do pliku końcowe elementy
    plikhtml << "</font></td></table></font>";
    delete buff;
    plikhtml.close();
    plikcpp.close();
   
    return 0;
   
   
}
//liczenie lini pliku
int ilosc_lini(char nazwa[]){
    ifstream *plik = new ifstream;
    plik->open(nazwa, ios_base::in);
    string *buff1 = new string;
    int linie = 0;
   
    while(getline(*plik,*buff1)){
        linie++;
    }
    delete buff1;
    plik->close();
    delete plik;
    return linie;
}

void zamien(std::string &tekst){
   
    for(int i=0; i<tekst.length(); i++){
        //sprawdzamy czy wystŕpi w tekscie jakiú znak specjalny, jeýeli
        //tak to go zastćpujemy odpowiednikiem html
        if(tekst[i]=='<') { tekst.erase(i,1); tekst.insert(i,"&lt;"); }
        else if(tekst[i]=='>') { tekst.erase(i,1); tekst.insert(i,"&gt;"); }
        else if((tekst[i]=='&')&&(tekst[i+1]!='n')&&(tekst[i+2]!='b')) {
            tekst.erase(i,1); tekst.insert(i,"&amp;"); }
        else if(tekst[i]=='\t') {
            tekst.erase(i,1); tekst.insert(i,"    "); }
    }
}

//funkcja w fazie alpha potrzeba poprawek i rozwinićcia
void koloruj(std::string &tekst){
    //důugoúă tekstu aktualnego wiersza
    int dlu = tekst.length();
    for(int i=0; i<dlu; i++){

        if((tekst[i]=='#')&&(i==0)) {
            tekst.insert(i,"<font color=#00FF00>");
            tekst.insert(dlu+20,"</font>");
           
        }
        else if((tekst[i]=='/')&&(tekst[i+1]=='/')) {
            tekst.insert(i,"<i><font color=#888888>");
            tekst.insert(dlu+23,"</font></i>");
        }
    }
}

piątek, 4 lutego 2011

Test wstawiania kodu do strony

main.cpp
1
2
3
4
5
6
7
8
9
#include <iostream>
using namespace std;
int main(){
  int a,b;
  cout << "Podaj a,b: " << endl;
  cin >> a >> b;
  cout << "Suma: " << a+b << endl;
  return 0;
}

czwartek, 3 lutego 2011

C++ drugie starcie

W tym artykule napiszemy program, który po krótko omówię. Aplikacja którą napiszemy będzie wykonywać operacje arytmetyczne na dwóch liczbach, które poda użytkownik z klawiatury. No to zaczynamy:

main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>

using namespace std;

int main(){

int a;
int b;
//można zapisać int a,b;

cout << "Podaj dwie liczby całkowite i naciśnij enter: ";
cin >> a >> b; //można zapisać osobno cin >> a; cin >> b;
cout << "Suma: " << a+b << endl;
cout << "Różnica: " << a-b << endl;
cout << "Iloczyn: " << a*b << endl;

//instrukcja warunkowa if..else sprawdza czy b jest równe 0
if(b==0) cout << "Nie można dzielić przez zero!" << endl;
else cout << "Iloraz: " << a/b << endl;

return 0;
}



Tak to wygląd po kompilacji i uruchomieniu:


W pierwszej linijce jest tzw. dyrektywa pre-procesora w tym wypadku jest to #include, zapamiętajmy, że dołącza nam do programu bibliotekę. Nazwa biblioteki jest umieszczona w nawiasach "trójkątnych" <>. Dołączenie biblioteki iostream.h do programu daje nam możliwość korzystania z pewnych funkcji które są zawarte w niej, w tym przypadku są to strumienie wyjścia "cout" i wejścia "cin". Jak widzimy w naszym programie wyświetlają one tekst w konsoli i z niej pobierają liczby.
W 3 linijce jest tzw. użycie przestrzeni nazw std i zastosowanie jej do całego pliku main.cpp. Nie przejmuj się tym, że tego możesz nie rozumieć ale wiedź tyle, że jeśli tego w programie nie będzie to przy każdym wywołaniu funkcji z biblioteki iostream.h, trzeba by było pisać std::cout, std::cin, std::endl;
Następnie w linijce 5 jest główna funkcja programu. To zawsze od niej zaczyna się wykonywanie programu, zawsze musi być napisana w naszym programie. Między nawiasami klamrowymi  { } jest ciało funkcji.
W 7 i 8 linijce jest deklaracja zmiennej typu całkowitego, można w niej przechowywać liczby całkowite z zakresu od 2mld do -2mld. Zmienne tworzymy w ten sposób, że na początku jest typ zmiennej a później jej nazwa:
typ_zmiennej nazwa_zmiennej;
//np
int zmienna;
float zmienna1;
char zmienna2;

Pierwsze program C++ w Linuksie

Nie będę tutaj opisywał czym jest Linux, jak go zainstalować itp. Ten artykuł służy innym celą. Pokaże w jaki sposób zainstalować kompilator języka C++ i uruchomimy pierwszy nasz program. Ja osobiście używam Kubuntu, może się okazać iż nie mamy domyślnie zainstalowanego kompilatora języka C++ w systemie. Ale nie stanowi to żadnego problemu. Zacznijmy od sprawdzenia czy mamy kompilator, który nazywa się gcc.
1.Uruchamiamy konsole i wpisujemy w niej gcc -v i powinniśmy dostać podobny komunikat:

2.Jeśli nie masz zainstalowanego kompilatora to zrobimy to w ten sposób. W konsoli wpisz:
sudo apt-get install gcc
Pamiętajmy, że potrzebujemy połączenie z internetem. Po wykonaniu tej operacji wszystkie potrzebne programy i biblioteki zostaną zainstalowane.
3.Kolejnym krokiem jest napisanie jakiegoś prostego programy. W tym celu w konsoli stwórzmy sobie jakiś katalog na nasze programy. W konsoli wpiszmy:
mkdir nazwa_folderu
mkdir tworzy nam nowy folder w miejscu wywołania konsoli domyślnie to jest katalog domowy (home), możemy to sprawdzić wydając polecenie:
pwd
następnie przejdzmy do folderu, który stworzyliśmy:
cd nazwa_folderu

komenda cd służy do przechodzenia między katalogami. Teraz stworzymy sobie pierwszy plik c++:
kate main.cpp
kate jest domyślnym edytorem tekstu w Kubuntu, korzystając z Ubuntu musimy użyć polecenia gedit. "main.cpp" to nazwa tworzonego pliku, wszystkie pliki, w których będziemy pisać programy powinny mieć rozszerzenie "cpp".Po wykonaniu komendy otworzy się nam edytor tekstu w kótrym będziemy pisać nasz pierwszy program.
W otwarty edytorze tekstu napiszmy taki program:

#include <iostream>

int main()
{
  std::cout << "Witaj świecie\n";
  return 0;
}

Zapiszmy plik, teraz przejdziemy do naszej konsoli, której wcześnie nie zamykaliśmy. Otworzymy nową powłokę klikamy w konsoli na Plik -> New Tab ->Powłoka. 
Teraz wpisujemy taką komendę, która wykona kompilację pliku:
g++ main.cpp -o program.o
Jeśli nie wyskoczą nam żadne błędny to możemy być z siebie dumni, napisaliśmy nasz pierwszy program. Żeby go teraz uruchomić wpisujemy w konsoli:
./program.o
Na ekranie powinniśmy ujrzeć napis Witaj świecie.
W następnym artykule opiszę dokładnie z czego składa się program w c++ i napiszemy już więcej linijek kodu.

Od czego zacząć?

Każdy kto zaczyna przygodę z programowanie może czuć się trochę przygnębiony. Nie wiemy od czego zacząć i jak podążyć dalej. Na  początek najlepszym sposobem jest dobra książka, która cię poprowadzi krok po kroku. Na samym początku mam zamiar przedstawić w jaki sposób napisać pierwszy program. Jak można go skompilować i uruchomić. Tak żeby po drodze czekało cię jak najmniej niespodzianek, które mogły by cię zniechęcić do programowania. W czasie czytanie moich artykułów polecam ci dobrą książkę, na początek twojej przygody z C++. Jest to książka w PDF, napisana przez Karola Kuczmarskiego pt. "Od zera do gier kodera". Link do książki.