Archiwum

Archive for Lipiec 2013

Windows Phone przepycha się przez rynek– ponad 20% w Polsce i Meksyku

Lipiec 23, 2013 1 komentarz

Wczoraj na jednym z forów dyskusyjnych pojawił się link do informacji o tym, że w Polsce I Meksyku liczba telefonów z Windows Phone na rynku to 20% (globalnie 3%) – ja bym to spłycił do liczby nowo sprzedawanych telefonów, ale to I tak duży sukces.
Link znajdziecie tutaj.

Patrząc na statystyki sieci wymiany reklam ADDuplex widzimy ciekawy trend – głównym telefonem na Naszym rynku z Windows Phone jest HTC (sic!). Ciekawe, bardzo mało ludzi znam, którzy mają właśnie ten telelefon.

clip_image011

Następna ciekawa rzecz, to to, że Windows Phone 8 jest popularniejszy od linii 7.x! Dla programistów tworzących aplikacje to rewelacyjna informacja. Dzisiaj dość duży procent (powiedziałbym że większość) firm pisze dalej pod linię 7.x dzięki temu użytkownicy obu systemów mogą korzystać z aplikacji. Jest to kosztem niestety tego, że tacy programiści nie wykorzystują nowości jakie są w nowym systemie – będąc w trybie kompatybilności.

clip_image004

Dane zgromadzone przez AdDuplex mówią jedną bardzo ważną rzecz dla firm, które tworzą aplikacje dla Windows Phone – rynek rośnie I agencje reklamowe tworzące aplikacje dla swoich partnerów nie mogą (nie powinny) omijać co raz większej ilości użytkowników z słuchawką Windows Phone.

Zapraszam wszystkich do Tworzenia dla Windows Phone. Mit braku aplikacji na tę platformę powoli mija, a tego czego nie ma – można napisać I wrzucić do sklepu. Kto wie – może to Naszą aplikację, ktoś ściągnie milion razy.

Na koniec coś na rozluźnienie:

Nie walczmy, kupmy Lumię

Czytanie billingu Azure–czyli jak sprawdzić dlaczego mamy zapłacić

Lipiec 19, 2013 1 komentarz

Problem wraca jak bumerang, więc to czas by to opisać – Azure generuje dużo wykresów, dużo danych i w sumie dla normalnego człowieka niewiele z tego wiadomo kiedy finalnie pokaże się jakaś kwota do zapłacenia.

Bo jak to płacić? Ale za co? Czego ile i kiedy zużyłem?
Na te pytania wykresy odpowiadają średnio…

Zacznijmy od podstaw, logujemy się do panelu zarządzania usługą Windows Azure – link tutaj.
Po zalogowaniu z belki górnej wybieramy View my bill

image

Następnie wybieramy aktywną subskrypcję, która będzie nam służyła za przykład tego jak czytać zestawienie kosztów usług, w moim wypadku jest to PlaceChallenge – Main

image

Następnie szukamy po prawej stronie linku o nazwie Pobierz szczegółowe zestawienie użycia

image

Po kliknięciu będziemy jeszcze musieli wybrać okres rozliczeniowy, który chcemy zbadać – przy wybranym klikamy Pobierz zestawienie użycia

image

…i w odpowiedzi otrzymamy plik w formacie CSV.

image

Jak otworzymy ten plik w EXCELU i mamy ustawienia regionalne POLSKIE to mamy problem! Plik wygląda trochę mało zrozumiale

image

Tak jakby nie do końca zrozumiał plik czym jest idea kolumn w Excelu. Ma to związek, z faktem, że plik oddany został nam w formacie, w którym dane do odpowiednich kolumn trafiają przez separator “,” (przecinka), a Nasze ustawienia regionalne (Polskie) zakładają oddzielanie danych poprzez “;” (średnik).

Tu możemy to sprawdzić w ustawieniach regionalnych z Panelu Sterowania, patrzymy na prawą stronę na element List separator

image

Nie dotykamy nic w Panelu Sterowania, idziemy do Excela i postaramy się go poprosić by dane pokazał jednak w poprawny sposób.

Uruchamiamy Excela i przechodzimy na zakładkę DATA

image

Klikamy From Text i wybieramy plik, który pobraliśmy z Windows Azure.

image

Wybieramy Delimited i klikamy Next

image

Wybieramy tylko Comma i klikamy NEXT

image

Klikamy Next

image

Klikamy OK i powinniśmy zobaczyć ładnie podzielone dane w odpowiednich kolumnach.

image

To co dla Nas jest tu najważniejsze to to, że EXCEL ten podzielony będzie na dwie ważne sekcje

  • Oświadczenie – podsumowanie miesiąca usługa po usłudze
  • Dzienne wykorzystanie – usługa po usłudze dzień po dniu

 

image

Przesuwając się w tym pliku możemy sobie wszystko policzyć, zarówno godziny, jak też transfer i ilość transakcji.

Zapraszam do komentowania i proponowania kolejnych tematów.

Kategorie:Azure Tagi: ,

Azure i jego problem z liczeniem czasu–czyli jak nauczyć chmurę, że każda sekunda ma znaczenie

A to niespodzianka…serwery w chmurze czasu nie liczą – czyżby były tak szczęśliwe? Wracając do meritum sprawy…jeżeli macie kilka…dziesiąt serwerów w Azure, które robią coś razem zauważycie mały problem… niezgodność czasu.

W przypadku serwerów jakie mamy w projekcie PlaceChallenge, to było od 2 do 47 sekund – powiedziałbym, że dość dużo.

Po rozmowie z miłym Panem z Indii wiadomo co jest problemem… problem to Hyper-V, który hostuję te maszyny. Hyper-V (wirtualizator) ma problem z odpowiednim synchro czasu w momencie dużego obciążenia. Nie możemy jednak zrzucić winy na sam Hyper-V i czekać aż problem naprawi się sam – Azure sam w sobie i tak działa rewelacyjnie. Czasem trzeba cos tam zrobić samemu i to ten moment…

W PlaceChallenge zrobiliśmy tak, że wysyłamy do serwerów plik exe (taki agent), który synchronizuje czas co parę godzin. Główna metoda zajmująca się synchronizacją wygląda tak:

public static void Sync()
        {
            try
            {
                Process p = new Process();
                ProcessStartInfo info = new ProcessStartInfo();
                info.FileName = "cmd.exe";
                info.RedirectStandardInput = true;
                info.UseShellExecute = false;

                p.StartInfo = info;
                p.Start();

                using (StreamWriter sw = p.StandardInput)
                {
                    if (sw.BaseStream.CanWrite)
                    {
                        sw.WriteLine("net stop w32time");
                        sw.WriteLine(
                            "w32tm /config /syncfromflags:MANUAL /manualpeerlist:0.europe.pool.ntp.org,1.europe.pool.ntp.org,2.europe.pool.ntp.org,3.europe.pool.ntp.org");
                        sw.WriteLine("net start w32time");
                        sw.WriteLine("w32tm /config /update");
                        sw.WriteLine("w32tm /resync /nowait");
                    }
                }

                p.WaitForExit();
                p.Close();
            }
            catch(Exception ex)
            {
                Debug.WriteLine(ex);
            }

        }


Można z niej łatwo wyczytać co musimy uruchomić w konsoli by czas się zsynchronizował na serwerach.

Skompilowany plik exe wkładamy do folderu z aplikacją, którą chcemy wysłać do Azure, klikamy prawym –> Properties i wybieramy Copy always by plik się skopiował do paczki, którą kompilator przygotuje dla Azure oraz w Build action –> None.

image

Brakuje jeszcze tylko wpisu w konfiguracji Azure (plik csdef), który powiedziałby że należy tego .exe uruchomić:

image

Oczywiście spoglądamy na sekcje Startup->Task.

Jeszcze warto wspomnieć, że Microsoft podaje w dokumentach, że 2 sekundy różnicy to norma – życzę wszystkim 2 sekund różnicy i miłego dnia!

Kategorie:Azure, CloudExpert Tagi: , ,

Could not load file or assembly ‚file:///C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\e91591d2\f8155836\App_global.asax.e90_8bf1.dll’ or one of its dependencies. An attempt was made to load a program with an incorrect format.

I to by było tyle z szczęśliwego dnia. Jak człowiek widzi takie coś to w sumie nawet myśl o tym, że to dopiero rano, jeszcze kawa niedopita nie pomaga w relaksie. Patrząc na to nic nie wiadomo, a możliwych problemów, które mogły to wywołać co najmniej kilka. To jak z bólem głowy, wiadomo, że boli – ale powodów może być wiele.

Do konkretów

99% przypadków to to, że mamy biblioteki 32bitowe w projekcie 64bitowym. Dobrze, że w odpowiedni sposób nam kompilator powiedział o tym, bo przecież inaczej byśmy się nie domyślili:

image

Co możemy z tym zrobić? Zależy od tego gdzie finalnie aplikacja wyląduje, jeżeli po prostu na naszym serwerze w firmie / komputerze to wystarczy przestawić jedną flagę w IIS:

Wchodzimy do IIS Manager i szukamy parametru Enable 32-Bit Applications przestawiając go na True w Advanced Settings  puli aplikacji, gdzie mamy zainstalowaną naszą stronę.

Jeżeli rozwiązanie ma wylądować w Azure to należy wybrać się z wizytą do pliku konfiguracyjnego projektu Cloud i zmienić jedną rzecz:

image

dodajemy enableNativeCodeExecution=”true”

Jeżeli to nie działa, to znaczy, że może przyczyna istnieje w tym, że Visual Studio nie do końca dobrze sprząta po sobie – znaczy po testach wydajności aplikacji, które przeprowadzaliśmy. Poszukajmy, czy czasem w web.config nie mamy czegoś takiego…

assemblyPostProcessorType="Microsoft.VisualStudio.Enterprise.Common.AspPerformanceInstrumenter, Microsoft.VisualStudio.Enterprise.AspNetHelper, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"

Jak mamy to usuwamy wpis, odpinamy bibliotekę z referencji i sprawdzamy…

Prawda, że proste?

Kategorie:.NET, Azure Tagi: , ,

Tropem wątków, czyli Thread.Sleep(-1) i tajemnica braku wyników wyszukiwania w Google.

Lipiec 14, 2013 3 komentarze

Wczoraj był dniem kiedy miałem nadzieje, w końcu zakończyć kodowanie jednego z wrapperów na Azure SDK, który miał zarządzać usługami, które aktualnie buduje. Mam taki dziwny zwyczaj, że jak zastępuje czyjś kod (tu: Microsoft) to sprawdzam najpierw jak podeszli do tematu by nie powtórzyć czegoś co mi się nie podobało w poprzedniej implementacji lub/i nauczyć się czegoś ciekawego by dołączyć to do mojej nowej implementacji.

Tak też było i tym razem: znajduję w kodzie jednej z bibliotek taki oto kod:

Thread.Sleep(-1);

hmmm – i to tyle co mogłem wtedy powiedzieć.

Co robi Thread.Sleep to raczej wiadomo – zatrzymuje wykonywanie aktualnego wątku na zadaną liczbę milisekund. Ciekawe jednak było to co oznacza –1 w tym całym zamieszaniu, bo powszechnie wiadomo, że czasu w liczbach ujemnych tu nie liczymy.

Po zdekompilowaniu biblioteki, gdzie jest klasa Thread znajdziemy przy wywołaniu Thread.Sleep coś jeszcze bardziej interesującego:

if (num < -1L || num > (long) int.MaxValue)
        throw new ArgumentOutOfRangeException("timeout", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegOrNegative1"));


Co jasno wskazuje, na to, że tylko wartość –1 jest wykluczona z generowania błędu dla wartości ujemnych…czyli to oznacza… że –1 coś oznacza.

Idąc dalej tym tropem dochodzimy do momentu, w którym wiadomo co .NET wywołuje w systemie by zatrzymać wątek – jest to

SleepEx

The SleepEx function causes the current thread to enter a wait state until one of the following occurs:· An I/O completion callback function is called· An asynchronous procedure call (APC) is queued to the thread.· The time-out interval elapses

z kernel32.dll

idąc dalej tropem dokumentacji jest tam napisane, że

A value of INFINITE causes an infinite delay.

a tak całkiem przypadkiem to INFINITE to właśnie stała wynosząca –1.

Thread.Sleep (-1) wyłącza wykonywanie aktualnego wątku i zamraża go w danym momencie na czas “nieokreślony.

Ładnie to widać w tym kawałku kodu

class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Jeden");

            var x = new Thread(new ThreadStart(delegate
                {
                    while (true)
                    {
                        Console.WriteLine(Guid.NewGuid());
                    }
                }));

            x.Start();

            Thread.Sleep(-1);

            Console.WriteLine("dwa");

        }
    }

  • Uruchamiamy program i widzimy napis Jeden
  • Później lecą w nieskończoność nowe GUIDy na ekranie z drugiego – nowoutworzonego wątku
  • Napis dwa nie pokazuje się na ekranie, wątek aktualny jest zamrożony i nie ma zamiaru się ruszyć.

 

Ciekawe w tym wszystkim jest to, że niewiele jest w Google o tym –1, a to już wyzwanie, by dzisiaj mieć temat, którego Google nie rozwiązuje na pierwszej stronie wyników wyszukiwania.

Kategorie:.NET Tagi: , ,

Firefox OS startuje w Polsce, a ja zastanawiam się…po co?

Lipiec 12, 2013 2 komentarze

Jadę w pociągu i nudów czytam sobie artykuł na PCLab – link tutaj. Autor przytacza tam opinię/tezę jako by ten system miał szanse rynkowe i to właśnie ten fragment mnie zastanawia na tyle, że zamierzam się nad tym zastanowić.

Mam dziwne wrażenie, że niewiele osób poprawnie postrzega sferę mobilną oceniając czy dany telefon, technologia ma szansę na rynkowe przetrwanie.

Osobiście nie mam nic do tego systemu operacyjnego, uczestniczyłem w Polskim Hackatonie, byłem w San Francisco na zamkniętym spotkaniu na temat tego systemu – zrobiłem myślę, całkiem niezły research zanim zabrałem się za ocenę.

By określić czy to ma szansę należy przyjąć jakieś kryteria oceny sukcesu – dla mojego przykładu może to być udział w rynku. Uwaga – to nie jest jedyne kryterium, dla niektórych to po prostu może być ilość w mln sprzedanych słuchawek firmy X, a dla innych ilość sprzedanych licencji na software w telefonach, które produkują firmy X, Y i Z.

Udział w rynku to konsument, który chce to kupić – zaczynam od takiej tezy.

Aby konsument kupił ten telefon musi on co najmniej zbliżyć się “możliwościami” do tego co mamy dzisiaj w np.: Android czy iOS. Możliwości to nie API systemu operacyjnego, to nie super modny HTML5 na froncie, to też nie lśniący ekran – to aplikacje. Jeżeli mówię o iOS to wiadomo, że wpadam w wysoką półkę cenową, ale zmieniając obiekt westchnień na Androida wpadam w dół rynku i mogę mierzyć się z Firefox OS.

Dzisiaj jako firma, która potrzebuje aplikacji mobilnej muszę ponieść koszt kolejnej platformy, pytanie czy mi to się to opłaca i czy kiedykolwiek będzie. Proszę nie przytaczać tutaj informacji o tym, że są frameworki – PhoneGapy, bo jednak zawsze wymaga to pewnego zachodu by aplikacja na nowej platformie działała.

Nie ma aplikacji nie ma platformy, już dawno przestaliśmy tylko dzwonić i SMSować.

Historia lubi się powtarzać – na przykładzie Microsoft

Historia lubi się powtarzać i firmy niestety nie wyciągają wniosków z niej. Microsoft poległ przy Windows Phone 7.x właśnie dlatego, że nie myślał o firmach tworzących oprogramowanie, myślał o użytkownikach, którzy będą kupować telefony – efekt… kto kupi telefon, który nie ma TOPowych aplikacji, moim zdaniem niewielki procent.
Problem Windows Phone 7.x to był zmuszenie programistów na przestawienie się na języki .NETowe, przepisanie oprogramowania, utrzymanie nowych silników do aplikacji – dla wielu firm po prostu rachunek zysków i strat się nie zgadzał.

Dzisiaj mamy wersję 8.x Windows Phone. Mamy dostępny C++, dzięki temu mamy dostęp do popularnych frameworków jak Unity, w których często są budowane gry też dla Androida i iPhone – przenoszenie kodu staje się prostsze, koszty mniejsze – firmy zaczynają budować ekosystem wokół Windows Phone – dla Microsoft sukces.

Czemu więc Firefox idzie nową drogą, próbując “nauczyć” programistów nowej technologii jak to kiedyś próbował robić Microsoft? Nie wiem, ale na pewno będziemy obserwatorami tego co się stanie dalej.

Hajs się musi zgadzać – lekcja na przykładzie Angry Birds i BlackBerry

Firmy tworzące oprogramowanie i freelancerzy to nie ludzie jedzący trawę – coś do gara trzeba włożyć. Zastanawia mnie w takim razie jaka oferta jest skierowana do programistów, przechodzących na platformę Firefox OS.

Niestety całkiem nieźle jestem zorientowany jak to działa prowadząc mini-software house. Dzisiaj jeżeli planujemy wydać niezależnie aplikację, to na pewno pójdziemy w stronę:

  • iOS ( ludzie którzy płacą )
  • Android (efekt skali, masa ludzi, masa telefonów )

Dodatkowo możemy pomyśleć o Windows Phone / Windows 8 – rynek rośnie dość mocno, procenty się odbijają od dna, nie ma dużej ilości konkretnych aplikacji, jak popatrzymy na cyferki sprzedanych słuchawek może mieć sens, ale Microsoft nie jest głupi – dla tych mniej przekonanych tworzy specjalne programy:

  • darmowe telefony dla programistów
  • możliwość otrzymania od 10 do 100 tyś dolarów za przeniesienie aplikacji z Android / iOS do Windows Phone / Windows 8. Dzięki takiej pomocy kiedyś Angry Birds pojawiły się na Windows Phone. W innym wypadku nikt by nie przepisał tego na SDK WP7.
  • konkursy
  • szkolenia

Pytanie jaki pomysł ma Mozilla na programistów / firmy. Jaki ma pomysł by np: mnie przyciągnąć do platformy i zachęcić mnie do kodowania? Pytanie zostawiam otwarte.

Podsumowanie

Nie winię autora artykułu na PCLab, to po prostu powszechna opinia, która jest trochę wywrócona do góry nogami – “…teraz już tyko wystarczy zrobić kampanie marketingową”.

WP_000601

Życzę Firefox OS nie użytkowników, życzę im programistów, którzy będą pisali aplikacje na ten system, takich, którzy po pierwszej appce nie odejdą szukają bardziej lukratywnych miejsc.

Jak ktoś czyta to związany z Mozilla i zna ofertę dla programistów to proszę o kontakt, chętnie się zapoznam i spróbuję.

Kategorie:Mozilla Tagi:

SQL Server LocalDB–po co to komu? Zalety i… błędy.

Ostatnio wiele razy przewinęło się pytanie o LocalDB – wiec spieszę to wytłumaczyć to zjawisko. Nie ma wątpliwości, ze LocalDB pojawiło się nie proszone, nie było mocno wyczekiwane, a tym bardziej nie do końca dobrze zostało wyjaśnione grupie odbiorców, dla której ten produkt jest – Programistom.

Jakiś czas temu Microsoft wpadł na pomysł, by dać programistom bazę danych, która ma dużo większe możliwości niż SQL Compact Edition, ale jednocześnie zachować kompatybilność z silnikiem pełnego SQL, której edycja Compact nie ma.

Naturalne pytanie jakie teraz się powinno pojawić, to gdzie w tym wszystkim jest SQL Express Edition, który dotychczas pełnił właśnie role narzędzia dla programistów, miał wsparcie silnika SQL i często to on był głównym silnikiem na “produkcji” niewielkich aplikacji.

Sprawdzamy, czy to mamy

Jest spora szansa, że mamy już zainstalowane LocalDB na naszym komputerze, możemy to sprawdzić próbując się podpiąć do bazy poprzez

(localdb)\v11.0

image

Jeżeli nam się udało to możemy sobie pogratulować – coś zainstalowało LocalDB na Naszym komputerze. Jeżeli nie udało sie, nic straconego, instalatory znajdują się tutaj.

Dużym atutem jest to, że możemy zainstalować localDB bez konieczności klikania, jest opcja tak zwanej cichej instalacji:

msiexec /i SqlLocalDB.msi /qn IACCEPTSQLLOCALDBLICENSETERMS=YES

dla dociekliwych powiem tylko, że da się zbudować w dość intuicyjny sposób także connection string:

Server=(LocalDB)\v11.0; Integrated Security=true ;

a jak mamy bazę danych to możemy jeszcze do niego dodać:

AttachDbFileName=C:\Bazy\Baza1.mdf”

Instancje

Ten wpis v11.0 to tak zwana automatyczna instancja, do której możemy się podpiąć po instalacji LocalDB, nic nie stoi na przeszkodzie byśmy stworzyli sobie dodatkowe instancje i odseparowali użytkowników, bazy, produkty od siebie na czas prac programistycznych.

Dla przypomnienia instancje w SQL 2012 Express zostały oznaczone jako depreciated. co automatycznie powoduje to, że jak ktoś używał tego segregowania baz, będzie musiał teraz przejść na LocalDB, bo to właśnie jedna z jego opcji.

Jeżeli chcemy dodać / usunąć instancje wchodzimy do cmd.exe (linia poleceń) i wpisujemy:

image.png

Powyżej stworzyłem dwie instancje, dla dwóch swoich firm by odseparować projekty (bazy) jakie używam w swoich projektach.

Jak pójdziemy do SQL Management Studio zobaczymy, że będziemy mogli się podłączyć do nowo powstałych instancji w taki sam sposób, jak przed chwilą do (localdb)\v11.0

image.png

i efekt:

image.png

Kompatybilność

LocalDB został wymyślony trochę później niż wydano .NET w wersji 4 to też ta wersja nie obsługuje tej edycji SQL. By włączyć obsługę należy doinstalować aktualizację do .NET Framework 4.0 – tutaj też warto podkreślić, że celowo ludzie z Microsoft nie dołączyli jej do instalatora LocalDB, chcąc uniknąć restartu podczas procesu instalacji.

Aktualizacja dla .NET 4 jest tutaj.

.NET 4.5 wspiera w pełni LocalDB.

Co mamy w środku?

LocalDB podobnie jak silnik SQL Express obsługuje:

  • XML
  • ADO.NET
  • ADO.NET Sync Framework
  • LINQ
  • ODBC
  • OLEDB
  • Distributed Transactions
  • Nielimitowane połączenia lokalnie (nie ma możliwości łączenia się zdalnie)
Limity?

Nie mogło zabraknąć kilku limitów, które spotkamy też w bazach takich jak SQL Express – czyli po prostu darmowych:

  • Limit bazy to 10GB
  • Obsługa tylko jednego procesora
  • Obsługuje tylko połączenia lokalne (named pipes)
Porównujemy

Sprawdźmy jak to wszystko się ma do innych edycji SQL

co jeszcze dokładniej nam mówi o braku wielkich różnic między edycjami SQL Express i LocalDB, a świadczy o kilku minusach w stosunku do Compact.

Znane błędy

Na razie jeden,który mnie trochę “boli” jako programistę, a nie klepacza SQLa. Nie działa debugowanie kodu SQL, tu jest błąd zgłoszony i potwierdzony:

image.png

Podsumowanie

Coś czego ja bym oczekiwał to magii jaką Microsoft wykonał tworząc Silverlight, kiedy włożył w jedną kilku megabajtową paczkę rozszerzenia do przeglądarek internetowych nie tylko dla Windows, ale też dla MAC OS dość kompletne środowisko uruchomieniowe .NET. Dalej czekam na coś równie małego jak Compact SQL, ale z podobną mocą do pełnego SQL Server.

Dodatkowo wymagałbym produktu, który programista może zainstalować na swoim komputerze bez uprawnień administratora (do LocalDB potrzebuje ich) i/lub silnika, który wpina się do aplikacji plikiem .dll bez potrzeby instalowania serwera na komputerze.

Kategorie:Microsoft, SQL Tagi: ,