Ostanie nowości ważne dla programistów

Ostatnio został wydany, a raczej zaktualizowany MinGW port gcc na Windows. Do tej pory można było korzystać z gcc-3.4.5 więc skok w numerkach jest duży.

Dlaczego uważam to za ważne? Ułatwi to portowanie aplikacji pomiędzy Windows/Linux/Mac OS X w łatwiejszy sposób.

Do tego można korzystać już z ‘nowego’ słowa kluczowego auto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40278
#undef __STRICT_ANSI__
#include <iostream>
#include <vector>
using namespace std;
 
int main() {
    const vector<int> x = {1, 2, 3, 4, 5};
    for (auto i = x.begin(); i != x.end(); ++i) {
        cout << *i << "\n";
    }
}
 
// g++ -Wall -Wextra vector.cc -o vector -O3 -s -std=c++0x

A wczoraj został wydany Eclipse Galileo. Wielkie, kolosalnych rozmiarów IDE które potrafi tyle co Emacs. Z setkami pluginów i różnych odmian jak Zend Studio czy Aptana, staje się jasne że Eclipse zostaje ciągle wybierany jako środowisko programistyczne.

Sam korzystam z Aptany do spraw typu HTML/CSS/JS/PHP i powiem, że jest to narzędzie cudowne.

Fragment z dobreprogramy.pl:

Galileo przynosi szereg zmian względem poprzedniej wersji środowiska, wydanej niespełna rok temu. Użytkowników systemu MacOS X ucieszy fakt przepisania interfejsu Cocoa. Programistom, którzy piszą w Javie udostępnione zostało narzędzie Memory Analyzer, które ułatwi śledzenie wycieków pamięci aplikacji. PHP Development Tools jest pierwszym stabilnym rozwiązaniem na rynku w pełni wspierającym PHP 5.3. Narzędzie Mylyn, integrujące środowisko z bugtrackerami Bugzilla, Trac czy JIRA, obsługuje format WikiText. Dodano również narzędzie do obsługi formatu styli XSL, framework uruchomieniowy Swordfish oraz narzędzie Xtext do obsługi DSL (Domain Specific Languages).

EDIT: Przepraszam za błędy językowe. Pisałem szybko aby chęć nie odeszła.

O tym jak trudno kupić klawiaturę.

Była sobie klawiatura. Klawiatura ciężka, z przeraźliwym klikiem (głośnia), klawisze ciężko chodziły a jak się je wdusiło do końca palec nie miał miękkiego zakończenia. Bolesne doznania. A do tego w białym kolorze nie pasującym do reszty sprzętu. Ale wszystko co złe się kończy po tym jak ’strzałka w dół’ postanowiła odpaść z gry. I powędrowała na podłogę

Każdy wie jak ważna jest klawiatura, najczęściej wykorzystane narzędzie wejścia. A dla osób związanych z pisaniem blogów czy też programowaniem można powiedzieć że klawiatura jest ważna.

Przed wybraniem się na zakupy trzeba wiedzieć czego szukać.

Moją listą życzeń to:

  • Układ z małym enterem (klawisz nad enterem ‘|’ i ‘\’ )
  • Mało klawiszy multimedialnych, nie mam zamiaru płacić za coś czego nie będę korzystał
  • Czarna
  • Klawisz nie jest na wysokim, wąskim słupku, przez to nie porusza się prawo lewo
  • Bez kliku
  • Miękka w dociskaniu i lekka
  • Z kablem
  • Nie wydać na nią za dużo

Uzbierało się tego trochę. Ale w nadziej, że coś znajdę udałem się do miejscowych sklepów z komputerami, sprzętem itd.

Pierwsza klawiaturę którą znalazłem była dosyć prosta, czarne z klawisze z paskudnym srebrnym wykończeniem powierzchni nie klawiszowej. Opada.
Idę dalej. Mijam klawiatury firmy Logitech, klawiatury, drogie z duża ilością klawiszy dodatkowych. Inne klawiatury mają układ według ich pomysłu. ‘Insert’ nie istnieje. Jego miejsce zajął duży ‘Delete’, co to ma być? Klawiatury z przyczepionymi ‘Insert’, ‘Home’ itd do Backspace, Entera i Shifta.

Lekko załamany, że nic ciekawego nie mogłem znaleźć, zostało szukanie w internecie. Wadą szukania klawiatury w internecie jest jaki że nie sprawdzisz jaka jest w dotyku, jak chodzą klawisze itd. Szukałem jakiś porady, polecenia jakieś firmy i tak dalej. Natrafiłem na rekomendacje klawiatury sygnowanej nazwą Microsoft. Poszedłem tym tropem.

Ze strony wybrałem dwie ciekawe klawiatury pierwszą Comfort Curve Keyboard 2000 oraz Natural® Ergonomic Keyboard 4000

Ostatecznie zdecydowałem się na pierwszą z nich. Nie byłem pewny jak pracuje się na ‘załamanej’ klawiaturze. Zamówiłem na Allegro i przyszła. Powiem że jestem zadowolony z użytkowania jej (piszę na niej od paru tygodni). Zaletą klawiatury są dwa klawisze dodatkowe, wyciszanie dźwięku i przycisk uruchamiający kalkulator. Wadami strzałki które są dziwnie uformowane, jakoś mało miło się z nich korzysta oraz klawisz ‘A’ który jest głośniejszy od reszty.

Tworzenie własnych kontrolek w WFA. Tworzenie Label’ki z pamięcią.

Przykład jest banalny. Chce pokazać, że da się coś takiego zrobić. Łatwo.

Jak piszę na stronie MSDN: Klasę Label można dziedziczyć (w deklaracji nie ma słowa-klucz sealed).

Pamięcią kontrolki będzie tablica stringów zawierająca 10 poprzednich ustawień tekstu które zostały przypisane do kontrolki.

Definicja własnej kontrolki.

?View Code CSHARP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class LabelWithMemory : Label
{
    private string[] memory = new String[10];
 
    public string this[int index]
    {
        get
        {
            if (index >= 0 && index < 10)
                return memory[index];
            else
                return "";
        }
        set
        {
            if (index >= 0 && index > 10)
                memory[index] = value;
        }
    }
}

Dostęp do kolejnych komórek pamięci jest przez nazwę naszej labelki i indeks.

Jak to już mamy, pojawił się nowy element w Toolboksie, nasza nowa kontrolka

.Kontrolka w Toolbox

W trybie Design przeciągamy ją w wybrane miejsce.

Krok dalej…

Tak wygląda aplikacja na której wykorzystamy wykonaną przez nas lablekę.

okno programu

W przypadku jak ktoś naciśnie na przycisk zmiany tekstu, to obecny jest zapisany w nazwa labeli oraz w pamięci stringów. Tekst jest pobierany z tekstboksa

?View Code CSHARP
1
2
3
4
5
6
7
8
9
private void btnTextChange_Click(object sender, EventArgs e)
{
    lbMemo.Text = tbTextChange.Text;
    for (int i = 9; i > 0; i--)
    {
       lbMemo[i] = lbMemo[i-1];
    }
    lbMemo[0] = lbMemo.Text;
}

Jeżeli nastąpi zmiana tekstu, to wszystkie poprzednie zostają ‘zepchnięte’ o jeden indeks niżej. Pierwszy indeks przechowuje obecną, najnowszy tekst.

Klawisze od 1-8 korzystają z wspólnej funkcji.

?View Code CSHARP
1
2
3
4
5
6
7
private void NumberButton_Click(object sender, EventArgs e)
{
    Button btnNumer = (Button)sender;
    int index = int.Parse(btnNumer.Text);
 
    lbMemo.Text = lbMemo[index];
}

Funkcja ściąga tekst z klawisza i parsuje go jako cyfrę tak powstaje indeks z którego trzeba ściągnąć tekst.
I tak doszliśmy do końca
Jeśli chciałbyś kod źródłowy to nie krępuj się, prześlij e-mail do mnie(soltys z dopiskiem uznam.org).

Lataj, niszcz, zarabiaj, ulepszaj | Gra flash: Space Pips

lecimy i niszczymy

Space Pips to kolejna gra flash która pożera czas. Prosta i dająca mnóstwo frajdy z grania.

Latasz stateczkiem (ten biały na screenie) i niszczysz inne. Z zniszczonych statków kosmicznych wypadają małe kolorowe kulki które są pieniądzem w grze, gdy zbierzemy ich wystarczająco dużo możemy kupić ulepszenie broni, odnowę życia czy pomagające statki w walce z przeciwnikami.

Sterowanie statkiem to klasyczny WASD lub strzałki (wariant dla leworęcznych). Celowanie i strzelanie myszą, a gdy sytuacja stanie się nieciekawa można użyć Bomb, spacją (bomby można kupić także w sklepie). A do Sklepu wchodzi się klawiszem Q lub ESC.

Ocena: 9/10

Recenzja książki: Programowanie C# wyd. O’Reilly/Helion

Maryśka! Przygotuj strzelby

Ostatnio kupiłem książkę Programowanie C# wydawnictwa O’Reilly/Polska Helion. Autora Jesse Liberty.

Krótko:

Książka jest zła, źle napisana, droga,wiele błędów, długa i nudna.

Długo:

Zazwyczaj gdy kupowałem książkę wydawnictwa O’Reilly wiedziałem, że nie wydam pieniędzy w błoto. Tutaj ta zasada nie obowiązuje.

Autor rozpisuje się w łatwych tematach a skąpi wyjaśnienia przy zagwozdkach. Wiem, że od podstaw to ‘Wprowadzenie C#’ Okej, okej, ale nie potrzebuje tłumaczenia typu ‘jak działa switch’ wolałbym kompletne wytłumaczenie elementów które nie występują w C++ a są C#.

Totalny chaos jeśli chodzi Rozdział i temat. Wprowadza 5 nowych rzeczy a potem mówi że to opisze 200 stron dalej. CHAOS. Użycie stickerów ratuje.

Część I książki to przelot przed język dając trochę miejsca interfejsom oraz delegatom. A reszta to dotknięte (nawet nie ruszone tematy), które zaczynają się w sposób ‘kup tą książkę’, ‘kup tą książkę mojego autorstwa’… Nie oczekuje że opiszę się każdy z C# język ale można mniej a dokładnej.

Pierwszy raz zauważyłem aby książka miała tyle błędów. Ortografy czy błędy stylistyczne wybaczę, ale nie błędy w kodzie, czy też nie uważne tłumaczenie itp.

Moim zdaniem Autor nie zna tematu.

Co najwyżej dotknął temat patykiem. Złość mnie zbiera, że ta pozycja będzie sąsiadować z Wyrażenia regularne Autor: Jeffrey E. F. Friedl. O to książka techniczna. Wzór nie do pobicia.

Wstydź się Jesse Liberty, że taką książkę opublikowałeś. Ocena 4/10.

Jajka i spam tutaj: jliberty@microsoft.com

Znasz książkę godną polecenia? Napisz w komentarzu!

Dlaczego skrobie programy w C#/CSharp/.NET

Zamiast ’skrobie’ może być ‘piszę’ dla tych którym to przeszkadza: sed s/skrobie/pisze

Ostatnio Ci którzy obserwują mnie na Blipie zauważyli, że przeważą wpisy z tagiem ‘csharp‘ nic dziwnego bo ten język od Microsoftu pochłoną mnie w całości. I nie widzę świata poza nim.

Ale jak to się zaczęło.

W szkole pisałem program, grę Pong (Dwie paletki i jedna piłka). Pierwszy program w C++ do którego podszedłem w sposób obiektowy. Jednak nie było czegoś co by wmuszało ciągłe myślenie obiektowe jak, śmierć z kosą, aby nie dać się pokusie tworzenia wszystkiego strukturalnie, a wiem, że złe podjęcie problemu na początku powoduje nie potrzebny nakład pracy.
C++ wydaje mi się bardzo zgrzybiały, nie nowoczesny. Tak że postanowiłem go porzucić i szukać czegoś nowego.

Ruby, Python, PHP

Ruby - czytałem 0,5 godziny jakąś książkę o tym języku i byłem zachwycony jak prosty jest ten język. Wręcz można powiedz że piszesz program hasłami po angielsku a Ruby robi to tak jak napisałeś. Nie trzeba pisać ogromnych programów po setki linijek, a wystarczą małe kilka, kilkanaście linijek.

Wtedy zapaliła się czerwona lampka, dla mnie – małe programy == mało pisania == zero komentarzy.

Osobiście wole się męczyć i klepać wielkie ilości kodu i mieć kod samo komentujący się, niż do którego trzeba się dodatkowo wysilać. Odpowiednio dobrane nazwy wystarczą, aby nie trzeba było dodawać bilionów linijek komentarzy, a bardzo mądre słowa napisał Jeff Atwood ( a co, cytujmy znanych).

Szybkość programowania dla mnie nie jest najważniejsza jeśli była wyważona pomiędzy masochizmem a lenistwem, było wszystko OK.  Lubię szukać metody na przyspieszenia działania fragmentu kodu.

Python - rozwija obecnie 2-3 wersje 2.5/2.6/3.0 a użytkownik Linuksa posiada dodatkowe biblioteki dla każdej wersji. Koszmar. Wydanie wersji 3.0 zapewne spowolni rozwój.

PHP - Taaaa.

A może JAVA?

Początkowo powiedziałem nie chce kawy i że nie chce tam wyjeżdżać.

Pierwszy kontakt z nowym językiem jest na płaszczyźnie ‘umożliwi kompilacje “Hello World”‘. Pociągnąłem JRE (Java Runtime Environment) oraz JDK (Java Development Kit). Okey do wszczęcia potrzebuje jeszcze jakiegoś IDE, NetBeans czy Eclipse.
Na pierwszy ogień leci NetBeans. Uruchamiam (długo, myślę pierwsze uruchomienie to dlatego). Tworzę nowy, pusty projekt. I przepisuje z zapałem Hello World:

1
2
3
4
5
6
7
public class HelloWorld
{
    public static void main(String args[])
    {
        System.out.println ("Hello, World!");
    }
}

Wszystko było słodko dopóki nie doszedłem do linijki ‘System.’ wtedy NetBeans zabrał się z zapałem do pomagania mi w pracy, tyle że to pomaganie trwało tyle że zaparzyłem herbatę. Okej okej miałem parę programów włączonych, wyłączyłem je i przy ‘System.out.’ miałem tylko czas aby się upewnić czy woda się gotuje. Spojrzałem na jak Java zjada mi zasoby zarządza pamięcią. Na ‘Zaćmienie’ nie miałem czasu i sił witalnych.
Nie przypominam sobie abym korzystał z aplikacji napisanych w Javie (czyli jednak coś Javą jest nie tak). Do tego słyszałem nie niepokojące głosy odnoście Sun’a i JavaFX (że traci dochody a drugi, że się spóźnia).

Czas na C#/CSharp

C#,C#,CSharp skąd ja to znam… Czyżby to produkt ‘mikro-oprogramowania’

Wielu narzeka narzeka na Vistę, jednak Microsoft posiada kilka całkiem, całkiem fajnych produktów jakich jak Office 2007, Notatnik [1] i Visual Studio. Zdecydowanie sądzę że Visual Studio wyszedł im bardzo dobrze. Co więcej opublikowali go w częściach za darmo( wersje są nieco okrojone ). Do tej pory chwaliłem sobie (natywny) kompilator C++ w Visual C++

[1] Dobrze przeczytałeś Notatnik – jest prosty i szybki, używam go codziennie. Polecam ustawić czcionkę ‘Consolas’ i skorzystać z zaawansowanych funkcji i nie mów, że korzystasz z Notepad++,  Lamer.

Identyczny pierwszy styk jak z Javą ‘umożliwi kompilacje “Hello World”‘ pobieram instalator, 2 sekundy i instalator się ściągnął. Mnie nie oszukasz, czuję jakiś kant i rzeczywiście był. Instalator mały bo on służył do ściągania, reszty. Coś takiego ma służyć rozłożeniu obciążeniu łączą? Tak czy siak. Instalator ściąga co tam potrzebuje. Czas na kolejną herbatę/kawę. Na koniec Pan Instalator powiedział że powinienem w ciągu 30 dni zarejestrować kopię. PO CO? Już się przecież męczyłem przy sumiennym wypełnianiu ankiety przy Visual C++, a teraz to samo przy Visual C#. Myślałem, że Microsoft zaraz dostanie informacje że mieszkam w Nigerii ::Zły śmiech::. Loguje się na stronie z Live ID i co ? Mam wszystko wypełnione po ostatnim rejestrowaniu. Szybki zjazd w dół, kilk ‘Register’ i mam klucz który wklejam i tak jestem posiadaczem dożywotniej(?) licencji.

Hello World w C#:

?View Code CSHARP
1
2
3
4
5
6
public class Hello1
{
   public static void Main()
   {
      System.Console.WriteLine("Hello, World!");
   }

Uruchamiam i działa. YES. Proste.

MSDN to rzecz przez którą pokochałem C# jako język programowania. Co nie wpiszesz, dostaniesz podpowiedz jak masz zadanie zrobić. A poza tym wiecie. Coś zaiskrzyło….

Niedługo dowiecie co jeszcze spowodowało że mogę śpiewać to:

Wpis nie jest sponsorowany przez Microsoft. Muszę kończyć Steve dzwoni…

Oprogramowanie na Sylwester Winamp i Mp3tag

Zostałem poproszony abym odpowiadał za muzykę na sylwestrze 2008 – 2009. Nigdy się w takie rzeczy nie bawiłem, także nie miałem muzyki odpowiedniej na sylwester i a wiadomość, że będę za to odpowiedzialny dostałem z opóźnieniem (1-2 przed sylwestrem). Nie bawiłem się w miksowanie, zadaniem moim było dobieranie kolejnych piosenek, aby się nie powtarzały, ani nie były monotonne.

Winamp – Powszechnie znany odtwarzacz Mp3 i innych formatów za pomocą wtyczek. Kluczowym dla mnie była możliwość zgrania płyt od innych uczestników imprezy. Ripowanie płyt do mp3 jest tylko w wersji PRO (za którą ofc trzeba płacić). Wyjściem z sytuacji, bez okradania twórców Wiampa jest skorzystanie z pluginu do ripowania w format ogg. Całe szczęście, że Winamp nie problemu z odtwarzaniem otwartego formatu nie tak jak Windows Media Player. Powodami przez które wybrałem Winamp do zgrywania a nie inny program były:

  • O jeden program mniej w systemie
  • Po zgraniu płyty CD mam piosenki w dostępne w Bibliotece Mediów

Oczywiście z wybraniem Winampa kryło się większe prawdopodobieństwo, że program odmówi posłuszeństwa i będę klops. Na cała szczęście przez całą noc Winamp spisał się na 5+.

Mp3tag – Program tak świetny, że postanowiłem przekazać datek na rozwój [1]. Program stał się niesamowicie przydatny przy masowej zmianie wykonawcy, wtedy kiedy dostawałem płytę z składanką. Szybciej rozpoznaje się utwory po tytule niż po wykonawcy. Poza tym możliwość pobierania inforamcji do tagów z internetu. Ogólnie miodzio program.
[1] – Przekaże jak będę miał konto na PayPalu

Gmail Favicon – pokazuje ile masz nie przeczytanych wiadomości

Cichaczem wracam do pisania

Z poczty od Google korzysta wiele osób, także ja. Posiadam ją stale otwartą w Firefoksie i zabezpieczoną przed zamknięciem. Jednak stała zakładka zajmuje miejsce. Wyjściem byłoby skorzystanie z FaviconizeTab. który sprawią że karta jest zminimalizowana do minimum, pokazując tylko Faviconkę (ten mały graficzny obrazek 16×16, u mnie monitor). Jednak robiąc z Gmailem. Tracimy możliwość rzutu okiem, czy jest coś nowego.
Tutaj z pomocą przychodzi jeden skrypt UserJS, Greasemonkey, który zmienia faviconkę Gmaila w zależności od ilości nie przeczytanych e-maili

Efekt działania

Link do Userscripts Post natchninony przez lifehacker.com

O pogoni za numerkami w oprogramowaniu

Zauważyłem u siebie, że przesadnie dbam oto aby mieć najnowsze, najświeżesze wersje oprogramowania. Po mimo tego że nie znam, nie zauważam różnic pomiędzy kolejnymi wydaniami.

Przykładowo moja komórka Nokia 3113c. Ostatnio prawie co tydzień sprawdzałem czy może przypadkiem nie wyszła nowa wersja oprogramowania. To było chore. Na proste pytanie “po co?” nie miałem żadnej odpowiedzi oprócz, idiotycznego stwierdzenia  “bo tak”.

(prawie) Wszyscy zaczęli aktualizować swoje blogi oparte na Wordpress do wersji 2.7 [1] Ale co w jedwabistym (dzięki Fanatyk za nowe słówko w słowniku) jest takiego, że wielu rzuca się na aktualizację? Okej, tej nowy interfejs dla admina, miło. Ale czy to ma duże znaczenie dla czytelnika (IMHO najważniejszej osoby na blogu)? Im wyższy numer tym więcej pojawia się poprawek. więc za kilka tygodni/miesięcy pojawi się 2.7.1/2.7.2

[1] Nazwa kodowa Wordpressa 2.7 to Coltrane wzięte od nazwiska wielkiego jazzmana Johna Coltrane. Warto się zainteresować jego twórczością, chociaż jest (bardzo) trudna w odbiorze, w szczególności jego późniejsze nagrania.

Nowa złota zasada: Nie zmieniaj tego co aktualnie działa (ew. rób kopie :) )

Trzeba znormalnieć.

Licz jak Egipcjanie.

Genialna metoda na mnożenie dużych wartości liczbowych. Wymagana znajomość kolejnych poteg dwójki, ale to osobom związanym z informatyką łatwo do głowy wchodzi :) .