wtorek, 13 września 2011

Dzień programisty 2011


  1. Uruchamiamy Visual Studio

  2. Tworzymy nowy projekt "Console Application"

  3. Wklejamy poniższy tekst

    using System;
    using System.Text;

    namespace Quine2011
    {
    class Program
    {
    const string q = "dXNpbmcgU3lzdGVtOw0KdXNpbmcgU3lzdGVtLlRleHQ7DQoNCm5hbWVzcGFjZSBRdWluZTIwMTENCnsNCiAgICBjbGFzcyBQcm9ncmFtDQogICAgew0KICAgICAgICBjb25zdCBzdHJpbmcgcSA9ICIyNTYiOw0KICAgICAgICBzdGF0aWMgdm9pZCBNYWluKHN0cmluZ1tdIGFyZ3MpDQogICAgICAgIHsNCiAgICAgICAgICAgIGNvbnN0IHN0cmluZyB4MjU2ID0gIjI1NiI7DQogICAgICAgICAgICBzdHJpbmcgdiA9IEVuY29kaW5nLkRlZmF1bHQuR2V0U3RyaW5nKENvbnZlcnQuRnJvbUJhc2U2NFN0cmluZyhxKSk7DQogICAgICAgICAgICBpbnQgcCA9IHYuSW5kZXhPZih4MjU2KTsNCiAgICAgICAgICAgIENvbnNvbGUuV3JpdGUodi5TdWJzdHJpbmcoMCwgcCkgDQogICAgICAgICAgICAgICAgKyBxIA0KICAgICAgICAgICAgICAgICsgdi5TdWJzdHJpbmcocCArIHgyNTYuTGVuZ3RoKSk7DQogICAgICAgICAgICBDb25zb2xlLlJlYWRLZXkoKTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCg==";
    static void Main(string[] args)
    {
    const string x256 = "256";
    string v = Encoding.Default.GetString(Convert.FromBase64String(q));
    int p = v.IndexOf(x256);
    Console.Write(v.Substring(0, p)
    + q
    + v.Substring(p + x256.Length));
    Console.ReadKey();
    }
    }
    }



  4. Kompilujemy i uruchamiamy

  5. Do zobaczenia za rok

czwartek, 19 maja 2011

dotPeek - nowy dekompilator dla .NET

Po tym jak okazało się, że Reflector nie będzie już dostępny w najprostszej wersji jako darmowe oprogramowanie, wielu programistów zaczęło prace nad odpowiednikiem. Pierwszym takim rozwiązaniem jest ILSpy, o którym niedawno pisałem.

Mimo tego ludzie z JetBrains (autorzy dodatku do Visual Studio - ReSharper) rozpoczęli prace nad swoją aplikacją.



Obecna wersja programu dostępna pod adresem:
http://www.jetbrains.com/decompiler/

Wersja ta jest jeszcze niestabilna. Gdy uruchamiałem pierwszy raz dotPeek, program zawiesił się po czym pojawiła się propozycja wysłania raportu o błędzie do autorów. Jest to normalne zachowanie programu, który znajduje się we wczesnym stadium tworzenia. Wygląd programu przypomina Visual Studio i zapewne dotPeek będzie elementem kolejnej wersji ReSharpera. Reszta opcji jest znana z Reflectora, może poza możliwością otwarcia modułów z GAC - w Reflectorze trzeba było najpierw znaleźć odpowiedni plik i dopiero go otworzyć, co nie zawsze było proste i wygodne.

Wczesna wersja dostępna jest w wersji darmowej (EAP -Early Access Program).

piątek, 18 lutego 2011

Żegnaj Reflector, witaj ILSpy

Jakiś czas temu firma Redgate, ogłosiła że przekazany im pod opiekę program Reflector przestanie być dostępny w wersji darmowej. Owszem równolegle sprzedawana była wersja Reflectora, która posiadała nieco więcej właściwości min. integrację z Visual Studio. Od lutego 2011 Reflector dostępny jest w cenie 35$.

Społeczność programistów nie czekała długo i odpowiedzią na tę sytuację jest projekt ILSpy. Na stronie projektu widoczne są już pierwsze screenshoty, dostępny jest kod źródłowy na Githubie.
Projekt nabiera rozpędu i w tym przypadku należy spodziewać się dobrego narzędzia, które będzie na bieżąco rozwijane.

sobota, 18 września 2010

DuckDuckGo - "nowe Google" ?

Coraz większą uwagę w Świecie przeglądarek przykuwa nowa wyszukiwarka DuckDuckGo. Czy będzie to "nowe Google"? Pod koniec lat dziewięćdziesiątych pojawiła się nowa wyszukiwarka. Od razu tym co wyróżniało ją od innych panujących wtedy wyszukiwarek to znacznie lepszy algorytm wyszukiwania. Wyniki na pierwszych pozycjach znacznie lepiej odzwierciedlały to czego spodziewał się użytkownik. Czy teraz Duck Duck Go próbuje przejąć rynek.

Zero-click

Teraz DDG przykuwa uwagę sposobem prezentacji wyników. Pierwszą taką funkcjonalnością jest "Zero-click info". Można to porównać do "I'm feelin' lucky" z Google. Z tym, że rozwiązanie to nie ogranicza nas do obejrzenia tylko strony z pierwszego wyniku wyszukiwania. Dalej będąc na stronie wyszukiwania możemy dostać się do kolejnych wyników nie klikając w cokolwiek. Jak narazie wyniki Zero-click są dostępne tylko w przypadku kilku serwisów internetowych min. Wikipedia, Stackoverflow.

!bang

!bang to zbiór komend wyszukiwania. Obejmuje on szeroki zakres popularnych serwisów. Polega to głównie na przekierowaniu do wyszukiwarki danego serwisu wpisując na przykład !youtube numa numa zostaniemy przeniesieni wprost do wyników wyszukiwania serwisu YouTube. Natomiast wpisując !google lub !g przeglądarka przejdzie do wyszukiwania Google. Twórcy DDG mają dosyć zdrowe podejście do rozwiązań i nie negują istnienia innych serwisów. Więcej na temat !bang

Narzędzia

Nie znasz swojego adresu IP? Potrzebne losowe liczby, proszę bardzo rand 1 46. Pełna lista narzędzi.

Prywatność

W przeciwieństwie do Google, DDG nie loguje informacji o wyszukiwaniach i użytkownikach. Wyszukiwania są anonimowe. Dodatkowo można się zabezpieczyć przed wyciekiem informacji o wyszukiwaniu na stronach z wyników wyszukiwania, przez włączenie trybu POST. Można też skorzystać z trybu proxy włączanego komendą !proxy. Dodatkowo połączenie do DDG można zrealizować przez połączenie szyfrowane.

Na zakończenie

Duck Duck Go niekoniecznie musi być alternatywą dla Google czy Bing, ale dobrym dopełnieniem tych oraz wielu innych serwisów, stanowiąc punkt startowy do poszukiwań w internecie.

czwartek, 6 maja 2010

Sinatra w praktyce

Wcześniej, bo jakiś rok temu przedstawiłem jak w Sinatrze napisać najprostrzą aplikację. Ten sposób jest dobry, by szybko zademonstrować możliwości frameworka lub szybko przygotować zarys działającej aplikacji. Przy rozwijaniu aplikacji, lepiej jest nieco bardziej się postarać i całość ubrać w ładną klasę dziedzicząca po Sinatra::Base. Dzięki temu definicje odwołań nie będą znajdować się w głównej przestrzeni nazw.

#sinatraweb.rb
class HelloApplication < Sinatra::Base
get '/' do
"Hello World!"
end
end

Poza efektem estetycznym aplikacja będzie mogła być łatwo rozszerzana lub też być
częścią jakiejś większej aplikacji, bez ryzyka, że dojdzie do konfliktów itp.

Dodatkowo aplikację należy wyposażyć w plik konfiguracyjny, przy pomocy którego
aplikacja będzie uruchamiana. Tak zwany plik "rackup" najczęściej w projektach
występujący pod nazwą config.ru

#config.ru
require 'rubygems'
require 'sinatra/base'
require 'sinatraweb.rb'

HelloApplication.run!

Zastosowanie tego pliku jest dosyć istotne gdy uruchamiamy aplikację na Heroku
lub na innych systemach wykorzystujących bibliotekę Rack. Przy pomocy pliku *.ru można ustawić parametry uruchomienia aplikacji takie jak port, adres tryb i działania.

Obsługa błędów 404 i innych


Zdarza się to dosyć często, że użytkownik nie trafia na stronę na którą sie spodziewał trafić. I tu pojawia się znany błąd 404. Sinatra domyślnie obsługuje tego typu błąd wywołując odpowiednie zdarzenie. Bez problemu możemy to zdarzenie nadpisać, aby wyświetlić własny widok.

Dwa proste przykłady

not_found do
'Tu niczego nie ma!';
end

not_found do
erb :error404 # dodajemy plik error404.erb do katalogu "views"
end

Wszystkie inne błędy przechwycić można przez zdarzenie error:

error do
"Kłopoty! " + request.env['sinatra.error'].message
end


Przełączanie środowiska


Normalnie Sinatra działa w trybie deweloperskim, jest to dosyć wolny tryb, część plików jest za każdym odwołaniem wczytywana ponownie. Przełączenie w tryb produkcyjny eliminuje ten problem. Dodatkowo pozwala to na skonfigurowanie oddzielnych środowisk do tworzenia, testowania i normalnego uruchamiania.
Ustawienie odpowiedniego środowiska polega na uruchomieniu metody set:

set :environment, :production # włączamy środowisko produkcyjne

W przypadku tworzenia aplikacji w osobnej klasie warto metodę tą dodać właśnie w definicji klasy aplikacji. Łatwe przełączanie między środowiskami pozwoli na używanie innych baz danych w środowisku deweloperskim i produkcyjnym, co wydaję się rozsądnym rozwiązaniem.

configure do
# konfiguracja wspólna dla wszystkich trybów
end

configure :production do
# konfiguracja środowiska produkcyjnego
end

configure :development do
# środowisko deweloperskie
end

configure :test do
# środowisko testowe
# podpinamy np. inną bazę danych niż w środowisku deweloperskim
end

Więcej przydatnych wskazówek: http://sinatra-book.gittr.com

środa, 31 marca 2010

Modyfikownie daty w C#

Było o modyfikowaniu daty w Ruby. Teraz będzie trochę więcej o tym jak to się robi w C#.

Dodawanie godzin, minut i sekund



DateTime pozniej = DateTime.Now.AddHours(2); // dodajemy do obecnej daty dwie godziny do przodu
DateTime pozniej2 = pozniej.AddMinutes(35).AddSeconds(3); // do wcześniej zmodyfikowanej daty dodajemy 35 minut oraz 3 sekundy


Można także odejmować od daty dowolną ilość jednostek. Sprawa sprowadza się do dodania ujemnej wartości.


DateTime wczesniej = DateTime.Now.AddHours(-12); // data cofnięta o 12 godzin

Przykłady



DateTime data1 = DateTime.Now.AddDays(7); // dodajemy 7 dni do obecnej daty
DateTime data2 = DateTime.Now.AddMonths(3); // data przesunięta o 3 miesiące
DateTime data3 = DateTime.Today.AddYears(1); // Jaka będzie data gdy dodamy do obecnej jeden rok?
DateTime datat4 = DateTime.Parse("2008-02-29").AddYears(1); // 2009-02-28 00:00:00


DateTime.Today działa podobnie jak DateTime.Now z tą różnicą iż nie jest ustawiana aktualna godzina, tylko zawsze jest to 00:00:00.