31 sierpnia 2011

Jak można zapełnić cały dysk i wyjść z tego cało?

Ignorancja to prosta droga do problemów


Pracując na wirtualnej maszynie i po raz kolejny ratując mój SharePoint'owy świat od zagłady, spostrzegłem, że na dysku C zostało mi 10 MB. Byłem zaskoczony, ale cóż mogę zrobić. Usunąłem niepotrzebne pliki na dysku i zyskałem 400MB, poczułem ulgę. Po 20 minutach znowu zabrakło mi miejsca na dysku C, zacząłem wiec myśleć (uff ...w końcu).

Uruchomiłem Process Monitor'a (z SysInternals Suite), ustawiłem filtr na operacje zapisu do plik


zacząłem przeglądać trace'a i ...

19 sierpnia 2011

12 zasad kulturalnego programisty SharePoint'a (Część II - EOM)

Zasad cdn-astąpił


W poprzednim poście opisałem jak "kulturalny" programista SharePoint'a powinien obchodzić się z feature'ami. Tym razem postaram się opisać kolejne 8 zasad dotyczących WebPartów, Event Reciever'ów, zarządzania zasobami serwera oraz ogólną "czystością" środowiska.

WebPart


Przychodzi taki moment w projekcie, że klientowi nie podoba się dany Webpart i chciałby go usunąć ze swojego portfolio (Wepart Gallery). Usłużny programista usuwa niepotrzbną klasę webparta i wrzuca nową wersję biblioteki na serwer produkcyjny. Problemy, które mogą wyniknąć z takiego podejścia opisuję w postach  Test-SPContentDatabase and how to locate MissingWebPart oraz SPLimitedWebPartManager and ErrorWebPart on and off relationship, polecam też KB976218. Użytkownicy zostają z ErrorWebPart'ami wyświetlonymi na stronie i  pozostaje im tylko WebPart'owe sepuku.  Zatem zasadar nr. 5.

Klasa WebPart'a może zostać usunięta po zlikwidowaniu wszystkich instancji Webpart'a znajdujących się na farmie.  

18 sierpnia 2011

12 zasad kulturalnego programisty SharePoint'a (Część I)

Trauma i terapia w jednym


Migracja z MOSS'a 2007 do SharePoint'a 2010 to dla mnie bardzo osobisty temat. Od roku z krótszymi lub dłuższymi przerwami zajmuję się zagadnieniami związanymi z migracją. Przechodzenia na nowszą  wersję SharePoint'a mogłoby być znacznie przyjemniejszym tematem, gdyby każdy był "kulturalnym" programistą SharePoint'a. Co to znaczy "kulturalny" programista SharePointa? Jest to taki jegomość, który po sobie zawsze zostawia porządek, a w szególności kod napisany przez tego jegomościa zawsze po sobie posprząta i nie rozrabia. Okazuje się, że na platformie SharePoint bardzo łatwo można zostawić po sobie bałagan. Jako część terapii post-migracyjnej postanowiłem napisać 12 zasad "kulturalnego" obchodzenia się z SharePoint'em. Przestrzeganie ich grawantuje dłuższe weekendy z rodziną i więcej czasu na łowienie ryb oraz szeroko rozumiane zdrowie psychiczne.  


12 sierpnia 2011

PowerShell i debuggowanie biblioteki .Net

"Reużywalność" w PowerShell'u


Pisząc skrypt w PowerShell'u postanowiłem wywołać metodę z zewnętrznej biblioteki wchodzącej w skład rozwijanego przez mój zespól systemu. Zaimportowałem dll'kę za pomocą metody Assembly.LoadFrom , utworzyłem instancję typu danych i uruchomiłem metodę. Oczywiście otrzymałem wyjątek NullReferenceException, który wskazywał na to, że problem pojawił się w  metodzie z zewnętrzenej biblioteki. Zastanowiłem się chwilę i stwierdziłem, że nie zaszkodziłoby zdebuggować tej metody. Ku mojemu zaskoczeniu, okazało się, że użycie Visual Studio zadziałało bez zarzutu.

11 sierpnia 2011

Why SharePoint 2010 parallel content database upgrade can make your life difficult?

Parallel means faster upgrade




I've been faced with the upgrade of ~200 content databases (~2TB) from MOSS 2007 to SharePoint 2010. Content databases will be hosted on four different SP2010 farms, and the method chosen for the content upgrade was attach-database. This method is using Mount-SPContentDatabase command to attach and upgrade particular database. If upgrade fails for some reason you can restart it by using Upgrade-SPContentDatabase (it worked pretty well for me). Single database can take a significant time to upgrade (e.g. 50GB database took 4h), but the migration time depends on the number of factors (e.g. hardware, network latency, SharePoint data characteristics, disk space available).

05 sierpnia 2011

BackgroundWorker kontra Dispatcher

Co robić gdy użytkownik jest niecierpliwy?


Pracując nad nową wersją Replication Explorer'a postanowiłem ulepszyć UX (User Expirience) dialogu do łączenia się z serwerem (Dystrybutorem replikacji). W aktualnej wersji programu, w momencie gdy użytkownik wciśnie przycisk 'Connect' cały UI przestaje odpowiadać do momentu połączenia z Dystrybutorem. Nie można anulować akcji łączenia, trzeba czekać 30 sekund żeby komunikat o niemożności zlokalizowania serwera został wyświetlony itp.


Rozwiązanie problemu "wiszącego" dialogu musi spełniać następujące warunki:
  • asynchroniczna operacja  w prosty sposób musi zwrócić dane do głównego okna programu
  • przerwanie operacji połączenia powinno być możliwe w każdym momencie, 
  • na czas wykonywania operacji połączenia z serwerem, UI powinno być dalej gotowe na interakcję z użytkownikiem, 
  • w czasie ustanawiania połączenia z Dystrybutorem, UI powinno wyświetlać prostą animację sugerującą, że akcja łącznia trwa,
  • operacja połączenia w prosty sposób musi przekazać informację o ewentualnym błędzie,