08/10/2010

MTS, MTS i po MTS'sie

Home

W konferencji Microsoft Technology Summit uczestniczyłem już po raz trzeci i ponownie jestem zadowolony. Pierwsze i najważniejsze prawie wszystkie sesje, które wybrałem wypaliły. Po drugie w tym roku było trochę luźniej i człowiek miał więcej przestrzeni wokół siebie. Udało mi się nawet zjeść obiad kulturalnie przy stoliku, a nie siedząc na ziemi. To oczywiście za sprawą mniejszej, o około 400, liczby uczestników w porównaniu do zeszłego roku. Nie wiem czy to kwestia polityki Microsoftu, wyższej ceny uczestnictwa, znudzenia konferencją... ale uważam, że wyszło to konferencji na plus. A więc, co wyniosłem z tegorocznej konferencji?
  • Bardzo pouczająca była dla mnie krótka rozmowa z Chrisem Grangerem, który pracuje w Microsofcie jako PM i był między innymi odpowiedzialny za nowy edytor czy rozszerzalność w VS 2010. Co w tym dziwnego/wyjątkowego? Chris ma 23 lata i zanim przyszedł do Microsoft nie miał styczności z ich produktami! Zapytałem go w jaki sposób został menadżerem. Odpowiedział, że w sumie to nie wie. Miał pracować jako programista ale został zaproszony na jeszcze jedną rozmowę, po której dostał pracę jako menadżer. Pozostaje tylko pogratulować. Zastanawiam się czy taka sytuacja byłaby możliwa w Polsce i jak zostałoby to odebrane przez zespół, w szczególności przez "starszych" pracowników.
  • Zobaczyłem jednych z najlepszych prelegentów jakich widziałem do tej pory. Mam tutaj na myśli głównie Marka Minasi i Davida Chapella. Tego ostatniego oglądałem niestety tylko kilkanaście minut ponieważ musiałem wyjść w ważnej sprawie.
  • Przekonałem się, że tematyka IT Pro to również coś dla mnie. Do tej pory wybierałem raczej sesje dla programistów, w tym roku zdecydowałem się na większe urozmaicenie i był to strzał w dziesiątkę. Szczególnie chwalę sobie sesję Marka Minasi na temat DNSSEC, po prostu super.
  • Zainteresowałem sie tematyką chmury obliczeniowej. To dziedzina jeszcze bardzo młoda i niedojrzała ale wygląda na to, że jesteśmy na to skazani. Może jeszcze nie teraz, może jeszcze nie za rok ale jak powiedział na swojej sesji John Craddock "Can we afford not to?"
  • O Task Parallel Library słyszałem, czytałem ale jeszcze nie używałem. Dzięki bardzo dobrej sesji Cezarego Nalewajki poznałem jej podstawy i teraz tylko czekam na okazję na jej użycie.
  • Dowiedziałem się o wcześniej nie znanym mi typie projektu w VS 2010, a mianowicie o Data-tier Application, który ułatwia instalowanie i konfigurowanie baz danych. Nowością była dla mnie również protokół OData. To wszystko na sesji Tomasza Wiśniewskiego.
  • Obserwując prelegentów nauczyłem się kilku rzeczy. Na przykład pytanie publiczności o to czy wszystko jasne, czy są jakieś pytania zachęca do ich zadawania. Podobny efekt odnosi dziękowanie za pytania. Podobało mi się również jak prelegent wyjaśnił, że w czasie sesji będzie siedział ponieważ na stojąco trudno kodować itd. Niby to wszystko oczywiste oczywistości ale takie rzeczy łatwo umykają.
  • Utwierdziłem się w przekonaniu, że należy jak ognia wystrzegać się swego rodzaju przerywników, pozwalających zebrać myśli, takich jak słowa OK/Dobrze. Jeden z prelegentów miał z tym problem. Swoją drogą jego sesja była fajna ale mogłaby być jeszcze fajniejsza.
  • Zobaczyłem na żywo jak sprawuje się nowy kontroler do XBox'a czyli Kinect.

23/09/2010

QR kody

Home

QR kod to dwuwymiarowy odpowiednik kodu kreskowego, który ostatnimi czasy staje się coraz popularniejszy. I ja o nim coś tam słyszałem ale do tej pory jakoś nie miałem z nim styczności, aż do dzisiaj.

Szukałem w sieci informacji na temat poleconego stomatologa. Znalazłem je na portalu tupalo czyli numer telefonu, adres, mapkę dojazdu no i jakiś dziwny czarno-biały obrazek. Przyglądam się i czytam, że to QR kod zawierający dane kontaktowe do rzeczonego specjalisty i wystarczy je zeskanować, żeby dodać kontakt do książki adresowej. Myślę sobie super ale ciekawe czy mój Samsung Galaxy GT-I5700 to potrafi. Okazało się, że jak najbardziej tak i już po chwili miałem zainstalowane dwie aplikacji QuickMark oraz BarcodeScanner do skanowania kodów dwu- i jednowymiarowych.

Najpierw przetestowałem skanowanie kodu jednowymiarowego czyli w moim wypadku kodu kreskowego na pierwszej lepszej książce. Wynik pozytywny, numer jaki pojawił się w telefonie zgadza się z numerem pod kodem kreskowym. Dalej coś trudniejszego. Skanuję QR kod wyświetlony na stronie i również sukces, zostaję zapytany czy dodać taki, a taki kontakt do telefonu. Postanawiam kontynuować zabawę i znajduję generator online QR kodów. Poniżej przykład jego działania, czy potrafisz go odczytać?



W postaci QR kodu zakodowałem również swój adres e-mail i umieściłem w lewym panelu bloga, może komuś się przyda. Zabawa, zabawą ale biorąc pod uwagę, że teraz właściwie już każdy posiada telefon komórkowy, bardzo dużo telefon komórkowy z aparatem fotograficznym, a spora grupa telefony, na których z łatwością można instalować nowe oprogramowanie to na rynku pojawia się (albo już sie pojawiła) nowa nisza do zagospodarowania.

14/09/2010

Powrót do Ojczyzny

Home

Powrót do Ojczyzny to nazwa inicjatywy na rzecz ustawy o powrocie do Polski osób deportowanych lub zesłanych za czasów ZSRR. Jeszcze kilka dni temu nie wiedziałem, że taki ruch obywatelski istnieje i niewiele brakowało, a nie złożyłbym swojego podpisu pod projektem ustawy, a potrzeba ich 100 tysięcy aby trafił do sejmu. Do 14 września czyli ostatniego dnia trwania akcji zebrano 93480 głosów czyli bardzo dużo ale niestety za mało. Nowa ustawa jest ważna ponieważ przy obecnych rozwiązaniach prawnych czas oczekiwania na powrót do Polski może sięgać nawet 7-10 lata.

O akcji dowiedziałem się od żony, która zaproponowała, że po pracy przejdziemy się na Krakowskie Przedmieście 64 i złożymy podpisy. Podpis można było oczywiście wysłać pocztą ale nawet polecony nie zostałby doręczony w tak krótkim czasie. Wysiłek nieduży, a można komuś pomóc. Przy okazji postanowiłem spytać kolegów z pracy czy chcą złożyć podpis i w ciągu 2 godzin uzyskałem dodatkowe 12 głosów! Na Krakowskie Przedmieście spotkałem jeszcze sporą grupę ludzi myślących podobnie, część tak jak ja przyniosła listy z podpisami, inni przyszli się podpisać.

Jeśli ustawa wejdzie w życie będzie oczywiście kosztować. Według projektu ustawy potrzebnych będzie rocznie ok. 100 mln. Tu duże pieniądze ale ja wolę aby moje podatki były przeznaczane na takie szczytne rzeczy niż na ... i tutaj każdy może wpisać wiele pozycji w budżecie, które przejadają nasze pieniądze.

A teraz trzymam zaciśnięte kciuki żeby starczyło podpisów, okaże się jutro rano.

Internal .Net Framework Data Provider Error 30

Home

Ostatnio mam szczęście do "dziwnych" błędów. Dwa dni temu pisałem o htmlfile: Access Denied. Przy okazji podziękowania dla Tomka i Procenta za wskazówki jak sobie z nim poradzić. Teraz natknąłem się na błąd z zupełnie innej beczki związany z komunikacją z bazą danych. Zadanie do wykonania: wywołać procedurę składowaną. Zabrałem się do tego jak zawsze czyli nawiązałem połączenie do bazy danych, utworzyłem DbCommand, dodałem parametry, ustawiłem wartości parametrów i wywołałem procedurę. Niestety tym razem zamiast przejść do dalszej części zadania otrzymałem błąd Internal .Net Framework Data Provider Error 30. Konia z rzędem temu kto powie co ten błąd oznacza. Przeglądam kod jeszcze raz ale wszystko wygląda prawidłowo. Zresztą robiłem to już setki razy i działało. Jedyna różnica to taka, że teraz pracuję z bazą danych Oracle, a nie z bazą Microsoftu.

Od czego ma się jednak kolegów? Wysłałem maila z pytaniem czy ktoś już spotkał się z tym problemem i opłaciło się. Szybko uzyskałem wskazówkę, że błąd może być związany z błędną nazwą parametru i okazało sie to, że tak jest. W swoim kodzie użyłem metody, która w zależności od typu bazy danych zwraca odpowiednio przygotowany parametr nazwany. W przypadku Oracle parametry nazwane poprzedzone są dwukropkiem np.: :name, :date ale nie w przypadku przekazywania parametrów do procedury składowanej!!! Wspomniana metoda nie uwzględniała tego i stąd błąd. Inna sprawa to dlaczego sterownik Oracle nie ukrywa tej różnicy przed programistą oraz czemu ten błąd jest komunikowany w taki mało zrozumiały sposób.

Na zakończenie chciałbym podziękować Pawłowi za pomoc w rozwiązaniu problemu.

09/09/2010

htmlfile: Access Denied

Home

FileUploader to kontrolka, która umożliwia wybranie pliku przez użytkownika i przesłanie go na serwer. Po umieszczeniu na stronie renderuje się do pola tekstowego i przycisku Przeglądaj. Ja chciałem uzyskać efekt, w którym kontrolka ta jest ukryta, użytkownik naciska pewien przycisk, wyświetlane jest okienko do wyboru pliku, a następnie plik przesyłany jest na serwer. Zrobiłem to przy pomocy odrobiny JavaScript'u.
    function chooseFile()
    {
        var uploader = document.getElementById("<%= this.Uploader.ClientID %>");
        uploader.click();
    }

    function submitFile() 
    {
        document.forms[0].submit();
    }
Pierwsza funkcja chooseFile znajduje na stronie kontrolkę i wymusza kliknięcie na nią czyli powoduje wyświetlenie okienka do wyboru pliku. Druga funkcja po prostu przesyła stronę na serwer. Kontrolka i przycisk zostały osadzone na stronie w sposób pokazany poniżej:
    ...
    <asp:Button ID="Upload" runat="server" OnClientClick="chooseFile();" Text="Wybierz plik"/>
    ...
    <asp:FileUpload ID="Uploader" runat="server" style="display:none" onchange="submitFile();" />
     ...
Dzięki ustawieniu atrybutu display na wartość none kontrolka renderuje się do kodu HTML nie jest natomiast widoczna dla użytkownika. Po napisaniu kodu uruchamiam stronę, wybieram przycisk Wybierz plik i ku mojemu zadowoleniu pojawia się okienko do wyboru pliku. Wybieram interesujący mnie plik i na tym niestety kończy się zabawa, a pojawia się problem. W linii zawierającej document.forms[0].submit(); raportowany jest błąd htmlfile: Access Denied.

Sprawdzam jeszcze raz te kilka linijek kodu ale wyglądają prawidłowo. No dobrze, a może błąd jest spowodowany tym, że schowałem kontrolkę. Usuwam atrybut style i próbuję jeszcze raz ale błąd znowu się pojawia. Teraz kontrolka jest widoczna, więc sprawdzam co się stanie kiedy nacisnę przycisk Przeglądaj samemu, a nie przy pomocy JavaScript'u. Próbuję i tym razem wybrany plik został przesłany na serwer! Dla pewności powtarzam eksperyment jeszcze raz i ponownie sukces. Innymi słowy błąd pojawia się jeśli kontrolka do wyboru pliku zostanie kliknięta z poziomu kodu.

Więcej pomysłów nie mam, a więc zaglądam do Google i od razu widzę kilku nieszczęśników z podobnym problemem jak mój. Niestety zamiast rozwiązania problemu znajduję tylko informację, że błąd ten związany jest z jakimś mechanizmem bezpieczeństwa, który nie pozwala wysyłać plików bez wiedzy użytkownika. Sprawdzam jeszcze jak sytuacja wygląda w innych przeglądarkach (Opera i Firefox) i błąd się nie pojawia ale to dlatego, że nie działa kod uploader.click(); i okienko do wyboru pliku nie wyświetla się.

Jedyne co mi jeszcze przychodzi do głowy do wypróbowanie innych kontrolek do wyboru plików np.: Talerik'a. Dopóki nie znajdę obejścia problemu będę natomiast stosował tradycyjne podejście do zagadnienia czyli pozwolę użytkownikowi samemu nacisnąć przycisk.