- Uruchamiamy Visual Studio
- Tworzymy nowy projekt "Console Application"
- 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();
}
}
} - Kompilujemy i uruchamiamy
- Do zobaczenia za rok
wtorek, 13 września 2011
Dzień programisty 2011
Etykiety:
.net,
ciekawostki
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).
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).
Etykiety:
.net
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.
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.
Etykiety:
.net
niedziela, 10 października 2010
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 !bangNarzę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.
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
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.
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
Wszystkie inne błędy przechwycić można przez zdarzenie error:
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:
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.
Więcej przydatnych wskazówek: http://sinatra-book.gittr.com
#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#.
Można także odejmować od daty dowolną ilość jednostek. Sprawa sprowadza się do dodania ujemnej wartości.
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.
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.
Subskrybuj:
Posty (Atom)
