Mercurial Eclipse konfiguracja i instalacja

W tym post-cie opiszę jak korzystać z Mercurial (systemu kontroli wersji) w Eclipse.


Więcej o Mercurial:
tutaj
Więcej o systemie kontroli wersji:
tutaj
 


Aby używać Mercurial w Eclipse należy zainstalować: mercurialeclipse, które pobieramy z adresu WWW [Pobieramy będąc w Eclipse w zakładce służącej do pobierania nowego oprogramowania ("plug-in"-u)]: https://mercurialeclipse.eclipselabs.org.codespot.com/hg.wiki/update_site/stable


Strona WWW projektu mercurialeclipse: tutaj
Instrukcja jak korzystać z mercurialeclipse (a tym samym z Mercurial) jest tutaj: patrz

Ale to nie wystarczy należy jeszcze pobrać i zainstalować oprogramowanie: TORTOISEHG ze strony WWW - patrz i pobierz
Trzeba to zrobić dlatego, aby mercurialeclipse, wiedział jakiego pliku exe (programu-klienta: Mercurial) ma używać do wykonywania.
Ścieżkę do pliku exe podajemy w Eclipse: "Windows->Preferences->Team->Mercurial->Mercurial Executable:"


Do składowania swoich repozytoriów Mercurial korzystamy z darmowego do zastosowań komercyjnych serwisu internetowego: BITBUCKET [Patrz tutaj].

Po utworzeniu repozytorium na bitbucket.org, możemy łączyć się z nim poprzez Nasze Eclipse na dwa sposoby:
1. Zwyczajnie poprzez https. Przy próbie łączenia się ze zdalnym repozytorium zostaniemy poproszeni o login i hasło do naszego konta bitbucket.org.
Lub
2. Poprzez ssh. Aby łączyć się poprzez ssh należy wygenerować klucz prywatny i publiczny na Swoim komputerze przy pomocy programu PuTTYgen - pobierz [trwa to kilka minut]
Klucz publiczny należy dołączyć do serwisu: bitbucket.org na Naszym koncie - patrz zdjęcie:


Przed łączeniem się Eclipse z bitbucket.org poprzez ssh, należy uruchomić program Pageant (stąd go można pobrać: pobierz), aby przy każdym połączeniu nie podawać go od nowa.


W serwisie bitbucket.org, wybór łączenia podajemy w tym miejscu:



A tak wygląda okno ECLIPSE z Mercurial:



MERCURIAL - Przykład mojego użycia
Patrz tutaj


Miłej zabawy!




SVN Visual Studio konfiguracja i instalacja

W tym post-cie opiszę jak korzystać z SVN [Subversion] (systemu kontroli wersji) w Visual Studio: 2008, 2010 i 2012.


Więcej o SVN [Subversion]:
tutaj
Więcej o systemie kontroli wersji:
tutaj
 


Aby używać SVN [Subversion] w Visual Studio należy zainstalować: AnkhSVN, które pobieramy z adresu WWW: pobierz
Instrukcja jak korzystać z AnkhSVN (a tym samym z SVN [Subversion]) jest tutaj: patrz

Do składowania swoich repozytoriów SVN [Subversion] korzystamy z darmowego do zastosowań komercyjnych serwisu internetowego: CODEBASEHG [Patrz tutaj].

Po utworzeniu repozytorium na codebasehg.com, możemy łączyć się z nim poprzez Nasze Visual Studio na dwa sposoby:
1. Zwyczajnie poprzez https. Przy probie łączenia się ze zdalnym repozytorium zostaniemy poproszeni o login i hasło do naszego konta codebasehg.com.
Lub
2. Poprzez ssh. Aby łączyć się poprzez ssh należy wygenerować klucz prywatny i publiczny na Swoim komputerze przy pomocy programu PuTTYgen - pobierz [trwa to kilka minut]

Klucz publiczny należy dołączyć do serwisu: codebasehg.com na Naszym koncie:



Przed łączeniem się Visual Studio z codebasehg.com poprzez ssh, należy uruchomić program Pageant (stąd go można pobrać: pobierz), aby przy każdym połączeniu nie podawać go od nowa.

Niestety serwis codebasehg.com, umożliwia wybór ssh tylko w wersji płatnej. W wersji darmowej do zastosowań komercyjnych jesteśmy skazani na https.
Uwaga - Co więcej konkurencja: GITHUB i BITBUCKET - W OGÓLE NIE WSPIERA SVN !!!

W serwisie codebasehg.com, wybór łączenia podajemy w tym miejscu:



A tak wygląda okno Visual Studio z SVN [Subversion] :


Uwaga - Należy pamiętać, że po zainstalowaniu: AnkhSVN, należy te narzędzie uaktywnić w: "Tools->Options->Source Control->Plug-in Selecion->Current source control plug-in:"


SVN [Subversion] - Przykład mojego użycia
Patrz tutaj


Miłej zabawy!




GIT Visual Studio konfiguracja i instalacja

W tym post-cie opiszę jak korzystać z GIT (systemu kontroli wersji) w Visual Studio: 2008, 2010 i 2012.


Więcej o GIT:
tutaj
Więcej o systemie kontroli wersji:
tutaj
 


Aby używać GIT w Visual Studio należy zainstalować: GitExtensions, które pobieramy z adresu WWW: pobierz
Instrukcja jak korzystać z GitExtensions (a tym samym z GIT) jest tutaj: patrz
Uwaga- Instalacja ta umożliwia też korzystanie z natywnego GIT w linii komend w oknie konsoli GIT.

Do składowania swoich repozytoriów GIT korzystamy z darmowego do zastosowań komercyjnych serwisu internetowego: GITHUB [Patrz tutaj].

Po utworzeniu repozytorium na github.com, możemy łączyć się z nim poprzez Nasze Visual Studio na dwa sposoby:
1. Zwyczajnie poprzez https. Przy probie łączenia się ze zdalnym repozytorium zostaniemy poproszeni o login i hasło do naszego konta github.com.
Lub
2. Poprzez ssh. Aby łączyć się poprzez ssh należy wygenerować klucz prywatny i publiczny na Swoim komputerze przy pomocy programu PuTTYgen - pobierz [trwa to kilka minut]
Klucz publiczny należy dołączyć do serwisu: github.com na Naszym koncie (zgodnie z instrukcją: Patrz - Step 4: Add your SSH key to GitHub).
Przy łączeniu się Visual Studio z github.com poprzez ssh, zostaniemy poproszeni o załadowanie klucza prywatnego do programu SSH Pageant (dzieje się to automatycznie), aby przy każdym połączeniu nie podawać go od nowa.


W serwisie github.com, wybór łączenia podajemy w tym miejscu:



A tak wygląda okno Visual Studio z GIT [GitExtensions]:



GITHUB - Przykład mojego użycia
Patrz tutaj


Miłej zabawy!




DLL z Visual Studio do Delphi 7 i C++

W tym post-cie opiszę jak napisać bibliotekę DLL w Visual Studio: 2008 i 2010, a następnie używać ją natywnie w Delphi i C++ Builder.
W zasadzie dzięki mojemu sposobowi bibliotekę DLL można używać w każdym narzędziu programistycznym tak jakby była to biblioteka DLL napisana w tym właśnie narzędziu programistycznym.

Do tworzenia między platformowej biblioteki DLL wykorzystam bibliotekę Unmanaged Exports.



Zaczynamy od kodu dla VISUAL STUDIO 2008 (jest to przykład dla szablonu [templates]):

Plik szablonu (nierozpakowany w wersji zip) umieszczamy w katalogu:
C:\Users[Użytkownicy]\Nazwa użytkownika\Documents\Visual Studio 2008\Templates\ProjectTemplates\Visual C#\tutaj

Natomiast szablon pobieramy z adresu WWW:
pobierz

Teraz możemy w Visual Studio 2008 wybrać:
File->New->Project->Visual C#->My Templates->UnmanagedExportLibrary
 



KODY BIBLIOTEKI DLL Z WYKORZYSTANIEM SZABLONU:  


KODY BIBLIOTEKI DLL Z WYKORZYSTANIEM PACKAGE MANAGER CONSOLE: [Instrukcja jak zainstalować PACKAGE MANAGER CONSOLE - tutaj]


Przykład użycia C++ BUILDER 2010:


Przykład użycia DELPHI 7:


Uwaga - jak używasz Visual Studio 2008 i mojego sposobu, biblioteka DLL po kompilacji będzie osobno dla wersji 32 bitowej i 64 bitowej w odpowiednich katalogach i tylko z nich ją należy pobierać.

Uwaga2 - jak używasz Visual Studio 2010 i mojego sposobu, biblioteka DLL po kompilacji będzie zawsze jedna w wersji zależnej od ustawień dla projektu biblioteki DLL [PATRZ TUTAJ].

Pamiętaj VISUAL STUDIO umożliwia pisanie natywnego kodu 32 i 64 bitowego.
Jednak moje dema w Delphi 7 i nawet w C++ Builder 2010 umożliwiają pisanie natywnych aplikacji tylko 32 bitowych.
Dlatego należy dla nich używać tylko 32 bitowej biblioteki DLL.
Dopiero od RAD Studio XE (C++ Builder XE) możliwe jest pisanie natywnego kodu 64 bitowego.
Ale o tym innym razem w innym post-cie (poświęconym tylko opisaniu produktów firm: Borland, CodeGear i Embarcadero).



Pliki do pobrania:
1. Źródła - C# (VISUAL STUDIO 2008) (kody źródłowe DLL)
-pobierz
2. Źródła - C# (VISUAL STUDIO 2010) (kody źródłowe DLL)
-pobierz
3. DEMO - C++ Builder 2010 (z DLL od VS 2008)
-pobierz
4. DEMO - C++ Builder 2010 (z DLL od VS 2010)
-pobierz
5. DEMO - DELPHI 7 (z DLL od VS 2008)
-pobierz
6. DEMO - DELPHI 7 (z DLL od VS 2010)
-pobierz



GITHUB - ŹRÓDŁA WSZYSTKICH PLIKÓW:
Patrz tutaj



Darmowe czasopisma komputerowe gazety dla programistów i IT

W tym post-cie dam Wam linki do najpopularniejszych DARMOWYCH polskich i angielskich czasopism komputerowych dla programistów i administratorów (IT) z oficjalnych legalnych stron WWW.

POLSKIE CZASOPISMA:

1. Legendarne: SDJ i SDJ Extra dla programistów
2. Legendarne: PHP Solutions dla programistów
3. Legendarne: Linux+ dla administratorów
4. Czasopismo dla miłośników Apple (iMagazine)

ANGIELSKIE CZASOPISMA:

1. Dla programistów (WEB & PHP Magazine)
2. Dla programistów i administratorów (MSDN Magazine)

Jak zabraknie Wam jakiegoś numeru to piszcie do mnie mam je wszystkie u siebie, nawet pierwsze numery, które nie są już dostępne do pobrania!

Miłej lektury.


<br> znak końca wiersza linii w blogger.com i SyntaxHighlighter

Tworząc kolejne post-y na blogger.com natrafiłem na pewien problem dotyczący wyświetlania znacznika: <br> lub jak kto woli znacznika: <br/> i chciałem się z Wami podzielić moimi spostrzeżeniami i gotowymi rozwiązaniami jak sobie z tym fantem poradzić.

O tuż, aby na Waszym blogu w blogger.com wyświetlać niezinterpretowane znaczniki <br> (<br/>), czyli widoczne napisy "<br>" lub "<br/>" - należy:

W opcjach post-a ustawić:
Opcje -> Tryb tworzenia -> Pokaż dokładnie kod HTML
a nie przypadkiem:
Opcje -> Tryb tworzenia -> Interpretuj wpisany kod HTML

I to wystarczy pod warunkiem, że jesteśmy w trybie Nowy post, a nie w trybie HTML!
Gdy jesteśmy w trybie HTML musimy wszędzie tam gdzie chcemy wstawić znacznik <br> (<br/>) [widoczny w post-cie w nienaruszonej formie] używać:

&lt; zamiast <
i &gt; zamiast >
a w środku br.

Czyli: &lt;br&gt; lub dla drugiej wersji &lt;br/&gt;


Uwaga! - opcje ustawiane w post-cie:
a) Opcje->Podziały wierszy->Używaj tagu <br>
i
b) Opcje->Podziały wierszy->Naciskaj klawisz "Enter", aby dodawać podziały wierszy
nie mają znaczenia.

Służą tylko do zdefiniowania:

1. Czy w trybie Nowy post gdy przechodzimy do nowych wierszy przy pomocy klawisza ENTER, w trybie HTML pojawią się znaczniki: <br/> - gdy użyjemy opcji a) pojawią się <br/>, gdy użyjemy opcji b) pojawią się puste wiersze;
2. Czy w trybie HTML do nowych wierszy przechodzimy przy pomocy klawisza ENTER, czy też znacznika: <br> (<br/>) - gdy użyjemy opcji a) trzeba przechodzić do nowych wierszy przy pomocy znacznika <br> (<br/>), gdy natomiast użyjemy opcji b) wystarczy wciskać ENTER.


No dobra, a co z SyntaxHighlighter na blogger.com.
Ufff - i na to jest rozwiązanie, ale trzeba być ostrożnym i decyzję podjąć od razu gdy rozpoczynamy przygodę z tworzeniem własnego bloga na blogger.com. Od razu czyli w momencie, gdy po raz pierwszy umieszczamy SyntaxHighlighter na naszym blogu w blogger.com.
Gdy na początku tworzenia bloga zdecydujemy, aby nasz SyntaxHighlighter umożliwiał wyświetlanie znaczników: <br> (<br/>) [widoczne w post-cie w SyntaxHighlighter - w nienaruszonej formie] to mój sposób jest ok, tak samo gdy zdecydujemy się już na samym początku, aby nasz SyntaxHighlighter interpretował te znaczniki jako przejście do nowej linii i ich nie wyświetlał, to mój sposób również jest też ok.
Pisząc mój sposób, mam na myśli to co umożliwia SyntaxHighlighter i JEST TO JEDYNE MOŻLIWE ROZWIĄZANIE - INNEGO NIE MA!

No dobra dość gadania, pora przejść do konkretów.

Służy do tego poniższa opcja konfiguracyjna oprogramowania SyntaxHighlighter:
SyntaxHighlighter.config.stripBrs = true;
lub
SyntaxHighlighter.config.stripBrs = false;
Sami możemy zdecydować na co się decydujemy.

Nie będę tutaj opisywał samego oprogramowania SyntaxHighlighter, ponieważ nie jest to tematem tego post-a oraz już to zrobiłem w innym post-cie.
Zapraszam do lektury:
KOLOROWANIE SKŁADNI KODU SyntaxHighlighter



Każdy mój post, dotyczący w mniejszym lub większym stopniu programowania internetowego jest zawsze kompatybilny z IE od wersji 7, z Firefox od wersji 3.6.3, z Opera od wersji 9.63, z Safari od wersji 5.x i z Chrome od wersji aktualnej



Okrągłe tabele div z dynamicznym rozmiarem w HTML, XHTML i HTML5

W tym post-cie opiszę jak napisać stronę WWW w HTML, XHTML i HTML5 z dynamicznym rozszerzającym się div-em - zmieniającym wysokość z zaokrąglonymi rogami.
Strona WWW - dynamiczny div wykonany jest w: HTML, XHTML i HTML5.

KODY ŹRÓDŁOWE HTML5:

Opis:

1. W tagu style określamy style dla div-ów dynamicznych, m.in.: obrazki (zaokrąglone div-y), wysokość i szerokość oraz background-repeat w celu zdefiniowania, który div ma się zmieniać dynamicznie według osi y (wysokość);
2. W części body tworzymy ramki w kolejności: wynik (globalna - obejmująca wszystkie pozostałe div-y), góra, środek (tu wstawiamy to co chcemy [to co nas interesuje] - wysokość zmieni się automatycznie) i dół;
3. i gotowe, ależ to proste - :);
4. Uwaga - poniżej pokazuje również kody dla HTML i XHTML:
a) dla XHTML kod jest ten sam, zmienia się tylko nagłówek html;
b) dla HTML też zmienia się nagłówek html oraz dochodzi kod:



Pliki do pobrania:
1. Przykład użycia - HTML
-Zobacz
2. Przykład użycia - XHTML
-Zobacz
3. Przykład użycia - HTML5
-Zobacz



Miłej zabawy!


Każdy mój post, dotyczący w mniejszym lub większym stopniu programowania internetowego jest zawsze kompatybilny z IE od wersji 7, z Firefox od wersji 3.6.3, z Opera od wersji 9.63, z Safari od wersji 5.x i z Chrome od wersji aktualnej



Ostatnia niedziela miesiąca czas zimowy i letni Algorytm

W tym post-cie opiszę jak napisać algorytm i program dla platformy NET Framework w Delphi PRISM i platformy WinAPI w DELPHI RAD STUDIO, który umożliwia pobranie ostatniej niedzieli miesiąca dla wybranej daty oraz który umożliwia określenie czy data jest w czasie zimowym czy letnim.
Program i algorytm wykonany jest w języku: Delphi PRISM dla platformy NET Framework, oraz w DELPHI RAD STUDIO dla platformy WinAPI.

KOD ŹRÓDŁOWY DELPHI PRISM:

Opis:

1. method MainForm.OstatniaNiedzielaMiesiaca(rok,miesiac:string):string; - ALGORYTM;
2. method MainForm.button1_Click(sender: System.Object; e: System.EventArgs); - PRZYCISK OBSŁUGI ALGORYTMU;
3. method MainForm.button2_Click(sender: System.Object; e: System.EventArgs); - PRZYCISK OBSŁUGI ALGORYTMU CZAS ZIMOWY & CZAS LETNI I SAM ALGORYTM Z UŻYCIEM ALGORYTMU OSTATNIA NIEDZIELA MIESIĄCA.



KOD ŹRÓDŁOWY DELPHI RAD STUDIO:

Opis:

1. function OstatniaNiedzielaMiesiaca(rok, miesiac:string):string; - ALGORYTM;
2. procedure TForm1.Button1Click(Sender: TObject); - PRZYCISK OBSŁUGI ALGORYTMU;
3. procedure TForm1.Button2Click(Sender: TObject); - PRZYCISK OBSŁUGI ALGORYTMU CZAS ZIMOWY & CZAS LETNI I SAM ALGORYTM Z UŻYCIEM ALGORYTMU OSTATNIA NIEDZIELA MIESIĄCA.


Pliki do pobrania:
1. Źródła - Delphi PRISM (kody źródłowe algorytmu)
-pobierz
2. Źródła i exe - Delphi PRISM (exe i kody źródłowe algorytmu i programu demo)
-pobierz
3. Źródła - DELPHI RAD STUDIO (kody źródłowe algorytmu)
-pobierz
4. Źródła i exe - DELPHI RAD STUDIO (exe i kody źródłowe algorytmu i programu demo)
-pobierz



A tutaj podaje link do ciekawego internetowego kalendarza, abyście mogli sprawdzić działanie mojego algorytmu:
Patrz tutaj



Miłej zabawy!


TextBox komponent C# Net Compact Framework Mobile

W tym post-cie opiszę jak stworzyć komponent TextBox dla platformy NET Compact Framework, który umożliwia pobranie numeru linii, liczby wszystkich linii, ilości znaków wybranej linii i pobranie linii z tekstem o indeksie.
Komponent wykonany jest w języku: C#, dla platformy NET Compact Framework, gdzie nie ma gotowych rozwiązań i trzeba stworzyć je samemu, w przeciwieństwie do NET Framework, gdzie wszystko jest domyślnie zaimplementowane w komponencie TextBox.

KOD ŹRÓDŁOWY KOMPONENTU PONIŻEJ:

Opis:

1. Należy użyć: using Microsoft.WindowsCE.Forms, aby można przetwarzać komunikaty - Messages (należy pamiętać, aby do projektu [w którym korzystamy z Naszego komponentu] dodać referencje: Microsoft.Windowsce.Forms);
2. Dodajemy cztery prywatne stałe, które odpowiadają za każdy komunikat;
3. W konstruktorze ustawiamy, aby nasz komponent miał wiele linii oraz pasek przewijania (Ważne – w przeciwieństwie do Net Framework, gdy dodajemy komponent na formatkę w Net Compact Framework, dane z konstruktora nie są inicjalizowane na formatkę, problem ten nie występuje na Net Framework, dlatego i tak trzeba ręcznie ustawić dane z konstruktora, jak np. width i height);
4. Metoda: CurrentLine - zwraca linie na której znajduje się kursor;
5. Metoda: LineCount - zwraca liczbę linii tekstu;
5. Metoda: LineIndex - zwraca linię tekstu o indeksie;
6. Metoda: LineLength – zwraca liczbę znaków w linii.


Pliki do pobrania:
1. Źródła - C# (kody źródłowe komponentu)
-pobierz
2. Źródła i exe - C# (exe i kody źródłowe komponentu i programu demo) - EMULATOR
-pobierz



Miłej zabawy - mam nadzieję, że w cale nie błahy problem z ograniczeniem komponentu TextBox w Net Compact Framework został rozwiązany.
Śmiało można rozwijać tę kontrolkę o Wasze metody, które będę Wam potrzebne.




Lista wszystkich komunikatów do kontrolki TextBox, znajduje się pod adresem WWW (MSDN):
patrz tutaj (język ang.)
 



Jak nagrywać pulpit oraz filmy z gier za darmo

Witam,

W tym post-cie pokażę jak nagrywać pulpit systemu operacyjnego Windows oraz jak nagrywać filmy z gry [grę] w którą gramy w systemie operacyjnym Windows.

Wystarczy 10 minut. JEST TO WIEDZA SKONDENSOWANA I KOMPLETNA, nie potrzebujesz szukać dalej!


1. Nagrywanie pulpitu systemu operacyjnego Windows.

a) Pobieramy program CamStudio:

O programie warto przeczytać w dwóch linkach poniżej, a z pierwszego linku go pobrać:
patrz tutaj (język ang.)
i
tutaj (język ang.).
 
b) Instalujemy program CamStudio razem z CamCodec;
c) Po zainstalowaniu uruchamiamy go i w Options -> [wybieramy] Record audio from microfone, dzięki czemu nagrywamy też dźwięk;
d) Wciskamy czerwony duży przycisk i rozpoczynamy nagrywanie;
e) Po zakończeniu wciskamy niebieski duży przycisk i kończymy nagrywanie.

Opcje:

- Możemy wybierać czy nagrywamy do AVI czy do SWF (Flash);
- Warto wybrać katalog do którego zapisują się filmy: Options -> Program Options -> Directory for recording -> Use user specified directory;
- Aby nagrywać cały pulpit wybieramy: Region -> Full Screen.


2. Nagrywanie filmów z gier (gry).

a) Pobieramy program MSI AFTERBURNER:

patrz i pobierz

Uwaga- często na różnych forach i blogach możecie przeczytać, aby do zgrywania filmów z gier (gry) używać programu Frabs - nie jest to dobre!, ponieważ program Frabs (więcej o programie (język ang.) i tutaj) jest typem programu shareware i trzeba za niego płacić. Program, który ja demonstruję jest darmowy do zastosowań komercyjnych.

b) Instalujemy program;
c) Po zainstalowaniu uruchamiamy go i przechodzimy do Settings -> Przechwytywanie wideo -> [wybieramy] przycisk skrótu do jego uruchomienia, czyli rozpoczęcia i zakończenia nagrywania.

Opcje:

- Warto wybrać katalog do którego zapisują się filmy z grą: Settings -> Przechwytywanie wideo -> Folder -> Przeglądaj.


3. Na ok, mamy już możliwość nagrywania pulpitu i filmów z gier (gry).

Pozostaje jeszcze kwestia kompresji (czyli zmniejszenia rozmiaru wyprodukowanych plików AVI).

Do tego używamy programu: Pazera Free Video to iPod Converter 1.1.

a) Pobieramy program Pazera Free Video to iPod Converter 1.1:

patrz i pobierz

b) Instalujemy program (bądź ostrożny i podczas instalacji nie wybieraj instalacji dodatków takich jak: Sweet IM - kliknij wtedy odmawiaj, oraz Speed Up - kliknij wtedy Decline;
c) Po zainstalowaniu uruchamiamy go i wybieramy plik AVI do konwersji i klikamy konwertuj, „najlepszy” dekodek to MP4.
Teraz plik skonwertowany znajduje się "obok", w tym samym katalogu co plik avi.


A teraz proponuję obejrzeć mój filmik YouTube, które pokazuje wszystko to co opisałem w praktyce.


FILM:



Wszystkie zademonstrowane trzy programy są darmowe do zastosowań komercyjnych i działają w systemach operacyjnych Windows: XP, VISTA i 7.


Notepad notatnik z szyfrowaniem kompresją ZIP i zapisem WORD PDF

Uczymy się programować w Visual Studio 11 (2012), na przykładzie poniższej komercyjnej aplikacji, wraz z kodami źródłowymi.

Udostępniam do Waszej dyspozycji tak jak wszystko na moim blogu [darmowe do zastosowań komercyjnych] program NotePadPlus, - zaawansowany notatnik z szyfrowaniem, kompresją ZIP i zapisem do TXT, RTF, HTML, WORD 2003 (doc), WORD 2007 (docx) i PDF. Program jest wraz z kodami źródłowymi i można go dowolnie wykorzystywać. Jest doskonałą nauką jak tworzyć swoją pierwszą komercyjną aplikację.

Pliki do pobrania:
1. Moja Pierwsza Komercyjna Aplikacja (exe)
-pobierz
2a. Moja Pierwsza Komercyjna Aplikacja (kody źródłowe - Visual Studio 2008/2010)
-pobierz
2b. Moja Pierwsza Komercyjna Aplikacja (kody źródłowe - Visual Studio 2012 [ver. 11])
-pobierz
3. Moja Pierwsza Komercyjna Aplikacja (exe - Instalator)
-pobierz


Technologia: .NET;
Język: C#.

Miłej zabawy.

W następnym post-cie przedstawię i opiszę bibliotekę [narzędzie WiX], która służy do tworzenia wersji instalacyjnych programów pisanych w środowisku Visual Studio. Opis, będzie bazował na kodzie instalatora, który jest w programie NotePadPlus i w zasadzie opisywał wyczerpująco tę bibliotekę [narzędzie], z pominięciem tworzenia instalacji baz danych.

Uwaga - Jak otworzysz kody źródłowe, ta pamiętaj, że jak nie masz zainstalowanego WiX w Visual Studio, wtedy tworzenie instalki się nie powiedzie, ta część solucji będzie niedostępna, ale oczywiście program się będzie kompilował i działał.

WiX do pobrania dla:
Visual Studio 2005-2010 - Patrz tutaj (język ang.)
Visual Studio 2012 (ver. 11) - Patrz tutaj (język ang.)


Solucja składa się z trzech projektów:
1. notepadplus - główny projekt;
2. MarkupConverter - biblioteka do konwersji między innymi RTF do HTML [darmowa do zastosowań komercyjnych]:
- Patrz tutaj (język ang.);
3. SetupProject1 - projekt do tworzenia wersji instalacyjnej aplikacji.

Dodatkowo program NotePadPlus korzysta z bibliotek:
a) Microsoft.Office.Interop.Word.dll - Do obsługi WORD-a, jest częścią: NET Framework;
b) myCryptography.dll - Do obsługi szyfrowania (Moja własna);
c) nControls.dll - Nowsza kontrolka RichTextBox (Moja własna);
d) ICSharpCode.SharpZipLib.dll - Do obsługi między innymi kompresji ZIP:
- Patrz tutaj (język ang.).

Powodzenia!!!


Panzer General na Linux z WINE

Wspominając stare czasy postanowiłem zagrać w grę Panzer General.

Aby być w pełni oldskulowy postanowiłem, że zagram na Linuksie dokładnie na Ubuntu 11.10.

Cały poniższy opis jest dla Was, aby w dosłownie 5 minut mając zainstalowanego Linuksa (obojętnie jakiego), w moim przypadku Ubuntu 11.10 zagrać w tę wspaniałą grę.
A dokładnie w 4 gry:
 



O grze warto przeczytać:
patrz tutaj (język ang.)
i
tutaj.
 


Zaczynamy!

Opis będzie opierał się na Ubuntu 11.10, ale linki do stron WWW, które ja użyłem do Ubuntu, są też dla innych dystrybucji Linuksa.

Po pierwsze musimy mieć grę.
Na szczęście jest ona darmowa.


Grę pobieramy z legalnego źródła:
pobierz
 


Następnie rozpakowujemy ją Zip-em, na Linuksie Ubuntu 11.10 możliwe jest to bez instalowania dodatkowego oprogramowania, swoją drogą na Windows od wersji: VISTA też.

Na mamy grę.

Jednak jest to gra pod Windows!
Więc należy zainstalować pod Linuksa emulator Windowsa.
Najlepszym w Mojej opinii jest Wine.


O Wine warto przeczytać:
patrz tutaj (język ang.) [Strona twórców]
i
tutaj.
 


Zawsze są dwa Wine: wersje stabilna i wersja rozwojowa.
Ja wybrałem stabilną bo mam pewność, co do jej funkcjonalności.

Na stronie poniższej jest opis jak zainstalować WINE na Ubuntu 10.00 lub 10.10:
https://www.winehq.org/download/ubuntu
Ja skorzystałem z wersji konsolowej, aby być w pełni oldskulowy oraz co ważne!!!, aby zachować kompatybilność opisu z nowszą wersją systemu Linuksa Ubuntu.
Ja to nazywam up"downgrade".


Instalacja konsolowa

Wydajemy po sobie trzy komendy:

udo add-apt-repository ppa:ubuntu-wine/ppa

sudo apt-get update

sudo apt-get install wine1.4

Pamiętaj, że jak zostaniesz poproszony o zaakceptowanie licencji użyj klawisza tab, aby wybrać przycisk OK. Samo naciśniecie ENTER lub użycie myszki nie wystarcza.

No i wisienka na torcie.

Odpalamy xTerm -, czyli konsole Linuksa - Ubuntu.

Wpisujemy:

wine ścieżka_do_PanzerGeneral\PGForever.exe

i gramy i nawet dźwięk mamy.


Miłej zabawy.


A dla tych co chcą się bawić jeszcze bardziej oldskulowo, czyli bez korzystania z przeglądarki internetowej, dla tych dystrybucji Linuksa czysto konsolowych udostępniam grę Panzer General z mojego serwera.

Wpisujemy:


i pobieramy archiwum zip gry wchodząc do zmapowanego zdalnie katalogu: /mnt/nazwa_Twojego_katalogu_w_katalogu_mnt.


Program sklep z Filmami Muzyką Oprogramowaniem - Delphi

Miło mi jest poinformować, że prace nad tym post-em dobiegły końca!!!

Udostępniam do Waszej dyspozycji tak jak wszystko na moim blogu [darmowe do zastosowań komercyjnych] program KatMPBKatalog, do prowadzenia sklepów internetowych i innych sklepów, sprzedających: płyty z filmami, płyty z oprogramowaniem komputerowym i płyty muzyczne. Program jest wraz z kodami źródłowymi i można go dowolnie wykorzystywać. Jest doskonałą nauką jak tworzyć swoją pierwszą komercyjną aplikację.

Pamiętaj, aby przed uruchomieniem programu KatMPBKatalog pobrać i uruchomić program BDEInstall, który zainstaluje program BDE konieczny do prawidłowego działania programu KatMPBKatalog. Pamiętaj także, że gdy instalujesz program BDE musisz mieć prawa do instalacji programów w systemie operacyjnym, gdy nie jesteś zalogowany jako administrator systemu.

Pobierz - BDEInstall.exe

Więcej o BDE i o moim programie BDEInstall w innym moim post-cie poświęconym tylko temu zagadnieniu.
Borland Database Engine Delphi


Pliki do pobrania:
1. Moja Pierwsza Komercyjna Aplikacja (exe)
-pobierz
2. Moja Pierwsza Komercyjna Aplikacja (kody źródłowe)
-pobierz


Technologia: WinAPI;
Język: Delphi 7.

Miłej zabawy.

W następnym post-cie przedstawię drugi program komputerowy, który również można traktować jako pierwszą komercyjną aplikację, lecz tym razem przy użyciu nowszej technologii i nowszego języka programowania (Technologia: .NET; Język: C#). Program będzie miał swój własny instalator, wykonany w WiX: WiX opiszę w kolejnym post-cie po zaprezentowaniu drugiej aplikacji.


Programowa instalacja BDE - Borland Database Engine

W tym post-cie opiszę jak ręcznie z kodu programu zainstalować BDE (Borland Database Engine).
Przykład będzie bazował na Delphi 7, ale z powodzeniem możemy też to zrobić w C++ Builder 6.0.

Co to jest BDE?


BDE (Borland Database Engine), w skrócie to zbiór bibliotek DLL i funkcji API, umożliwiających w dość prosty sposób komunikowanie się z systemami baz danych: Paradox, dBASE, FoxPro, MS Access i tekstowymi bazami danych. Przeznaczony w głównej mierze dla starszych produktów: Borland Delphi (np. Delphi 7) i Borland C++ Builder (np. C++ Bulider 6.0).
Więcej: patrz tutaj (język ang.)
i
tutaj (język ang.).
 

Uwaga - często na forach jest napisane, że licencja firmy Embarcadero (dawniej Borland), nie zezwala na ręczne programowe instalowanie tego narzędzia.
W Mojej opinii licencja Borland, zezwala na ręczne instalowanie tego narzędzia - oczywiście, gdy ma się licencję na produkt, np. Delphi 7 Professional. Ja taka licencję posiadam i z wiązku tym źródła do programu, które Wam udostępniam są dla Was darmowe do zastosowań komercyjnych.
Plik: bdeinst.dll, pochodzi z mojej licencji i służy do instalowania BDE, więc możecie śmiało korzystać z mojego komercyjnego programu.
Chcąc jednak pisać własne komercyjne oprogramowanie musicie mieć własną licencje, np. na Delphi 7 Professional.
Na potwierdzenie moich słów zamieszczam jeden z wielu linków, pokazujący że inne firmy programistyczne też tak właśnie myślą.
Patrz tutaj.
Jak się z tym nie zgadzasz wypowiedź sie na moim blogu!


Poniżej źródło wspomnianego programu:

Opis:

1. Startuje forma (zdarzenie OnShow);
2. Sprawdzamy, czy BDE jest zainstalowane za pomocą funkcji: BDEZainstalowane;
3. Jak jest to piszemy, że jest zainstalowane i następnie w zdarzeniu OnActivate formy zamykamy program;
4. Gdy nie jest pytamy się czy zainstalować;
5. Jak odpowiedź przecząca zamykamy tak samo program jak ma to miejsce, gdy BDE jest zainstalowane;
6. Jak odpowiedź twierdząca to uruchamiamy zewnętrzny program regsvr32.exe, który służy do uruchomienia biblioteki dll: bdeinst.dll, która służy do instalacji BDE;
7. Na końcu zamykamy program tak samo jak miało to miejsce w innych przypadkach;
8. Uwaga - gdy kod błędu podczas instalacji jest mniejszy niż 33 informujemy, że instalacja się nie powiodła;
9. Uwaga 2 - pamiętajmy o dołączeniu unit-ów: BDE i ShellApi;
10. Uwaga 3 - Pamiętaj, że gdy instalujesz program BDE musisz mieć prawa do instalacji programów w systemie operacyjnym, gdy nie jesteś zalogowany jako administrator systemu.


Pliki do pobrania:
1. Źródła DELPHI 7 (exe i kody źródłowe)
-pobierz



Miłej zabawy.
Ten program wykorzystamy w następnym post-cie, gdzie przedstawię inny program wraz z kompletem źródeł do Delphi 7.
Będzie to program do obsługi sklepu z: Filmami, Muzyką i Oprogramowaniem Komputerowym.
Program będzie przykładem jak zacząć po raz pierwszy tworzyć APLIKACJE KOMERCYJNE, pt.: "Moja Pierwsza Komercyjna Aplikacja".





Przykład zastosowania:
BDE w Delphi program


Odliczanie czasu w dół PHP Countdown

W tym post-cie przedstawię użyteczny mechanizm odliczania czasu w dół.
Skrypt, który pokaże można osadzić w kodzie: HTML, PHP lub ASP.NET.
Skorzystam i omówię przeznaczoną do tego celu bibliotekę bazującą na JQuery o nazwie:
jQuery Countdown.

Zaczynamy od razu od kodu i jego omówienia.

Etap I:
Importujemy biblioteki jQuery i jQuery.countdown.js oraz importujemy style.

(Uwaga - Możesz też pobrać wszystkie wymagane skrypty i zamiast internetowej lokalizacji skryptów [https://keith-wood.name/...] - wprowadź Swoją lokalizację skryptów).
Często programiści w tym Ja, gdy tworzą projekty programistyczne pobierają wszystkie skrypty na Swój komputer (lokalnie), aby umieścić je w Swoim projekcie programistycznym, a następnie w projekcie na serwerze produkcyjnym do komercyjnego użytku.
Dlaczego? - a no dlatego, bo np. za 5 lat projekt z którego pobraliśmy skrypty może już nie istnieć lub np. serwer ze skryptami może chwilowo nie odpowiadać, mogą być prace konserwacyjne, a jak masz wszystkie skrypty u Siebie, to Ci nic nie grozi, Twój projekt programistyczny zawsze będzie funkcjonował.
Wady - w zasadzie tylko jedna, jak stworzysz projekt oddany do użytku komercyjnego z pobranymi skryptami, a w między czasie wyjdzie nowa wersja skryptów, komercyjna strona internetowa (komercyjny serwis internetowy) będzie korzystał ze starych wersji skryptów.
W tym post-cie skorzystamy z internetowej lokalizacji skryptów.

W części <HEAD>:
<style type="text/css">
@import "https://keith-wood.name/css/jquery.countdown.css";
#defaultCountdown { width: 240px; height: 45px; }
</style>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
 

Etap II:

W części <BODY> - dla języka polskiego:
<!-- wersja polska -->
<!-- pamiętaj, że w wersji polskiej musisz dodać dwa skrytpy jednocześnie z zachowaniem kolejności: jquery.countdown.js i jquery.countdown-pl.js -->
<script type="text/javascript" src="https://keith-wood.name/js/jquery.countdown.js"></script>
<script type="text/javascript" src="https://keith-wood.name/js/jquery.countdown-pl.js"></script>
<script type="text/javascript">
    $(function () {
        var austDay = new Date();
        austDay = new Date(2014, 6-1 , 12);
        $('#defaultCountdown').countdown({ until: austDay });
        $('#year').text(austDay.getFullYear());
    });
</script>
<div id="defaultCountdown"></div>
 

W części <BODY> - dla języka angielskiego:
<!-- wersja angielska -->
<script type="text/javascript" src="https://keith-wood.name/js/jquery.countdown.js"></script>
<script type="text/javascript">
    $(function () {
        var austDay = new Date();
        austDay = new Date(2014, 6-1 , 12);
        $('#defaultCountdown').countdown({ until: austDay });
        $('#year').text(austDay.getFullYear());
    });
</script>
<div id="defaultCountdown"></div>
 

Omówienie - ETAPU II:

$(function () {
  var austDay = new Date();
  austDay = new Date(2014, 6-1 , 12);
  $('#defaultCountdown').countdown({ until: austDay });
  $('#year').text(austDay.getFullYear());
});

Powyższy kod uruchamia skrypt jQuery przy użyciu: $(function () { .. });
Następnie tworzy zmienną austDay (ustawia na datę rozpoczęcia mistrzostw świata w piłce nożnej w Brazyli);
Następnie w kolejnej linii jest uruchamiany skrypt opisywanej biblioteki: jQuery Countdown w technice uruchamiania jQuery;
Ostatnia linia skryptu to odwołanie się do zmiennej bibliotek: jQuery Countdown, w celu ustawienia formatu daty.

Poza skryptem jest także dołączona warstwa, <div id="defaultCountdown"></div> która wstawia obiekt "licznika w dół" na stronę WWW.



Poniżej dwa przykłady działania powyższych kodów dla języka polskiego i języka angielskiego, sama czysta strona HTML.
Abyś błyskawicznie zrozumiał kod i od razu mógł umieszczać go u Siebie!
Uwaga - nie można na jednej stronie mieszać języków, stąd dwa linki.
DATA ODLICZANIA USTAWIONA JEST NA DZIEŃ ROZPOCZĘCIA MISTRZOSTW ŚWIATA W PIŁCE NOŻNEJ W BRAZYLI

countdown PL
countdown EN


Odwołanie do twórców skryptu (można tam między innymi przeczytać o różnych stylach wyświetlacza, jest także dołączona dokumentacja).
Patrz tutaj (język ang.).


I to by było na tyle miłej zabawy, :)


Każdy mój post, dotyczący w mniejszym lub większym stopniu programowania internetowego jest zawsze kompatybilny z IE od wersji 7, z Firefox od wersji 3.6.3, z Opera od wersji 9.63, z Safari od wersji 5.x i z Chrome od wersji aktualnej



Kontrolki C# Invalidate Update Refresh

Opiszę łopatologicznie jakie są różnice między trzema metodami służącymi do odrysowywania dowolnej kontrolki Windows w środowisku: C# .NET Framework i C# .NET CF (Compact Framework):

1. Invalidate();
2. Update();
3. Refresh().

Zaczynamy:

1. Invalidate() - odrysowuje kontrolkę, odbywa się to poprzez dodanie do kolejki komunikatów komunikatu: WM_PAINT. W rezultacie kontrolka nie jest odrysowywany od razu, lecz dopiero po obsłużeniu wszystkich zaległych komunikatów.

2. Update() - zdejmuje oczekujący w kolejce komunikat WM_PAINT, a następnie obsługuje go. W rezultacie kontrolka jest odrysowywana natychmiast. Jeśli w kolejce komunikatów nie został wcześniej umieszczony komunikat WM_PAINT, metoda nic nie robi.

Czyli w kodzie programu, gdy chcemy natychmiast odrysować kontrolkę robimy tak: kontrolka.Invalidate();
kontrolka.Update();

3. Refresh() = Invalidate() + Update().

Podsumowując: W zasadzie prawie zawsze wystarcza metoda Invalidate(), natomiast możemy ją wesprzeć metodą Update() dla natychmiastowego odrysowania, np. gdy chcemy mieć płynność animacji lub gdy wykonujemy instrukcje programistyczne, które blokują przetwarzanie komunikatów. Metoda Refresh() to nic innego jak udogodnienie dla programisty.


Zapis odczyt obiektów w plikach binarnych C# .NET Compact

W tym post-cie przedstawię zapis i odczyt klas-obiektów (rekordów naszej własnej plikowej bazy danych) do plików binarnych. Zapisywane i odczytywane będą klasy-obiekty (rekordy plikowej bazy danych) - instancje obiektów klas, w zasadzie instancja jednego obiektu klasy reprezentującego naszą całą tabele do jednego pliku binarnego. Użyjemy do tego SPECJALNĄ serializację dla .NET Compact Framework (Serializacja klas na urządzenia mobilne) dla urządzeń mobilnych.

Zaczynamy jeszcze raz od wyjaśnienia co to w ogóle jest serializacja.


Serializacja – w programowaniu komputerów proces przekształcania obiektów, tj. instancji określonych klas, do postaci szeregowej, czyli w strumień bajtów, z zachowaniem aktualnego stanu obiektu. Serializowany obiekt może zostać utrwalony w pliku dyskowym, przesłany do innego procesu lub innego komputera poprzez sieć. Procesem odwrotnym do serializacji jest deserializacja. Proces ten polega na odczytaniu wcześniej zapisanego strumienia danych i odtworzeniu na tej podstawie obiektu klasy wraz z jego stanem bezpośrednio sprzed serializacji.
Serializacja służy do zapisu stanu obiektu, a później do odtworzenia jego stanu. Mechanizm ten jest używany między innymi na platformach: .NET, Java, PHP, Python, Ruby.

Źródło
 

Idę tego post-a jest pokazanie jak na urządzeniach mobilnych, np. z systemem operacyjnym Windows CE (Embedded), radzić sobie z zapisem i odczytem rekordów (reprezentowanych przez klasy) do plików binarnych.

Zaczynamy..

Znów skorzystamy z darmowej do zastosowań komercyjnych biblioteki:
(ALE TYM RAZEM JEJ NIE OPISUJE TYLKO WYKORZYSTUJE - opis jest w pierwszym linku w post-cie)
compactformatterplus.
Poniżej link do niej i do jej twórców. [Swoją drogą jest tam dużo użytecznych darmowych do zastosowań komercyjnych bibliotek dla .NET i .NETCF]
Uwaga - aby ja pobrać wystarczy darmowa rejestracja.
https://www.codeproject.com/Articles/21518/CompactFormatterPlus-Generic-Serializer-for-Full-a

Trzeba wiedzieć, że poprzez serializajcję niezależnie czy dla aplikacji desktopowych, czy dla aplikacji mobilnych możliwy jest zapisywać/odczyt tylko pojedynczej klasy/obiektu w jednym pliku binarnym. Nie można zapisać np. 10 instancji tych samych klas (a więc 10 rekordów) w jednym pliku binarnym - w zasadzie to pewnie się da, ale jest to zadanie skomplikowane i co więcej pracochłonne. CZAS TO PIENIĄDZ i ja pokażę jak zapisać to w sposób błyskawiczny. Cała sztuczka polega na tym, że zapisujemy jedną klasę/obiekt, w której mamy kolekcje klas/obiektów - czyli mamy kolekcję rekordów naszej tabeli.


MOJA KLASA DO:
ZAPISU INSTANCJI OBIEKTU DO PLIKU BINARNEGO (zapisu tabeli)
i
ODCZYTU INSTANCJI OBIEKTU Z PLIKU BINARNEGO (odczytu tabeli)



Dodatkowy potrzebny kod:


Użycie:


NO I MAMY OBSŁUGĘ PLIKOWEJ BAZY DANYCH, UFF, POWODZENIA.


Serializacja klas C# .NET Compact urządzenia mobilne

Zaczynamy od wyjaśnienia co to w ogóle jest serializacja.


Serializacja – w programowaniu komputerów proces przekształcania obiektów, tj. instancji określonych klas, do postaci szeregowej, czyli w strumień bajtów, z zachowaniem aktualnego stanu obiektu. Serializowany obiekt może zostać utrwalony w pliku dyskowym, przesłany do innego procesu lub innego komputera poprzez sieć. Procesem odwrotnym do serializacji jest deserializacja. Proces ten polega na odczytaniu wcześniej zapisanego strumienia danych i odtworzeniu na tej podstawie obiektu klasy wraz z jego stanem bezpośrednio sprzed serializacji.
Serializacja służy do zapisu stanu obiektu, a później do odtworzenia jego stanu. Mechanizm ten jest używany między innymi na platformach: .NET, Java, PHP, Python, Ruby.

Źródło
 

Idę tego post-a jest pokazanie jak na urządzeniach mobilnych, np. z systemem operacyjnym Windows CE (Embedded), radzić sobie z serializacją. Wiadomo, że na urządzeniach mobilnych mamy do czynienia z .NET Compact Framework, a nie z pełnym .NET Framework. A właśnie na: .NET Compact Framework, nie mamy dostępu do namespace:
using System.Runtime.Serialization.Formatters.Binary,
które jest niezbędne do korzystania z serializacji. Dokładnie to, aby serializować obiekty (klasy) potrzeba nam między innymi klasy: BinaryFormatter, który właśnie jest w tej przestrzeni.
Więcej czytaj: tutaj.

Można temu zaradzić!, Ufff..

Skorzystamy z darmowej do zastosowań komercyjnych biblioteki: compactformatterplus.
Poniżej link do niej i do jej twórców. [Swoją drogą jest tam dużo użytecznych darmowych do zastosowań komercyjnych bibliotek dla .NET i .NETCF]
Uwaga - aby ja pobrać wystarczy darmowa rejestracja.
https://www.codeproject.com/Articles/21518/CompactFormatterPlus-Generic-Serializer-for-Full-a


Ja teraz dokładnie opiszę i podam przykłady jak jej używać, gdyż Twórcy tej biblioteki dają tylko same źródła bez przykładów, a na stronie WWW też nie ma przykładów.


Biblioteka składa sie z trzech projektów stanowiących integralną całość.
Są to: ADOHelper, ISerial, CompactFormatterPlus.

Każdy z tych projektów należy dołączyć do Swojego głównego projektu dla którego piszemy software na urządzenie mobilne.
Dlaczego - bo oczywiście można by skompilować cały projekt, składający się z: ADOHelper, ISerial, CompactFormatterPlus i po kompilacji otrzymać trzy biblioteki dll - które można by potem dołączyć do Naszego projektu, ale zarówno Twórcy biblioteki [jest o tym wzmianka w linku, który udostępniłem], jak i Microsoft nie zaleca umieszczać bibliotek dll na urządzeniach mobilnych dlatego, że: w większości urządzeń mobilnych one po prostu nie działają, albo mogą powodować niewłaściwe działanie Naszego software.

Czyli dołączyliśmy te trzy projekty do Naszego projektu - warto zrobić sobie osobny folder w Naszym projekcie, np. Extenstions. Teraz wykonujemy Rebuild z wybranym: Set As StartUp Project ustawionym na Nasz główny projekt.
Po tej czynności dodajemy do Naszego głównego projektu w References trzy referencje z zakładki Naszego Projektu: ADOHelper, ISerial, CompactFormatterPlus.


I już mamy prawie koniec.
Teraz pozostał Nam sam kod.


ZAPIS INSTANCJI OBIEKTU DO PLIKU BINARNEGO:
ODCZYT INSTANCJI OBIEKTU Z PLIKU BINARNEGO:
Dodatkowy potrzebny kod:

Myślę, że problem serializacji na urządzenia mobilne został rozwiązany. Rozwiązując ten problem zyskaliśmy możliwość zapisywania do plików binarnych struktur i klas, czyli możemy tworzyć plikowe binarne baz danych.


Przykład użycia program:
( Zapis klas obiektów do plików w C#)
- dla urządzeń mobilnych.

Wysuwany pasek boczny na stronie Facebook Twitter Youtube

IDEĄ TEGO POSTA, jest pokazanie najprostszego możliwego rozwiązania na zaimplementowanie wysuwanych pasków bocznych osadzonych w dowolnej przeglądarce internetowej.
Paski boczne można wykorzystać w dowolny sposób!
Ja pokażę jak je połączyć z Facebook, Twitter, Google+, Youtube i NK.

Każdy, nawet nie znający się na programowaniu, w 15 minut może mieć 5 wysuwanych pasków bocznych współpracujących z najpopularniejszymi serwisami społecznościowymi: facebook, twitter, google+, youtube i nasza-klasa.

Narzędziem programistycznym będzie biblioteka jQuery w wersji 1.7.0 bazująca na JavaScript oraz język do tworzenia stron internetowych HTML w najnowszej wersji 5.

Kod jest powtarzalny dla każdego serwisu społecznościowego, nie ma znaczenia czy jest to: facebook, twitter, youtube, google+, czy też nasza-klasa.
Co więcej może służyć dla innych serwisów społecznościownych jak: linkedin (https://www.linkedin.com), flickr (https://www.flickr.com), myspace (https://www.myspace.com), fotka (https://www.fotka.pl), wykop (https://www.wykop.pl), czy goldenline (https://www.goldenline.pl) oraz wielu innych.
Kod można go również wykorzystać do zamieszczania Swoich wstawek programistycznych.



PONIŻEJ JEST W PEŁNI DZIAŁAJĄCY LINK DO TEGO CO OPISAŁEM POWYŻEJ (tylko: HTML5 i XHTML - po najechaniu. Uwaga: Jak wykorzystujesz HTML 4.01 to skorzystaj z linku dla HTML 4.01) - gotowe rozwiązanie, wystarczy kliknąć i masz:
Patrz tutaj



PONIŻEJ JEST W PEŁNI DZIAŁAJĄCY LINK DO TEGO CO OPISAŁEM POWYŻEJ (dla wszystkich: HTML5 i XHTML oraz HTML 4.01 - po kliknięciu) - gotowe rozwiązanie, wystarczy kliknąć i masz:
Patrz tutaj






Ważne - Zademonstruję w tym post-cie również jak umieścić wysuwane paski boczne na Swoim blogu w serwisie internetowym: blogger.com oraz jak na tym blogu używać biblioteki JQuery, które jest niezbędna do funkcjonowania wysuwanych pasków bocznych.
Jak sami widzicie u mnie już to funkcjonuje i nic nie stoi na przeszkodzie, aby u Was to też funkcjonowało.
Uwaga - gdy używamy pasków bocznych na blogger.com, w Swoim blogu, przeglądarka Internet Explorer, nie ma płynnej animacji wysuwania pasków, ale dotyczy to tylko serwisu blogger.com.



NO to zaczynamy!!!
Poniżej gotowy kod, który jest do wypróbowania w linku, który zamieściłem powyżej. Jest to ten sam kod.
Pod spodem kodu jest jego dokładny opis oraz inne zagadnienia, które stanowią jego rozszerzenie.



KOD HTML 5 i jQuery:


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html>
<html>

<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></script>

<!--WIDGET GOOGLE+-->
<!-- Place this tag in the <head> of your document -->
<link href="https://plus.google.com/108803486747646510695" rel="publisher" /><script type="text/javascript">
window.___gcfg = {lang: 'pl'};
(function() 
{var po = document.createElement("script");
po.type = "text/javascript"; po.async = true;po.src = "https://apis.google.com/js/plusone.js";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(po, s);
})();</script>
<!--KONIEC WIDGET GOOGLE+-->
</head>
    
<body>
<script type="text/javascript">
 //<[!CDATA[
  jQuery.noConflict();
  
  jQuery(document).ready(function() {   
      
   jQuery("#googleplus2_2").hover(function(){    
    jQuery(this).stop(true,false).animate({right: "0px"}, 500 );   
   },
   function(){ 
    jQuery("#googleplus2_2").stop(true,false).animate({right: "-304px"}, 500 );
    
   });   
         
   jQuery("#facebook2_2").hover(function(){    
    jQuery(this).stop(true,false).animate({right: "0px"}, 500 );   
   },
   function(){ 
    jQuery("#facebook2_2").stop(true,false).animate({right: "-304px"}, 500 );    
   });
      
   jQuery("#twitter2_2").hover(function(){    
    jQuery(this).stop(true,false).animate({right: "0px"}, 500 );   
   },
   function(){ 
    jQuery("#twitter2_2").stop(true,false).animate({right: "-300px"}, 500 );    
   });
         
   jQuery("#youtube2_2").hover(function(){    
    jQuery(this).stop(true,false).animate({right: "0px"}, 500 );   
   },
   function(){ 
    jQuery("#youtube2_2").stop(true,false).animate({right: "-304px"}, 500 );    
   });
       
   jQuery("#nk2_2").hover(function(){    
    jQuery(this).stop(true,false).animate({right: "0px"}, 500 );   
   },
   function(){ 
    jQuery("#nk2_2").stop(true,false).animate({right: "-300px"}, 500 );    
   });
  });   
 //]]>
</script>

<!--WIDGET FACEBOOK-->
<div id="fb-root"></div>
<script>(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/pl_PL/all.js#xfbml=1";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
<div id="facebook2_2" style="right: -304px; z-index: 9999; background: #ffffff; padding: 0px; width: 300px; height:550px; position: fixed; top: 50px; border: 2px solid #3B95D8">
  <a href="#"></a><img style="position: absolute; left:-33px;" src="facebook.png" />  
  <div class="fb-like-box" data-href="https://www.facebook.com/pages/KatMPBSoft/145582058840684" data-width="300" data-height="550" data-show-faces="true" data-stream="true" data-header="false"></div>
</div>
<!--KONIEC WIDGET FACEBOOK-->

<!--WIDGET TWITTER-->
<div id="twitter2_2" style="right: -300px; z-index: 9998; background: #ffffff; padding: 0px; width: 300px; height: 437px; position: fixed; top: 157px; border: 0px solid #FFFFFF">
  <a href="#"></a><img style="position: absolute; left:-33px; top:3px" src="twitter.png" /> 
  <div style='background-color:#809EFF;'>  
  <!-- STARY KOD TWITTER - już nie wspierany przez Twitter Widget
  <script charset="utf-8" src="https://widgets.twimg.com/j/2/widget.js"></script>
  <script>
  new TWTR.Widget({
        version: 2,
        type: 'profile',
        rpp: 20,
        interval: 6000,
        width: 300,
        height: 350,
        theme: {
            shell: {
                background: '#809EFF',
                color: '#ffffff'
            },
            tweets: {
                background: '#ffffff',
                color: '#000000',
                links: '#ff0000'
            }
        },
        features: {
            scrollbar: true,
            loop: false,
            live: true,
            hashtags: false,
            timestamp: true,
            avatars: true,
            behavior: 'all'
        }
  }).render().setUser('KatMPBSoft').start();  
  </script>
  -->

  <!-- NOWY KOD TWITTER - wspierany przez Twitter Widget-->
  <a class="twitter-timeline" href="https://twitter.com/KatMPBSoft" data-widget-id="278760694994837504">Tweets by @KatMPBSoft</a>
  <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>

  </div>
</div>
<!--KONIEC WIDGET TWITTER-->

<!--WIDGET NASZA-KLASA-->
<div id="nk2_2" style="right: -300px; z-index: 9997; background: #ffffff; padding: 0px; width: 300px; height: 398px; position: fixed; top: 264px; border: 0px solid #FFFFFF">
  <a href="#"></a><img style="position: absolute; left:-33px; top:3px" src="nk2.png" />
  <div style='background-color:#2B608C;'>
  <script type="text/javascript" src="https://0.s-nk.pl/script/nk_widgets/nk_widget_core"></script>
  <script type="text/javascript" src="https://0.s-nk.pl/script/nk_widgets/nk_widget_code"></script>
  <script type="text/javascript">
  new  NkWidgetSledzikShoutList({
   user: {
   uid: 4807950
   },
   theme: {
   widget_border_color: '#2B608C',
   widget_background_color: '#ffffff',
   header_text_color: '#ffffff',
   header_background_color: '#2b608c',
   stripe_background_color: '#a1d262',
   shout_text_color: '#475058',
   shout_date_color: '#9aa7b2',
   shout_link_color: '#2b74b0',
   shout_border_color: '#e1e7ed'
   },
   count: 10,
   width: 300,
   height: 400
  }).init()
  </script>  
  </div>
</div>
<!--KONIEC WIDGET NASZA-KLASA-->

<!--WIDGET YOUTUBE-->
<div id="youtube2_2" style="right: -304px; z-index: 9996; background: #ffffff; padding: 0px; width: 300px; height: 104px; position: fixed; top: 367px; border: 2px solid #3C3C3C">
  <a href="#"></a><img style="position: absolute; left:-33px;" src="youtube.png" />  
  <iframe id="fr" src="https://www.youtube.com/subscribe_widget?p=KatMPBSoft" style="overflow: hidden; height: 105px; width: 300px; border: 0;" scrolling="no" frameBorder="0"></iframe>
</div>
<!--KONIEC WIDGET YOUTUBE-->

<!--WIDGET GOOGLE+-->
<div id="googleplus2_2" style="right: -304px; z-index: 9995; background: #ffffff; padding: 0px; width: 300px; height: 118px; position: fixed; top: 474px; border: 2px solid #00569F">
  <a href="#"></a><img style="position: absolute; left:-33px;" src="google.png" />  
  <!-- Place this tag where you want the badge to render -->  
  <div class="g-plus" data-href="https://plus.google.com/108803486747646510695" data-width="300" data-height="131" data-theme="light"></div>
</div>
<!--KONIEC WIDGET GOOGLE+-->

</body>
</html>
 



FACEBOOK - przygotowany dla paska bocznego
Linie kodu odpowiadające za połączenie z facebook dla HTML w wersji 5 (aby działało to dla Twojej strony facebook podmieniasz linię 14 [widoczną poniżej], a dokładnie atrybut data-href=""):
[Pamiętaj także o ścieżce do pliku ze zdjęciem dla wysuwanego paska bocznego]
Tylko w części BODY:
<!--WIDGET FACEBOOK-->
<div id="fb-root"></div>
<script>(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/pl_PL/all.js#xfbml=1";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
<div id="facebook2_2" style="right: -304px; z-index: 9999; background: #ffffff; padding: 0px; width: 300px; height:550px; position: fixed; top: 50px; border: 2px solid #3B95D8">
  <a href="#"></a><img style="position: absolute; left:-33px;" src="facebook.png" />  
  <div class="fb-like-box" data-href="https://www.facebook.com/pages/KatMPBSoft/145582058840684" data-width="300" data-height="550" data-show-faces="true" data-stream="true" data-header="false"></div>
</div>
<!--KONIEC WIDGET FACEBOOK-->



Nastąpiła zmiana kodu Twitter Widget - globalnie w całym Internecie dla Twitter - nasz skrypt już jest do niego dostosowany.
Informacja dla Wszystkich tych, którzy korzystają ze starej wersji skryptu dla Twitter.


TWITTER - przygotowany dla paska bocznego
Linie kodu odpowiadające za połączenie z twitter dla HTML w wersji 5 (aby działało to dla Twojej strony twitter podmieniasz linię 36 [widoczną poniżej], a dokładnie atrybut setUser('')):
[Pamiętaj także o ścieżce do pliku ze zdjęciem dla wysuwanego paska bocznego]
To jest dla starej wersji widget twitter już nie wspieranej przez twitter widget.
Dla nowych wersji twitter widget stosujesz linie 40,41 i 42.
Oraz korzystasz z tego linku: patrz - warunek musisz być zalogowany na Swoim konto twitter i musisz utworzyć Swój własny widget twitter na Swoim koncie twitter.
Tylko w części BODY:
<!--WIDGET TWITTER-->
<div id="twitter2_2" style="right: -300px; z-index: 9998; background: #ffffff; padding: 0px; width: 300px; height: 437px; position: fixed; top: 157px; border: 0px solid #FFFFFF">
  <a href="#"></a><img style="position: absolute; left:-33px; top:3px" src="twitter.png" /> 
  <div style='background-color:#809EFF;'>  
  <!-- STARY KOD TWITTER - już nie wspierany przez Twitter Widget
  <script charset="utf-8" src="https://widgets.twimg.com/j/2/widget.js"></script>
  <script>
  new TWTR.Widget({
        version: 2,
        type: 'profile',
        rpp: 20,
        interval: 6000,
        width: 300,
        height: 350,
        theme: {
            shell: {
                background: '#809EFF',
                color: '#ffffff'
            },
            tweets: {
                background: '#ffffff',
                color: '#000000',
                links: '#ff0000'
            }
        },
        features: {
            scrollbar: true,
            loop: false,
            live: true,
            hashtags: false,
            timestamp: true,
            avatars: true,
            behavior: 'all'
        }
  }).render().setUser('KatMPBSoft').start();  
  </script>
  -->

  <!-- NOWY KOD TWITTER - wspierany przez Twitter Widget-->
  <a class="twitter-timeline" href="https://twitter.com/KatMPBSoft" data-widget-id="278760694994837504">Tweets by @KatMPBSoft</a>
  <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>

  </div>
</div>
<!--KONIEC WIDGET TWITTER-->




GOOGLE+ - przygotowane dla paska bocznego
Linie kodu odpowiadające za połączenie z google+ dla HTML w wersji 5 (aby działało to dla Twojej strony google+ podmieniasz linię 4 i 19 [widoczną poniżej], a dokładnie atrybuty href="" i data-href=""):
[Pamiętaj także o ścieżce do pliku ze zdjęciem dla wysuwanego paska bocznego]
W części HEAD:
<!--WIDGET GOOGLE+-->
<!-- Place this tag in the <head> of your document -->
<link href="https://plus.google.com/108803486747646510695" rel="publisher" /><script type="text/javascript">
window.___gcfg = {lang: 'pl'};
(function() 
{var po = document.createElement("script");
po.type = "text/javascript"; po.async = true;po.src = "https://apis.google.com/js/plusone.js";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(po, s);
})();</script>
<!--KONIEC WIDGET GOOGLE+-->

W części BODY:
<!--WIDGET GOOGLE+-->
<div id="googleplus2_2" style="right: -304px; z-index: 9995; background: #ffffff; padding: 0px; width: 300px; height: 118px; position: fixed; top: 474px; border: 2px solid #00569F">
  <a href="#"></a><img style="position: absolute; left:-33px;" src="google.png" />  
  <!-- Place this tag where you want the badge to render -->  
  <div class="g-plus" data-href="https://plus.google.com/108803486747646510695" data-width="300" data-height="131" data-theme="light"></div>
</div>
<!--KONIEC WIDGET GOOGLE+-->




YOUTUBE - przygotowany dla paska bocznego
Linie kodu odpowiadające za połączenie z youtube dla HTML w wersji 5 (aby działało to dla Twojej strony youtube podmieniasz linię 5 [widoczną poniżej], a dokładnie atrybut src=""):
[Pamiętaj także o ścieżce do pliku ze zdjęciem dla wysuwanego paska bocznego]
Tylko w części BODY:
<!--WIDGET YOUTUBE-->
<div id="youtube2_2" style="right: -304px; z-index: 9996; background: #ffffff; padding: 0px; width: 300px; height: 104px; position: fixed; top: 367px; border: 2px solid #3C3C3C">
  <a href="#"></a><img style="position: absolute; left:-33px;" src="youtube.png" />  
  <iframe id="fr" src="https://www.youtube.com/subscribe_widget?p=KatMPBSoft" style="overflow: hidden; height: 105px; width: 300px; border: 0;" scrolling="no" frameBorder="0"></iframe>
</div>
<!--KONIEC WIDGET YOUTUBE-->




NK - przygotowana dla paska bocznego
Linie kodu odpowiadające za połączenie z nasza-klasa dla HTML w wersji 5 (aby działało to dla Twojej strony nasza-klasa podmieniasz linię 11 [widoczną poniżej], a dokładnie atrybut uid:):
[Pamiętaj także o ścieżce do pliku ze zdjęciem dla wysuwanego paska bocznego]
Tylko w części BODY: 
<!--WIDGET NASZA-KLASA-->
<div id="nk2_2" style="right: -300px; z-index: 9997; background: #ffffff; padding: 0px; width: 300px; height: 398px; position: fixed; top: 264px; border: 0px solid #FFFFFF">
  <a href="#"></a><img style="position: absolute; left:-33px; top:3px" src="nk2.png" />
  <div style='background-color:#2B608C;'>
  <script type="text/javascript" src="https://0.s-nk.pl/script/nk_widgets/nk_widget_core"></script>
  <script type="text/javascript" src="https://0.s-nk.pl/script/nk_widgets/nk_widget_code"></script>
  <script type="text/javascript">
  new  NkWidgetSledzikShoutList({
   user: {
   uid: 4807950
   },
   theme: {
   widget_border_color: '#2B608C',
   widget_background_color: '#ffffff',
   header_text_color: '#ffffff',
   header_background_color: '#2b608c',
   stripe_background_color: '#a1d262',
   shout_text_color: '#475058',
   shout_date_color: '#9aa7b2',
   shout_link_color: '#2b74b0',
   shout_border_color: '#e1e7ed'
   },
   count: 10,
   width: 300,
   height: 400
  }).init()
  </script>  
  </div>
</div>
<!--KONIEC WIDGET NASZA-KLASA-->




Mając tak przygotowane serwisy społecznościowe umieszczone na odpowiednia spreparowanych warstwach (div-ach), przystępujemy do użycia JQuery.
Linie kodu odpowiadające za obsługę jQuery dla HTML w wersji 5 służą do animacji wysuwanych poszczególnych pasków bocznych - każdego z osobna:
W części HEAD:
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></script>

W części BODY:    
<script type="text/javascript">
 //<[!CDATA[
  jQuery.noConflict();
  
  jQuery(document).ready(function() {   
      
   jQuery("#googleplus2_2").hover(function(){    
    jQuery(this).stop(true,false).animate({right: "0px"}, 500 );   
   },
   function(){ 
    jQuery("#googleplus2_2").stop(true,false).animate({right: "-304px"}, 500 );
    
   });   
         
   jQuery("#facebook2_2").hover(function(){    
    jQuery(this).stop(true,false).animate({right: "0px"}, 500 );   
   },
   function(){ 
    jQuery("#facebook2_2").stop(true,false).animate({right: "-304px"}, 500 );    
   });
      
   jQuery("#twitter2_2").hover(function(){    
    jQuery(this).stop(true,false).animate({right: "0px"}, 500 );   
   },
   function(){ 
    jQuery("#twitter2_2").stop(true,false).animate({right: "-300px"}, 500 );    
   });
         
   jQuery("#youtube2_2").hover(function(){    
    jQuery(this).stop(true,false).animate({right: "0px"}, 500 );   
   },
   function(){ 
    jQuery("#youtube2_2").stop(true,false).animate({right: "-304px"}, 500 );    
   });
       
   jQuery("#nk2_2").hover(function(){    
    jQuery(this).stop(true,false).animate({right: "0px"}, 500 );   
   },
   function(){ 
    jQuery("#nk2_2").stop(true,false).animate({right: "-300px"}, 500 );    
   });
  });   
 //]]>
</script>



I to już wszystko, pozostaje jeszcze do omówienia kwestia osadzenia pasków bocznych w serwisie blogger.com, na Swoim blogu.

Robimy to w głównym szablonie Swojego bloga i postępujemy identycznie jak dla zwykłej strony www.
Blog w serwisie blogger.com jest zawsze zgodny z HTML w wersji 5, więc opisane powyższe kody sa jak najbardziej kompatybilne.

Wszystko co było opisane i co znajduje się w części HEAD umieszczamy w naszym szablonie bloga tuż przez końcem znacznika </head>.
Wszystko co było opisane i co znajduje się w części BODY umieszczamy w naszym szablonie bloga tuż przez końcem znacznika </body>.
Wyjątek stanowi część kodu jQuery, która na stronie www, nie powiązanej z blogger.com, była umieszczona tuż za znacznikiem <body>, w serwisie blogger.com na naszym blogu musi być w części HEAD, tuż przez końcem znacznika </head>

I to by było na tyle miłej zabawy, :)


Każdy mój post, dotyczący w mniejszym lub większym stopniu programowania internetowego jest zawsze kompatybilny z IE od wersji 7, z Firefox od wersji 3.6.3, z Opera od wersji 9.63, z Safari od wersji 5.x i z Chrome od wersji aktualnej