piątek, 19 grudnia 2008

Skala stresu Holmes'a i Rahe (SRRS)

Tak się nazywa jedna z tabel którą dostałem na warsztatach "Walki ze stresem" w listopadzie 2006r. Warsztaty były zorganizowane w ramach programu odnaleźć siebie przez Katedre Psychiatrii Collegium Medicum UJ. Na szkolenie (może tu niektórych zaskocze) trafiłem przez mailing biura karier(a jednak się przydaje :) z uczelni.

Warsztaty poruszały tematy takie jak: zagadnienie stresu, indywidualna analiza reakcji pod wpływem stresu, strategia decyzyjna, trening asertywności, elementy nlp.
Zajęcia trwały cały dzień i szedłem na nie z założeniem że niczego nowego się nie dowiem. I to było błędne założenie:) Jeszcze nigdy nie byłem tak zrelaksowany jak po wyjściu z warsztatów. W tabeli o której mówię są zaznaczone różne traumatyczne wydarzenia które możemy spotkać na swojej drodze i mają one przypisane pewne jednostki, nazywane "jednostki zmiany życiowej(LCU)". I tak np. śmierć współmałżonka ma najwyższą wartość 100LCU a najmniejsze wydarzenie w tej tabeli to "pomniejsze naruszenie prawa"(czyt. przejście na czerwonym świetle) 11 jednostek. Jeśli teraz zsumujemy wszystkie wydarzenia (LCU) z naszego życia z ostatnich 2 lat to dostaniemy pewną liczbę. I teraz jeśli ta liczba jest w przedziale:
>300 to mamy 80% prawdopodobieństwa wystąpienia choroby
200-299 50%
150-199 33%

Ale po co właściwie o tym piszę? No cóż przede wszystkim są to ciekawe zagadnienia po drugie kilka godzin temu dowiedziałem się że moja firma upadła/została przejęta/zbankrutowała* a to oznacza że utrata pracy to wydarzenie które "dodaje" 47 LCU do mojego życia. Samymi liczbami jednak nie ma sensu się przejmować. Pamiętam że gdy liczyłem ten wskaźnik na warsztatach to powinienem już dawno się przekręcić. Hmm skoro skok z działającego samolotu przeżyłem to z utratą pracy nie powinno być problemu. Mimo wszystko stres to stres, nawet przed świetami. Dlatego moją pierwszą reakcją było:
"Idę pobiegać" w ten sposób zainaugurowałem pierwsze bieganie po śniegu.

poniedziałek, 15 grudnia 2008

Absencja chorobowa

Z racji sielskiego okresu szybko zbliżających się świąt a także z powodu że główny produkt jest w końcowej fazie testów, w której nowe defekty praktycznie już się nie "generują", postanowiłem sprawdzić tą niepotwierdzoną teorię dotyczącą absencji chorobowej. Wynik był dość ciekawy i przyniósł kilka informacji np.:

- średnia ilość dni opuszczonych w roku z powodu choroby na pracownika wyniosła 7,
- do najbardziej chorowitych miesięcy należy grudzień(w tym roku kryzys, koniec projektu, swieta), kwiecień(wielkanoc), sierpień i wrzesień (powroty z urlopów), styczeń i luty należy do średnio chorowitych,
- nie można jednoznacznie ocenić że osoby najwięcej chorujące są najmniej produktywne, choć można się pokusić o taką analizę. Zdarza się że pracownik rozchorowuje się w momencie przeciążenia pracą/zadaniami (nadgodziny).

Moje wyliczenia powstaly w ciagu 20min na arkuszu kalkulacyjnym i z powodu utraty niektórych danych mogą nieznacznie odbiegać od faktycznych.

Podsumowując: jeśli byłby to zgrany wieloletni zespół taka wiedza może być bardzo pożądana dla (nowego/starego) project manadżera.

Niestety miałem dostęp tylko do danych z roku 2008 a cofając się jeszcze rok wcześniej mogłoby dać ciekawsze i dokładniejsze wyniki.

niedziela, 7 grudnia 2008

Chińska zagadka

Na tę chińską zagadkę natrafiłem kiedyś przypadkowo podczas kursu z Sharepoint'a polecam:

"Dla nie znających chińskiego:
- musisz przetransportować wszystkich na drugą stronę
- tratwa zabiera tylko 2 osoby
- sterować tratwą potrafią jedynie: ojciec, matka i policjant
- matka nie może przebywać z synami bez ojca
- ojciec nie może przebywać z córkami bez matki
- złodziej nie może przebywać z członkami rodziny bez policjanta
- zaczyna się grę klikając w niebieskie kółko"

Mnie udało się ją rozwiązać z naszym prowadzącym kurs w jakieś 5-10minut :) Co ciekawe wiele firm z branży IT wykorzystuje ją przy rekrutacji.

czwartek, 13 listopada 2008

Explorer View w Sharepoint

Co jesli nie Sharepoint 2007 nie chce wyswietlać struktury katalagów w Explorer View?
Ja poza doinstalowaniem sp1 :) dołożyłem jeszcze:
- webdav w IIS na serwerze,
- IE7 na maszynie klienckiej,
- i najważniejsze ze wszystkich: Software Update for Web Folders (KB907306)

Ten ostatni dodatek powinien być na każdej maszynie klienckiej. Explorer View włącza nam opcję przeglądania struktury np. Document Library w oknie przeglądarki tak jak "ulubiony" explorer w windows. Niestety explorer view nie zachowuje się tak dobrze jak jego formsowy brat. Problemy objawiają się tym że explorer view nie wszystko sobie odświeża w odpowiednim czasie. I tak po przeniesieniu katalogu w nowe miejsce i odświeżeniu nowego miejsca okazuje się że tego katalogu wcale tam nie ma. Choć w Columns View faktycznie istnieje, najfajnieszje jest to że to zachowanie jest niedeterministyczne. Jak do tej pory nie udało mi się znaleźć odpowiedniej poprawki.
Jeśli potrzebuje kopiować przenosić z Explorer view to używam go zamiennie z Columns View.

piątek, 7 listopada 2008

Aktualny katalog aplikacji

Zazwyczaj do tej pory aby pobrać aktualną ścieżkę do programu zawsze używałem:
Environment.CurrentDirectory, ostatnio okazało się że nie zawsze dostaje ścieżkę której oczekuje :)
Przykładowo jeśli utworzymy szybką konsolową aplikację taką jak:

using System;
using System.Windows.Forms;

namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Environment.CurrentDirectory);
Console.WriteLine(Application.StartupPath);
Console.ReadLine();
}
}
}


a następnie utworzymy do niej defultowy skrót na pulpicie to co nam wyświetli aplikacja po uruchomieniu?:

C:\Documents and Settings\mak\My Documents\Visual Studio 2005\Projects\testPath\
ConsoleApplication3\bin\Debug
C:\Documents and Settings\mak\My Documents\Visual Studio 2005\Projects\testPath\
ConsoleApplication3\bin\Debug

ok, a teraz jeśli usuniemy z propertisów skrótu opcję: "Start in" ?:

C:\Documents and Settings\mak\Desktop
C:\Documents and Settings\mak\My Documents\Visual Studio 2005\Projects\testPath\
ConsoleApplication3\bin\Debug

Wyników komentować nie trzeba:)

czwartek, 6 listopada 2008

IV Seminarium Krakowskiej Grupy Regionalnej SPMP

Miałem okazję ostatnio uczestniczyć w seminarium KGR na WSE w Krakowie.
Były to dwa około godzinne wykłady:
W1: Motywowanie członków zespołów projektowych - GRZEGORZ SIKORA
W2: "Mocne i słabe strony oprogramowań wspomagających zarządzanie projektami typu open source" - KRZYSZTOF CZOBA

Jeśli chodzi o W1 to był to wykład bardziej poświęcony tematyce Przywództwa niż motywowania. Wykład był podzielony logicznie na dwa tematy: skuteczne działanie(jak dla mnie autor streścił w pół godziny książkę Coveya swoimi słowami) i przywództwo. W drugiej częsci też wydaje mi się że wykład był poprowadzony na podstawie jakiejś książki. Z której między innymi zapamietałem fajny cytat:
"Lider za którym nikt nie podąża to spacerowicz"

Drugi wykład W2 prowadzony przez Krzystofa Czobe(kierownika działu IT jednej ze śląskich firm) dotyczył głównie programu dotproject. Od razu wiadomo było że autor nie ma wykształcenia informatycznego i jest bardziej domorosłym informatykiem, ale ta wiedza całkowicie mu wystarcza do zarządzania działem IT. Z tego wykładu najbardziej spodobała mi się jedna z ekonomicznych zasad o której pierwszy raz usłyszałem - Zasada ABC.

Jeśli chodzi o samą organizacje seminarium to wszystko było jak najbardziej wporządku i myślę że przy każdym takim evencie będę chciał w nim uczestniczyć.

ContextMenu, ToolStripMenuItem, Checked

Defaultowe zachowanie ContextMenu polega na tym że po wybraniu konkretnego elementu, context menu sie chowa. A co w przypadku kiedy nie chcemy żeby się chowało ? Przykładowo mamy Context Menu które oczywiście się otwiera po przyciśnięciu prawym klawiszem myszy i jest generowane dynamicznie. Zazwyczaj niech zawiera 2-3 stałe przyciski(ToolStripMenuItem) i do kilkunastu ToolStripMenuItem z włączaną opcją Checked. Ktoś odpowie ale to już nie jest defaultowe context menu i w tym celu należy użyć customowej kontrolki i pewnie ma rację. Ale ContextMenu supportuje nam bardzo fajny propertis:

m_ContextMenuStrip.AutoClose = false;

AutoClose pozwala nam po zdarzeniu kliknieciu na Item w ContextMenu nie zamykać go.
Nie ma róży bez kolców :) ContextMenu będzie teraz wisieć nam wiecznie, i niestety trzeba wygenerować jego zamknięcie przy zdarzeniach generowania samego ContextMenu.
Czyli jeśli wyłączamy AutoClose to automatycznie kliknięcie poza obszar ContextMenu nie spowoduje jego zamknięcia.

W moim przypadku było akurat drzewo(TreeView) które dla każdej gałęzi(node) i korzenia(root) mogło wygenerować inne Context Menu i odbywało się to na zdarzeniu MouseUp.

Więc rozwiązaniem problemu wiszącego ContextMenu jest:

protected override void StructureTreeView_MouseUp(object sender, MouseEventArgs e)
{
if (m_ContextMenuStrip.Visible)
{
m_ContextMenuStrip.Visible = false;
m_ContextMenuStrip.Close();
}

if (e.Button != MouseButtons.Right)
return;

m_ContextMenuStrip.Items.Clear();
...
m_ContextMenuStrip.AutoClose = false;
m_StructureTreeView.SelectedNode = node;
m_ContextMenuStrip.Show(m_StructureTreeView, new Point(e.X, e.Y));

}


Tak więc w przypadku jakimkolwiek kliknięciu poza obszar ContextMenu, pierwszy if sprawdzi czy jest ono otwarte(Visible) i je sobie zamknie :)

Ma to jednak jeszcze jeden bug którego nie udało mi się rozwiązać ale który nie jest aż tak strasznie dokuczliwy. Otóż jeśli otworzymy ContextMenu i uruchomimy InternetExplorera to ContextMenu będzie przez niego prześwietlać :)

niedziela, 26 października 2008

Agile

Nowa, rodzima, inicjatywa agileowa w formie podcastów: agiletuning.pl

niedziela, 19 października 2008

Prawda czy fałsz?

Absencja chorobowa może być znacznym wyznacznikiem tego że coś się dzieje źle w projekcie/firmie. Dzisiaj usłyszałem takie stwierdzenie od jednego ze starszych i profesjonalnych Project Managerów. Coś w tym musi być. Przykładowo jeśli w projekcie kierownik jest zamordystą to pod wpływem stresu układ immunologiczny może być znacznie osłabiony. Z drugiej strony jeśli w projekcie/firmie nie ma co robić to nuda/monotonia - to też stres - ma też na nas negatywny wpływ. Ale w obu przypadkach wszystko jest w naszych rękach:)

poniedziałek, 13 października 2008

Zboczenie czy normalne?

Grzyby zbieram od 20 lat:)(co prawda amatorsko). Niestety z biegiem lat, ale głównie z powodu pracy i częstych delegacji wypadło że w tym roku byłem tylko raz na grzybach. W zeszłą sobotę łaziłem w lesie dobre 4h ale udało się uzbierać "symboliczne" wiaderko. Co ma grzybobranie do tytułu postu?

Większość starych grzybiarzy ma swoje miejsca. Ale czy jak wchodzą do nowego, obcego lasu to prawdopodobnie nie zastanawiają się gdzie szukać grzybów tylko robią to już podświadomie. Ja będąc w ten weekend w "swoim miejscu" szedłem bez zastanowienia bo wiedziałem że grzyby będą na mnie czekać. Ale gdybym był tam pierwszy raz to co?
W myślach zacząłem wyodrębniać zasady dzięki którym znajduje kolejne podgrzybki:
1. szukałbym pod starszymi drzewami iglastymi(sosna,świerk, jodła),
2. najczęściej można je spotkać w okolicach pnia, mały jałowiec może zwiększać prawdopodobieństwo.
3. mech nie może być wybujały bo to zmniejsza prawdopodobieństwo wystąpienia
4. znajdując jednego jest duże prawdopodobieństwo na znalezienie rodzeństwa w okolicy
ale nie wiecęj niż 5 - grzybnia.
5. najciemniej może być pod latarnią czyli przy leśnej drodze

Teraz to co jest faktycznym problemem dla człowieka. Grzyby mają to do siebie że swój kapelusz potrafią ubarwiać do otoczenia i czasami trudno jest ich dostrzec.
Te proste 5 powyższych zasad które na szybko skleciłem w lesie może i się sprawdza akurat do tego lasu w którym byłem ale już może się mieć nijak do innej nieprzebytej gęstwiny.

Snujac się za grzybami w sobote zacząłem się zastanawiać czy pojawi się kiedyś jakieś rozwiązanie technologiczne które potrafiłoby znajdować automatycznie grzyby w lesie. Mam tu na myśli puszczenie w las jakiegoś robota który by "mądrze" wyszukiwał grzyby a nie latał chaotycznie przez cały las i skanował wszystko łącznie z muchomorami.
Jaki miałby engine? Jakie czujniki? Jak bardzo byłby skąplikowanym urządzeniem ?
Jak się dowie że grzyb jest co prawda jadalny ale jest zjedzony przez robaki?

Przyszło mi też na myśl że już dzisiaj możemy za pomocą rozwiązań geosatelitarnych rozpoznać typ lasu, podłoże na jakim rośnie, ewentualne choroby drzew, wiek, statystyki odwiedzania przez grzybiarzy(samochody na zdjęciach satelitarnych), temperatury w nocy, monitorować pogodę i opady, etc,...
A więc określić teoretycznie w jakiej częsci lasu może być najwięcej grzybów.
Skoro studenci mogą już zbudować takie urządzenie ile zajmie czasu na automat znajdujący grzyby ?
Hmmm tylko po co ? W końcu na grzyby chodzimy dla przyjemności i dla relaksu :P

poniedziałek, 6 października 2008

"zjedz te żabe"

Ostatnio natknąłem się na bardzo fajną pogadankę starszego kolegi Marcina Celeja:


Cele i zadania - zjedz te żabe from Marcin Celej on Vimeo.

niedziela, 28 września 2008

E51 i Symbian S60

Po przejściu do "jedynej słusznej sieci" czyt. Playa i wybraniu nowego gadżetu w postaci Noki E51 zakochałem się w Symbianie. O ile wcześniej uważałem że telefon ma służyć tylko do dzwonienia i smsów - przez 3 lata K700 całkowicie spełniał moje wymagania. O tyle teraz po przejściu na E51 stwierdziłem że telefon może robić więcej(funkcję symbiana i niektóre aplikację):
- wifi i opera mini
- fring - aplikacja dzieki ktorej mozna wykorzystywac wifi i np skypa zamiast sieci GSM przy rozmowach głosowych
- barbelo - aplikacja a'la netStumbler na Symbiana
- framework Pythona - pisanie własnych i ściąganie gotowych skryptów z netu (nie trzeba umieć pisać aplikacje na symbiana żeby korzystać z możliwości telefonu)
- symbian ma zaimplementowaną pewną formę wielozadaniowości - odpalona aplikacja może działać w tle,
- gps przez bluetooth - niby nic szczególnego ale takie aplikacje jak nokia maps czy nokia sport tracker robią już z niego mały gadżet dla sportowców

Telefon potrafi się też integrować i synchronizować ze skrzynką Exchangową, nie ma też problemu na integracje z Gmailem ("Gmail for Mobile") czy z kalendarzem Googl'a ("GooSync").
Niestety nie ma róży bez kolców do wad telefonu należy słaba bateria, a do wad symbiana to że instalowanie podpisanych aplikacji jest co najmniej kłopotliwe zaś sam
system raz na dwa tygodnie wymaga restartu bo potrafi się zawiesić.

niedziela, 14 września 2008

Scrum

Przypadkowo w sieci natrafiło mi się dzisiaj na fajny wykład z kwintesencją Scrum'a:


Andrzej Brandt "Scrum - prosta metoda na skomplikowane projekty" from adamus on Vimeo.

piątek, 29 sierpnia 2008

czwartek, 28 sierpnia 2008

Basenova

W zeszłym roku będąc na Chorwacji zachwycałem się niezwykłą śródziemnomorską florą w połączeniu z pięknem otaczających gór. Nigdy czegoś takiego nie widziałem i czułem się wyśmienicie w takim krajobrazie. Nie wiem jak jest tam w zimie ale lato mógłbym tam spędzać całe. Dziwne jest to że będąc kilka razy nad Bałtykiem przyzwyczaiłem się do myśli że teren przy morzu musi być płaski. Wracając do Chorwacji, jednocześnie ciepłe i bogate morze i pejzaż gór. Pomyślałem że szkoda że w Polsce nie ma czegoś tak uroczego. I tu się trochę zdziwiłem, co prawda nie w Polsce ale 3h drogi od Krakowa, niedaleko za granicą ze Słowacją jest położony Thermal Park Besenowa. Nic więcej nie potrzeba niż leżeć w gorących wodach (26-39C) w doborowym towarzystwie i podziwiać krajobraz Tatr. Jeszcze lepsze widoki można znaleźć kilka kilometrów od Besenovej na plaży nad Liptovskim Marem-tylko temp wody już zbliżona do Bałtyku:) Poza tym baseny są otwarte cały rok i nie mogę się doczekać aby wyskoczyć tam nawet na jeden dzień w zimie na narty a później na te gorące źródła:)

TreeView i checkbox

Ostatnio implementowalem obsluge drzewa z checkboxami. Defultowo jest taka kontrolka we Frameworku 2.0 zwana TreeView w której jeden z propertiesów nazywa się CheckBox. Niby wszystko fajnie ale co w przypadku gdy chcemy mieć funkcjonalność którą często można spotkać w różnych instalatorach, chodzi mi o noda checkboxem który robi się szary jeśli jeden z jego dzieci zostanie zaznaczony ale nie wszystkie:)






















No więc okazuje się że Checkboź zaimplementowany w TreeView wcale nie jest checkBoxem jaki znamy - a dostęp do niego jest mocno ograniczony. Dokładnie jest to rysunek a nie kontrolka którą dla każdego noda przechowuje TreeView. Żeby sobie z tym poradzić należy przedziedziczyć TreeView i odpowiednio zmodyfikować: do imagelisty TreeView zapakować trzy bitmapy z zaznaczonym checkboxem, czystym i szarym zaznaczonym. Trzeba jeszcze przechwycic eventy klikniecia myszką i odpowiednio zmodyfikować eventy TreeView. Do wad tego rozwiązania należy zaliczyć że ImageListe mamy już zajętą i nie dodamy nowych icon obok nodów.

Implementacji tego podejścia jest kilka na codeprojectcie:

sobota, 16 sierpnia 2008

konkurencja

Czy interesujesz się produktem który sprzedaje Twoja firma? Czy interesujesz się rynkiem w którym Twoja firma działa? Czy z ciekawości przeglądasz i interesujesz się wynikami Twojej spółki i przyszłością rynku na którym działa? Czy wiesz dokładnie na jakim poziomie i co teraz robi konkurencja? Czy znasz produkty konkurencji?

Na te pytania warto znać odpowiedź dzisiaj - nie tylko podczas rozmowy kwalifikacyjnej do której "przygotowując się" developerzy lubią olewać takie informacje.
Firma w której obecnie pracuje oferuje rozwiązanie do wyszukiwania informacji w sieciach korporacyjnych. Brzmi to ładnie ale co za tym idzie? Jest to program (iBox), w skład którego wchodzi kilka modułów do przeszukiwania repozytoriów dokumentów np:
  • NTFS,
  • Sharepointa 2003/2007,
  • Exchange,
  • Active Directory
  • inne: Documentum, Interwoven, bazy zgodne z ODBC,
Repozytoria są przeszukiwane pod względem wyodrębnienia jak największej ilości informacji i przechowywane w specjalnej bazie danych - indexie. Sama informacja nie przedstawia w sobie żadnej wartości o ile jej nie przypiszemy. W języku iBoxa mówimy że dokument został otagowany termem. Term pochodzi z modelu który jest budowany jako szkielet przed wdrożeniem całego rozwiązania. Termem może być dowolna nazwa np. nazwa firmy, imię i nazwisko pracownika, lub nazwa kodowa jogurtu. Później klient może modyfikować model zgodnie z własnymi potrzebami, jeśli np struktura jego firmy się zmieni.

Jednym z konkurentów Interse jest Google i Microsoft (niby konkurencja ale Microsoft Gold Partner jest:). Co do ważniejszego googla to ich rozwiązanie jest zrobione z innej beczki. Do klienta dostarczają metalową puszkę(serwer della) którą klient ma wpiąć w sieć i włączyć a następnie zacząć samemu konfigurować. GSA potrafi zaindeksować do 10 milionów dokumentów i obsługuje większość repozytoriów dokumentów-większą niż iBox. To co wyróżnia GSA w stosunku do iBoxa to wsparcie dla wielojęzyczności. iBox w tym przypadku wspiera wyłącznie angielski, ale nie ma większych przeszkód technicznych żeby taki support wystąpił.

Czy takie informacje pomagają mi w codziennej pracy - oczywiście nie - ale pomagają mi lepiej wstać:)

wtorek, 12 sierpnia 2008

Interejs vs klasa abstrakcyjna

Co jest lepsze? Ostatnio kolega z pracy chce namówić całą resztę do przyjęcia "jedynego słusznego rozwiązania" ;) Nie mam zamiaru się rozwodzić nad podejściem kolegi ani jego zamiarami, argumentami że jedno rozwiązanie (interejs) nie ma kodu i jest puste a do klasy abstrakcyjnej zawsze coś można dodać i innymi argumentami za lub przeciw jednemu lub drugiemu np:
  • architektura rozwiązania obiektowego-diagramy klas,
  • ograniczenia C# - dziedziczenie jednej klasy,
  • ograniczenia biednych skrótów w Visual Studio(to też padło a jakże by inaczej:P - Go to Definition/Declaration)
  • i wiele innych mniej lub bardziej słusznych (bezsensownych)...
Sam problem zaczyna mi przypominać o to który sposób (jedyny słuszny) iterowania wybrać(while do, do while, for, foreach)? Czy warto na to tracić czas? Czy może lepiej wyłapać takie kwiatki(że można niepotrzebny kod wyciąć) podczas code rewiev? Abstrachując od tego że kolega jest dość intelignetny, skromny i stara się każdą swoją linijkę idealnie wpasować w kod.

Zastanawiałem się nad tym na własnym przykładzie i myśle że czasami jestem jak kowal który codziennie hartuje młotki, miecze, podkowy, ...etc i sposób w jaki to robi po prostu wychodzi z niego naturalnie - widzi przed sobą idealnie zrobiony miecz a nie to ile razy w niego będzie walił lub jakiego dokładnie młotka użyje (przy waleniu:P)? Będzie walił tyle razy i takimi narzędziami jakimi uzna za stosowne aby osiągnąć idealny miecz i ani raza więcej.

P.S. W poprzedniej firmie przyszedł do nas praktykant z jednej z dużych krakowskich firm, odszedł z tej firmy bo, miał dość podejścia w którym na spotkaniach poświeconych designie architektury przyszłej aplikacji przez wiele godzin strony nie mogły dojść do konsensusu czy używać klas abstrakcyjnych czy interfejsów w UMLu.

IDisposable i reszta

Ostatnio potrzebowałem zastopować wątki które świadczą "jakieś tam usługi" przy zamknięciu programu. Zastanawiałem się gdzie to najlepiej zrobić i wszelkie moje wątpliwości rozwiał artykuł: IDisposable, Finalizers, Destructors, and the Garbage Man.

piątek, 8 sierpnia 2008

bug w getfiles?

Ostatnio chcialem wydobyc pliki z folderu o określonym rozszerzeniu. W takim przypadku należy skorzystać ze statycznej metody GetFiles z klasy Directory lub DirectoryInfo. Metoda w 2 przeciążonych wywołaniach przyjmuje string oznaczony jako searchPattern. Atrybut ten niestety nie może przyjąć więcej jak jedno rozszerzenie. Co więc zrobić jeśli chcemy poszukać kilku typów plików?

Jedna z metod jest taka żeby GetFiles wykonać na każdym rozszerzeniu i dołączać kolejne wyniki czyli:

ArrayList files = new ArrayList();

foreach (string ext in m_ScanExtensionsList)
{
string[] temp = Directory.GetFiles(path, ext);
if (temp.Length > 0)
{
files.AddRange(temp);
}
}

Niby do zaakceptowania ale:
  • trzeba pamiętać żeby ext bylo w formacie "*.doc"
  • GetFiles zachowuje się dobrze do momentu jeśli poszukwane rozszerzenie ma mniej lub więcej niż 3 znaki. Jeśli będziemy szukać "*.doc" to GetFiles zwroci takze docx, doct, etc. Jeśli będziemy szukać "*.docx" to GetFiles zwróci tylko docx. Czyli w przypadku 3 literowych rozszerzen GetFiles traktuje to tak jakby występowala na koncu * (znak zastepujacy dowolna ilosc znakow). Jest to podobno związane z historycznym 8.3 z DOSa.
Co więcej dokładnie tak zachowuje się koneda systemowa:

C:\Documents and Settings\mak>dir c:\*.xls
Volume in drive C has no label.
Volume Serial Number is 6856-6816

Directory of c:\

06/06/2008 05:52 PM 82,491 20080606 Feature3.xlsx
06/05/2008 10:29 AM 34,915 20080605 Work breakdown v0.05.xlsx
05/29/2008 11:56 AM 16,523 MAK_Plan.xlsx
06/05/2008 03:57 PM 98,816 WeekPlan v0 3.xls
4 File(s) 232,745 bytes
0 Dir(s) 1,040,863,232 bytes free

C:\Documents and Settings\mak>

Druga metoda zeby wyciagnąc wiecej niż jedno rozszerzenie:

DirectoryInfo directory = new DirectoryInfo(path);

ArrayList files = new ArrayList();

foreach (FileInfo file in directory.GetFiles())
{
string ext = file.Extension.ToUpper();
if (m_ScanExtensionsList.Contains(ext))
files.Add(file.FullName);

}

Pytamy więc o wszystkie pliki a później filtrujemy wyniki.

wtorek, 22 lipca 2008

skoki

Kurs teoretyczny trwał 3 dni w którym bylo tez troche godzin na praktyke. "Parszywa 11tka" składała sie z 3 dziewczyn i 8 chłopa. Najmłodszy miał 16 lat najstarszy 2 razy tyle.

Głownie cwiczylismy przyszly wyskok z samolotu, zachowanie po otwarciu spadochronu, sytuacje awaryjne i lądowanie.
Wrażenia niesamowite, pierwszy skok aż ciężko opisać, właściwie nie pamiętam żadnego widoku:)
Adrenalina jest tak wysoka że można zapomnieć o wszystkich poleceniach instruktora, który zresztą z ziemi obserwuje nasze wyjście z samolotu. Jeśli chodzi o strach i panike to jest równie wysoka. Z jednej strony nie wiadomo co Cię czeka, więc teoretycznie możesz się bać lub nie. Z drugiej zdajesz sobie sprawe jak wysoko jesteś i że jedyną rzecz którą możesz zrobić to jak najlepiej wyskoczyć. Przy złym wyjściu jest większe prawdopodobieństwo że źle się otworzy spadochron.
Lądowanie z całego skoku jest łatwe i przyjemne o ile czegoś wcześniej nie pokisiliśmy.
Drugi skok to już całkowicie inna bajka, choć niekórzy koledzy mieli o wiele większy strach. Drugi skok to już większy luz, zdecydowanie, stara się zrobic wszystko jak najlepiej.
Z ciekawostek opowiem że po 2 skokach wieczorem usnąłem jak dziecko. Co ciekawe następnego dnia miałem duże "zakwasy" na udach, podobnie jak koledzy. Prawdopodobnie wszystkie mięśnie były napięte podczas skoków o czym żaden z nas nie zdawał sobie sprawy.

Kompresja Dekompresja tablicy

Jak szybko skompresować tablice baytów?
...
MemoryStream strm = new MemoryStream();
DeflateStream deflate = new DeflateStream(strm, CompressionMode.Compress);
deflate.Write(table,0,table.Length);
deflate.Close();
return strm.ToArray();
...
Dekompresja działa niemal identycznie:
...
MemoryStream strm = new MemoryStream(table);
DeflateStream deflate = new DeflateStream(strm, CompressionMode.Decompress);
byte[] currentTable = new byte[m_Size];
deflate.Read(currentTable, 0, currentTable.Length);
deflate.Close();
return currentTable;
...

poniedziałek, 14 lipca 2008

Urlop

Ostatni tydzień w pracy wypełniony został na zabawie refleksją w .Net-cie.
Często powtarzam że się czymś bawię w programowaniu, bo tak poniekąd jest. Odkąd tylko wpisałem pierwszą linijkę do edytora Turbo Pascala w podstawówce poczułem się jak ktoś "zupełnie wyjątkowy".
Ostatnio znalazlem lepszy zwrot: fun factor - natknąłem się na taki zwrot na blogu alexa - użył tego inżynier dla którego hobby i praca oznaczają to samo. Ile jest osób które podchodzą do tego podobnie? I czy hobby które stało się pracą, nadal jest hobby?
Pomimo jendak fun factor staram się jednak dzielić pracę i przyjemność (Jeśli w pracy bym odpoczywał to co bym robil po pracy;)). Tak więc mam tydzień wolnego z czego spożytkowałem już 3 dni na podziwianie doliny 5 stawów. Pozostałe dni to kurs spadochronowy który zaczyna się w środę i kończy w niedziele.
Dlaczego akurat spadochroniarstwo? Wychodzę z założenia że warto kolekcjonować mocne wrażenia plus jakaś wizja sprawdzenia się.
Jeśli chodzi o wymagania co do przyszłego skoczka to należy być pełnoletnim lub mieć powyżej 16 wiosen i zgode rodziców. Poza tym orzeczenie lekarskie, ubezpieczenie OC, warto mieć też NW.

Badania na skoczka zrobiłem w CM LIM, trwają najkrócej 2 dni i obejmują one:
  • badanie krwi i moczu
  • RTG kręgosłupa
  • spotkanie u laryngologa-popukanie i wywiad
  • wizyta u okulisty-komputerowe badanie, cisnienie galki, odczytywanie obrazow 3d
Na koniec zostaje wizyta u lekarza orzecznika który podejmuje decyzje ostateczną. Wynik zostaje wpisany online do jakiejś tam bazy lotniczej i dostaje się wynik w formie legitymacji czy czegoś podobnego. Same badania są podstawowe i wydają się śmieszne a koszt 200zl wygórowany. Do pozytywnych stron należy zaliczyć możliwość dowiedzenia się czegoś o swoim zdrowiu.

niedziela, 29 czerwca 2008

Gadżet

Ostatnio zakupiłem pulsometr do biegania - gadżet o którym przeczytałem że jeśli raz się go założy to już sie nie zdejmuje. No cóż chciałem sprawdzić i... u mnie dokładnie się potwierdziły te słowa. Zdecydowałem się na jedno z tańszych urządzeń dostępnych na allegro - Medion 15215 - na próbe.
Pomimo niemieckiej instrukcji obsługi już po pierwszym dniu poznałem większość opcji, a jest ich naprawdę sporo. Resztę wiedzy o pomiarze pulsu dla biegaczy znalazłem na necie.
I tak urządzenie pozwala zmierzyć puls przez pas który zakłada się w okolicach mostka. Pas bezprzewodowo przekazuje puls do zegarka na nadgarstku.
Urządzenie sprawdziłem z innym do mierzenia ciśnienia które też mierzy puls, wyniki się pokrywały. Poza stoperami i couterami jest jeszcze pomiar kalorii, pamięć na 12 ostatnich zliczeń, pomiar bmi czy test formy - bieg 1 milowy po którym wyświetlany jest status.

HRmax to nasze maksymalny puls w przypadku mężczyzn jest to 220 - wiek u kobiet 226 -wiek.
Jeśli chcemy schudnąć należy biegać w przedziale 60-70% swojego HRmax, przy czym powinniśmy utrzymać go przez około 60min, w tym przedziale następuje największe spalanie tkanki tłuszczowej. Powyżej tej granicy organizm spala więcej cukru.
Jeśli chcemy utrzymać formę to ciągły bieg powinien być w przedziale 70-80%, powyżej tej granicy
czyli 80-90% zwiększa się jeszcze bardziej wytrzymałość organizmu,
90-100% to wtedy kiedy już wiemy że nie mamy więcej siły do użytku - jest to maksymalny wysiłek i długo na nim nie pociągniemy.
Tak więc urządzenie polecam każdemu i niekoniecznie tanie-droższe urządzenia mają dodatkowe opcje w postaci programów biegowych.

sobota, 7 czerwca 2008

Codecamp.pl

Właśnie wróciłem z codecamp.pl, niestety nie mogłem zostać do końca. Natomiast mogę na żywo skomentować to wydarzenie. Ogólnie bardzo pozytywne, zarówno pod względem organizacyjnym jak i pod względem merytorycznym przygotowania wykładowców.


Najbardziej przypadł mi do gustu wykład:
Bartka Pampucha - Rola developera w projekcie Agile, Bartek dosłownie w praktyce zastosował metodologie agile/scrum co wyglądało tak że omawiał tematy wg ważności. Przy czym uczestnicy konferencji mieli wpływ na to ile czasu może na każdy z podtematów sumarycznie przeznaczyć(Product owner).
Pomimo że zasady scum były mi znane i w większości są stosowane w mojej firmie to dowiedziałem się kilku nowych i ciekawych rzeczy m.in. estymacja zadań -ideal days/hours, planning poker, podejście do tworzenia aplikacji od strony klienta (spływanie funkcjonalności), feedback na opóźnienia zadań, wykonanie ich przed czasem czy wpadające taski.


Drugim nie mniej fajnym wykładem był:
Tadeusza Golonki - Świat się zmienia...Dylematy oprogramowania w 2008 roku. Prezentacja była podzielona na dwa różne tematy. Jeden z nich to podejście od strony businessowej i marketingowej do tego jak będą funkcjonowały firmy za lat 5 lub wcześniej.
Padły skróty takie jak SaaS (software as a service) i S+S (software plus service). W skrócie wkrótce firmy będą płacić abonament dostawcy usług za to że będą mogły korzystać np. z Exchang'a czy CRMu.
Spadają wtedy koszty utrzymania własnej infrastruktury serwerowej na dostawce usługi.
Tadeusz nie omawiał problemów technologicznych tylko schemat jak może taki schemat funkcjonować. W drugiej części omówił wzorcowy schemat prowadzenia projektu uwzględniając swoje doświadczenia z pracy.


Po za tym codecamp zgromadziło pod wspólnym dachem zawodowych programistów i studentów. Więc nie można nie docenić możliwości spotkania i porozmawiania ze znajomymi:)

środa, 28 maja 2008

Dlaczego lubię biegać?

Wszystko zaczęło się na pierwszym roku studiów, a może nawet wcześniej. W każdym razie na efekt koncowy złożyły się dwa fakty. Pierwszy - miałem długą pierwszą sesję z analizą matematyczną, kiedy wszyscy znajomi wyjechali na ferie studenckie ja poznawałem arkana analizy. Drugi - zacząłem czytać magazyn Forma, na którego łamach zachęcano nie tylko do spędzania popołudnia w siłowni. Kilkanaście miesięcy później Forma przekształciła się w Men's Health. I tak się zaczęło.
Początkowo było skromnie, poza tym było to bieganie w zimie, nierzadko po śniegu. Bałem się że moje ćwiczenia zakończą się zapaleniem płuc, ale okazało się że nic takiego się nie stało. Co więcej po "treningu" i zazwyczaj dnia następnego czułem się jak młody bóg. Endorfiny i inne chemikalia uderzały mi do głowy - czułem się cudownie. Nauka matematyki szła bardzo dobrze podobnie później jak egzamin. Później zacząłem szukać informacji jak biegać, kiedy, ile, jak się motywować i jak się ubierać, rozgrzewać, zwiększać dystans i czas. Od tamtej pory biegałem z różną intensywnością - najwięcej trzy razy w tygodniu po ok 45m, najrzadziej raz na miesiąc. Biegałem też o każdej porze dnia i o każdej porze roku.
Zawsze gdy czuję że monotonia mnie przytłacza, potrzebuje świeżego umysłu, czuję się zmęczony i śpiący choć w głebi wiem że tak nie jest, mam ochotę się wyżyć, poprawić kondycję, wtedy idę pobiegać. Warunki atmosferyczne niewiele mają do gadania, jedynie co może mnie ograniczyć to mój leń. Nie biegam gdy choruje lub gdy czuje się znacznie osłabiony. Gdy czuję że mnie bierze choroba - idę pobiegać:) Aktualnie nie biegam regularnie choć były okresy że biegałem przez kilka miesięcy o stałych dniach i porach. Jeśli chcesz zacząć to najlepiej to zrobić dokładnie teraz-doda Ci to adrenaliny i energii. Polecam :)


wtorek, 27 maja 2008

EHLO

Witam na moim blogu:) W końcu udało mi się dołączyć do blogosfery. Postaram się już niedługo dodawać użyteczne posty i przydatne informacje głównie o C#, .NET, ASP, może też być coś o motywacji i rozwoju osobistym.