Własne spostrzeżenia :

Biblioteka do sqlite jest naprawdę dobra. Schematy wyświetlane są prawidłowo, klasy TableAdapterManagera i poszczególnych adapterów tworzone są wg. templateów MS.

W .NET 3.5 pojawił się element TableAdapterManagera. Jest to chyba stosunkowo nowy objekt. Automatycznie tworzone są też adaptery dla poszczególnych tablic. Dodatkowo dla każdych wywołań tworzona jest transakcja. Nie trzeba pisać samemu obsługi ani programować operacji CRUD dla poszczególnych adapterów. Nie znalazłem na necie za dużo informacji o tym, jak stosować TableAdaptermanagera i Adapterów automatycznie wygenerowanych, podam tu w skrócie, jak ja ich używałem. Wszelkie komentarze mile widziane.

1. Inicjalizowanie obiektów.
a) najpierw tworzę obiekt TableAdapterManagera
b) potem tworzę obiekt konkretnego adaptera dla konkretnej tablicy
c) potem przypisuję TableAdapterManagerowi odpowiedni adapter :

private SkypeResponderDataSetTableAdapters.TableAdapterManager adapterManager;
private SkypeResponderDataSetTableAdapters.skypeUsersTableAdapter usersAdapter;

 

Dodatkowo jeszcze deklaruję DataSet:

private SkypeResponderDataSet ds;

 

Potem w konstruktorze :

ds = new SkypeResponderDataSet();
adapterManager = new SkypeResponder.SkypeResponderDataSetTableAdapters.TableAdapterManager();
usersAdapter = new SkypeResponder.SkypeResponderDataSetTableAdapters.skypeUsersTableAdapter();

 

Potem już tylko wystarczy operować na zainicjalizowanym objekcie DataSeta. Np. procedura dodania usera :

1. Utworzenie nowego wiersza tablicy skypeUsers :

SkypeResponderDataSet.skypeUsersRow sur = ds.skypeUsers.NewskypeUsersRow();

 

2. Mapowanie pól wiersz <- objekt usera

sur.client = sus.Client;
sur.usernick = sus.UserNick;
sur.respondmessage = sus.RespondMessage;
sur.autorespond = long.Parse(auto);
sur.emailsendchatperiod = long.Parse(sus.EmailSendChatPeriod.ToString());
sur.emailchatornot = long.Parse(emailchat);

 

3. Dodanie nowego wiersza do tablicy bazy :

ds.skypeUsers.AddskypeUsersRow(sur);

 

4. Update całego DataSetu.

 
adapterManager.UpdateAll(ds);

 

W trakcie updateAll TableManager wykonuje :
1. W sekcji <Prepare for update> ustawia połączenie + transakcje
2. W sekcji <Commit updates> komituje transakcje i kończy operacje na bazie.

Podczas programowania pojawił się problem, jak wrzucić zapytanie o konkretne wiersze z tablicy.

Adapter dla danej tablicy ma defaultowo ustawionegą operację Fill na select * from <table>. Koniec. Operacja select zapisana jest w kolekcji CommandCollection pod indexem 0. Problem polega na tym, że kolekcja jest prywatna. Ale, co warto podkreślić, klasa adaptera, każdego to partial class :) Stąd możemy sobie w innym miejscu dorobić metodę, która wykorzysta naszą SqlCommand.

 

public partial class skypeUsersTableAdapter
    {
        public int FillWithCustomSelectCommand(SkypeResponderDataSet.skypeUsersDataTable
dataTable, System.Data.SQLite.SQLiteCommand command)
        {
            System.Data.SQLite.SQLiteCommand command1 = this.CommandCollection[0];
            try
            {
                this.CommandCollection[0] = command;
                return this.Fill(dataTable);
            }
            finally
            {
                this.CommandCollection[0] = command1;
            }
        }
    }

 

Najpierw kopiujemy starą komendę, potem wrzucamy do kolekcji naszą,a po wypełnieniu tablicy, przywracamy starą komendę w jej prawowite miejsce. Wydaje mi się, że jest to w miarę rozsądne rozwiązanie.

Podczas tworzenia respondera głosowego, który miał reagować na odpowiednie zdarzenie w systemie klienta i wysyłać komunikat głosowy pod odpowiedni numer VoIP, pojawił się pomysł napisania respondera dla skype’a.
Chodzi o to, że nie zawsze jest możliwość odpowiedzenia na napisaną przez użytkownika do nas wiadomość. Ale nie napisanie czegokolwiek, generalnie może zostać odebrane negatywnie :) . Tak czy siak pojawił się pomysł.

Realizowane zadania :
1. Odpowiadanie na przychodzącą wiadomość, w zależności od użytkownika nas zaczepiającego.
2. Zapamiętywanie historii chatów, sprawdzanie czasu wysłania chatu na maila, wysyłanie historii chatu na maila.
3. Zapisywanie wyjątków do bazy danych.
4. Przechowywanie ustawień odnośnie każdego z użytkowników, do których ma być wysłany autoresponder w podręcznej bazie danych.
5. Włączanie/wyłączanie wysyłania automatycznych emaili i autorespondów.
6. Przyjazne i w miarę czytelne GUI.

Środowisko : .NET 3.5, SQLLite, c#

Potrzebne biblioteki :
1. .NET 3.5 runtime (to przynajmniej)
2. System.Data.SQLite.dll (pełna informacja i downloady : http://sqlite.phxsoftware.com/ )
3. Interop.SKYPE4COMLib.dll (biblioteka do interfejsów skype’a, warto zajrzeć pod adres : https://developer.skype.com/Download )

Uwagi ogólne :
I. Nie odpowiadam, jako autor, za jakiekolwiek uszkodzenia sprzętu, czy systemu operacyjnego, jeśli coś nawali po odpaleniu aplikacji.
II. Nie pobieram żadnych opłat za aplikację, dlatego nie jest ona w żaden istotny sposób wspierana. Uwagi są jednak mile widziane.
III. Udostępniam kod, można sobie to samemu skompilować, żeby nie odpalać exeka z netu, niewiedząc do końca co się odpala.
Przed odpaleniem :
1. Otworzyć plik “SkypeResponder.exe.config”. Łatwo zauważyć, że jest podzielony na sekcje (dokładnie tak to się nazywa) :
a) applicationGeneral – do ogólnych ustawień skypea, istotne tutaj jest tylko ustawienie : timerCheckEveryXMinutes z jakąś wartością. Jeśli 0, to będzie ciągle sprawdzał i się zwiesi (sorry, ale aplikacja nie jest oporna na głupotę)
b) mailconfiguration – ustawienia mailowania : defaultowo port i host ustawione na gmail, można zmienić, trzeba uzupełnić userName i password
c) skypeSettings – trzeba wpisać odpowiednio login (skypeUserName) i hasło (skypePassword) do Skype’a.

W trakcie uruchamiania :
SkypeResponder wbija się w działającego skype’a. Dlatego pojawi się monit skype (zależy od wersji gdzie, czy w okienku głównym skype’a-wersja 3.8, czy w okienku poza głównym oknem skype’a, jak w wersji 4.x) czy zezwolić na połączenie się. Kliknąć trzeba “zezwól” i już.
Po wpisaniu odpowiednich danych wprowadzeniu ich do bazy to by było wszystko.

Środowisko, na którym testowałem aplikację :
Windows XP Professional PL z Service pack 3, .NET 3.5, Skype 3.8.x, Skype 4.x.

Binarki : http://cid-38b583dfccbef4fc.skydrive.live.com/self.aspx/.Public/SkypeResponder%7C_release%7C_1/skyperesponder%7C_release1.zip

Źródła : http://cid-38b583dfccbef4fc.skydrive.live.com/self.aspx/.Public/SkypeResponder%7C_release%7C_1/SkypeResponder%7C_src.zip

Po odinstalowaniu SQL Server 2005 i podczas instalacji SQL Server 2008 instalacja zatrzymuje się  na ok 75%  z opisem, że aktualna akcja to : Install_sql_bids_Cpux86_Action: Write_NativeImage_x86 albo coś podobnego. U mnie chodziło o niepełne odinstalowanie SQL Server 2005. Native Client i pare innych objektów po starym SQL Server 2005 nie zostało odinstalowanych. Podobny problem mieli tu : http://social.msdn.microsoft.com/Forums/en-US/sqlsetupandupgrade/thread/1e43e7c0-13ba-4dcf-b479-aa0fca895912/ no i na to radą jest MS Clean Up :

Windows Installer Cleanup opisany jest tutaj : http://support.microsoft.com/kb/290301 Tam też jest do pobrania.

Po świeżym zainstalowaniu SQL Server 2008 pojawia się  dialog przy próbie zmiany designu dla jakiejś tablicy.

Rozwiązanie : http://msdn.microsoft.com/en-us/library/bb895146.aspx

Podczas instalacji Visual Studio 2008 miałem problem z assembly Microsoft.debugMFC, wyskakiwał błąd 1935 i ciągle zawieszał instalację. Żeby to naprawić trzeba mieć włączoną usługę Windows Update.

Świetną sprawą jest możliwość tworzenia dokumentacji do kodu. Do tego służy świetnie Sandcastle zrobione przez Microsoft. Nie testowałem tego jeszcze na Viście, ale na XP działa rewelacyjnie. I warto się temu bliżej przyjżeć.

Do kompilacji potrzebny jest sam Sandcastle, w miarę nowa wersja windows installera i GUI do Sandcastle.

Pracuje się na tym naprawdę świetnie i bardzo wygodnie. Ważne jest, żeby mniej więcej zaczaić jakich tagów w kodzie używać, żeby to miało ręce i nogi potem podczas tworzenia dokumentacji. Ale potem wszystko jest naprawdę cacy. Serdecznie polecam do tworzenia dokumentacji do kodu.

Potrzebne rzeczy do zainstalowania, żeby generator dokumentacji działał są opisane tutaj : http://www.ewoodruff.us/shfbdocs/Index.aspx?topic=html/8c0c97d0-c968-4c15-9fe9-e8f3a443c50a.htm

Strona do GUI : http://www.codeplex.com/SHFB

tagi stosowane przy tworzeniu dokumentacji do kodu opisane są tutaj : http://msdn.microsoft.com/en-us/library/5ast78ax.aspx

Naprawdę warto przynajmniej na to spojrzeć

Trzy rzeczy, żeby to naprawić :

  1. Wyłączyć Automatyczne wyszukiwanie folderów sieciowych i drukarek (Explorer->Narzędzia->Opcje folderów->Zakładka widok->Odhaczyć odpowiednią opcję “Automatyczne wyszukiwanie folderów sieciowych i drukarek”)
  2. Odłączyć wszystkie dyski sieciowe o ile nie jesteśmy w sieci firmowej i np. korzystamy z lapa w domu.
  3. NAJWAŻNIEJSZE CHYBA!!!! Zalogować się jako kto inny do komputera i wywalić ukryty folder : c:\Documents and Settings\’profile’\Ustawienia lokalne\Dane aplikacji\Microsoft\Windows . Wszystko wróci do normy.

Fajny gadżecik jest dostępny na stronie go.pcworld.pl/73e20, jakby co, to gadżet nazywa się RocketDock. Strona producenta http://rocketdock.com/ Warto wypróbować. Dosyć wolno działa minimalizowanie, ale reszta działa całkiem całkiem.

Kurde, ganiam w tym fallout 3 i ganiam i nie mogę dojść do stacji radia. Wie ktoś może jak tam dojść?