czwartek, 13 listopada 2014

JAVA OMG

  • Name: lets call this anti-pattern signification
  • Description: we can be sure that the original string will be converted to string
  • Why: to much free RAM and CPU
  • Example:
    new String(Integer.toString(deviceInfo.imageWidth))
    

środa, 12 listopada 2014

Quine

A quine is a program that prints itself:

Quine in JS

// browser
!function $(){console.log('!'+$+'()')}()

// node
(function quine() {
    console.log(quine.toString())
})()

Quine in Java

  // http://c2.com/cgi/wiki?QuineProgram
  public class Quine {
 public static void main(String[] args) {
 String[] str = {
  "public class Quine {",
  " public static void main(String[] args) {",
  "  String[] str = {",
  "  };",
  "  for(int i=0;i<3;i++)System.out.println(str[i]);",
  "  for(int i=0;i<9;i++)System.out.println((char)34+str[i]+(char)34+',');",
  "  for(int i=3;i<9;i++)System.out.println(str[i]);",
  " }",
  "}",
 };
 for(int i=0;i<3;i++)System.out.println(str[i]);
 for(int i=0;i<9;i++)System.out.println((char)34+str[i]+(char)34+',');
 for(int i=3;i<9;i++)System.out.println(str[i]);
 }
  }

Practical use

I used quines to print my programs as slides during Functional Programming workshop.

wtorek, 21 października 2014

Cat implementation of Maybe Monad

var _ = require('lodash');
var expect = require('chai').expect;

// implementation by Brandon Weaver
var maybe = function (object, methodCalls) {
    if (_.isUndefined(object)) {
        return undefined;
    }
    if (_.isEmpty(methodCalls)) {
        return object;
    }

    return _.reduce(methodCalls.split('.'), function (obj, method) {
        return obj ? obj[method] : undefined;
    }, object);
};

_.mixin({maybe:maybe});

describe('maybe', function () {

    afterEach(function (done) {
        setTimeout(done, 60);
    });

    // now
    var foodChain = [
        {food: 'mice', race: 'cat'},
        {food: null, race: 'mice'}
    ];

    var getFood = function (anml) {
        return anml.race + ' loves to eat ' + anml.food;
    };

    // with maybe
    var safeGet = function (anml) {
        return _.maybe(anml.race) + ' loves to eat ' + _.maybe(anml.food);
    };

    var betterSafeGet = _.maybe(getFood);

    it ('allows safe filters', function (done){
        // old way to do it
        var safeFilter = _(foodChain)
            .filter(function (el) {
                return el.food && el.race ? true : false;
            })
            .map(getFood);
        var mapWithBetterSafeGet = _(foodChain).map(betterSafeGet);
        var filterSafeGet = _(foodChain).filter(betterSafeGet);

        //ERROR
        expect(filterSafeGet.value()).eql(safeFilter.value());

        done();
    });

    it('gets same output as getter with if', function (done){
        var mapWithIf= _(foodChain)
            .map(function (anml) {
                if (anml.food && anml.race) {
                    return getFood(anml)
                }
            });

        var mapWithBetterSafeGet = _(foodChain).map(betterSafeGet);

        //ERROR
        expect(mapWithIf.value()).eql(mapWithBetterSafeGet.value());

        done();
    });

    it('allows safe getters getter', function (done) {
        var outSafeGet = _(foodChain).filter(safeGet);
        var filterWithBetterSafeGet = _(foodChain).filter(betterSafeGet);
        expect(outSafeGet.value()).eql(filterWithBetterSafeGet.value());

        done();
    });

    //describe dot notation
    it('is idempotent', function (done) {
        var object = {a: {b: {c: 1}}};
        expect(_.maybe(object, 'a.b.c')).eql(1); // returns 1
        expect(_.maybe(object, 'a.b.c.d.e.f.g')).to.be.undefined;
        // 1*1 ?= 1
        var one = _.maybe(_.maybe(object, 'a.b.c'), 'a.b.c');

        // ERROR returns undefined
        expect(one).eql(1);

        done();
    })
});

środa, 3 września 2014

CPU access in NOT like File Access

Yesterday on a meeting, someone mentioned, that CPU is like File access, that if we have ex: 4 threads system. Having 2 processes accessing the all 4 threads would be on first-come-first-serve basis.
That first process will utilize almost 100% CPU power (will be resource hog). Resulting huge overhead.

That is not the case.

Modern CPU's are very efficient in switching between threads.
The CPU time (computation time) of both processes would be divided almost equally.
The computation time of each processes would be ca. twice slower. Than running them separetly.
The total computation time of both processes would be (almost) equal to time of running them sequentially.

So CPU access in nothing like File Access

BTW: Modern kernels also can give multiple file descriptors so even File access would not be on first come-first-serve-basis

It all would be ok, I mean, all people can have false assumptions, but the person stating such bologna is Head of IT Unit :(...


Further reading:
http://en.wikipedia.org/wiki/Hyper-threading
http://en.wikipedia.org/wiki/Thread_%28computing%29
 

środa, 16 lipca 2014

brack.ch never again

brack.ch never again... they just sold me used phone as a new one. I start the phone.. and what do I see? A naked picture of previous owner :D ... together with his Hotmail account, and a friends list... :( What is more disturbing that the shop representative did not care at all. Apparently I'm supposed to send the phone on my cost to some 3rd party shop, and they will allow me to buy other things on theirs website up to phone cost.

czwartek, 28 marca 2013

Choosing Framework for your business

Wich framework would be best to build company on? This graphs may help deciding. We can see that due to extensive commercial support 'Play'(blue) is really quickly closing gap to 'Spring Java'(yellow). 'Ruby on Rails'(purple) stays 'the coolest' framework, and 'Zend Framework' basically kills 'Symfony Framework'(green) play frameworkzend frameworkspring framework200520072009201120...2020404060608080100100

wtorek, 12 lutego 2013

Refactoring To Command Pattern

//usage of command pattern to refactoring big or overloaded methods
//Gigantic classes with hard to change methods
class Wrong_Customer {
    var  $_age;
    var $_bill;
    var $_man;
    function __construct($age, $bill, $man) {
        $this->_age=$age;
        $this->_bill=$bill;
        $this->_man= $man;
    }
    //addind discount will require modyfy other classes
    //new calculation devices requre to chenge methods
    function returnFinalBill() {
        $discountPercent=0;
        if($this->_age >60) { $discountPercent +=0.10;}
        if(!$this->_man) { $discountPercent +=0.20;}
        $bill = $this->_bill*(1-$discountPercent);   //100%=1
        return ("Wrong Customer Bill Amount: $".$bill."
"); } } interface BillPlayer { //based on sex how to calculate bill public function calculateBill($amountDue); } interface Command { //methods that change function executeCalculateBill($amountDue); } class WomanOver60 implements BillPlayer { public function calculateBill($amountDue) { return "Bill Amount for Woman over 60: $".($amountDue*(1-0.30))."
"; } } class ManOver60 implements BillPLayer { public function calculateBill($amountDue) { return "Bill Amount for Man over 60: $".($amountDue*(1-0.10))."
"; } } class ManUnder60 implements BillPLayer { public function calculateBill($amountDue) { return "Bill Amount for Man under 60: $".($amountDue)."
"; //no discount } } class Waiter implements Command { //Comander var $_billPayer; function __construct(BillPlayer $billPayer) { $this->_billPayer=$billPayer; } function executeCalculateBill($amountDue) { return $this->_billPayer->calculateBill($amountDue); } } class CashRegister { //invoker from command pattern, execute diferent methods based onobject type passed //return final bill //_Waiter diferent weiters, !adds flexibility! //stores Command's var $_command; function __construct(Command $command) { $this->_command=$command; //all things that implements command //like waiters } function returnFinalBill($amountDue) { return $this->_command->executeCalculateBill($amountDue); } } // more flexebility - only one thing to change for adding bill Payers class CustomerTypePicker { //if u want NEW bill payer tpe goes here!!! static function getManOver60(){ return new ManOver60(); } static function getManUnder60(){ return new ManUnder60(); } static function getWomanOver60(){ return new WomanOver60(); } } //adding customer group for easier to menage diferent customers class CustomerGroup { private $_customers=array(); function __construct($customers=array()) { $this->_customers = $customers; } function getCustomer($index) { return $this->_customers[$index]; } function addCustomer(BillPlayer $customer) { return $this->_customers[]=$customer; }//TODO deleteCustomer } class Main { function __construct() { $wC = new Wrong_Customer(70, 100, false); //woman Over 60 echo $wC->returnFinalBill(); } function testCommandOnWomenOver60() { $picker = new CustomerTypePicker(); $sally = $picker::getWomanOver60(); $waiter = new Waiter($sally); //sallysWaiter $bill = new CashRegister($waiter); echo $bill->returnFinalBill(100); } function testCommandOnManOver60() { //NOW better groups customers to array $picker = new CustomerTypePicker(); $bob = $picker::getManOver60(); $waiter = new Waiter($bob); //sallysWaiter $bill = new CashRegister($waiter); echo $bill->returnFinalBill(100); } function testCustomerGroup() { $picker = new CustomerTypePicker(); $customerGroup = new CustomerGroup(); $sally = $picker::getWomanOver60(); $customerGroup->addCustomer($sally); echo $customerGroup->getCustomer(0)->calculateBill(100); } } $run = new Main(); $run->testCommandOnWomenOver60(); $run->testCommandOnManOver60(); $run->testCustomerGroup();
Java implementation here: http://www.newthinktank.com/2013/02/code-refactoring-13/

poniedziałek, 7 stycznia 2013

środa, 11 stycznia 2012

Pesky FACEBOOK adds

How to remove advertisement from facebook?
*install AdblockPuls from page http://adblockplus.org/en/

*add filter "###pagelet_ego_pane_w"
*add filter "#div(ego_section)"

or even better:
*add filter ###pagelet_ego_pane
*add filter ###pagelet_ego_pane_w
*add filter #div(ego_unit_container)

*done. Annoying ads are now blocked!

Why we do that? There may be many reasons ex. low bandwidth connection.
If u want i may also present filters for ads for most important sites.

Edited 12.01.2012: for new Facebook ads

czwartek, 15 kwietnia 2010

Virtualne maszyny Linux przez przegladarkę

1.W pracy/biurze często strony typu youtube sa filtrowane.
Co zrobic?
2.Często mamy jakąś aplikację i chcemy ja przetestować - czemu nie na zdalnym wirtualnym serwerze.

Odpowiedzią jest wirtualny komputer dzialający przez okno przeglądarki:
http://www.click2try.com/

środa, 24 lutego 2010

Nocna Zmiana

Głośny Film o tzw. nocy teczek.
Film jest odpowiedzią na pytanie - dlaczego w polsce nie przeprowadzono lustracji i dlaczego państwo w dalszym ciągu wypłaca wieksze emerytury represorom, niż represjonowanym.

http://video.google.com/videoplay?docid=2185058413755445485#

wtorek, 16 lutego 2010

Flash vs Javascript

Na stronie
http://css-tricks.com/jquery-robot/
Jest pokazane jak zastąpić javascriptem funkcje Flasha w generowaniu grafiki do stron WWW.
Niektóre Powody dla których się podejmuje próby zastąpienia Flasha JavaScriptem:
  • Flash jest formatem własnościowym - tak naprawde nikt nie wie w jaki sposób on działa
  • JavaScript jest obecny na prawie każdej stronie WWW, i konkuruje z Flashem o dostęp do CPU
  • JavaScript może być bardziej przyjzny SEO niz Flash
  • Flash - choć jest kompresowany - to jest bardzo niewydajny w generacji treści.
  • JavaScript otrzymywany jest w postaci otwartego kodu, powoduje to że każda kolejna wersja enginów przegladarek jest szybsza, czego neistety o Flash się nei da powiedzieć
  • Do JavaScript nie potrzeba żadnych pluginów, - ponadto pojawiły się w sieci metody kompresji kodu
W związku z powyższym, polecam gorąco powyższą stronke wraz z robotem na niej przedstawionym :).

poniedziałek, 25 stycznia 2010

Jak zainstalować program PCBIZNES na Linux

Jak zainstalować program PCBIZNES na Linux?
Ponieważ z zainstalowaniem silnika bazy na systemach z rodziny Linux nie ma najmniejszego problemu,
(nalezy tylko pamietać aby do przydziału Samby wrzucić plik licencyjny),
opiszę jak zainstalować APLIKACJĘ KLIENCKĄ.

Sprawdzony sposób(sposób trudności - dla klientów Media Markt):
Wymagane:
-maszyna z UBUNTU/FEDORA/(być może SUSE)
-WINE 1.2+
-INSTALATOR CD - płytka od producenta
-firebird 2.0+ - fbclient.dll wersja pod windows :(
-8-9min. czasu

instalujemy wine - sprawdzamy czy konfiguracja jest poprawna.
uruchamiamy za pomocą WINE nasz instalator. Następnie przechodzimy przez proces instalacji aplikacji klienckiej PCBIZNES, klikając ciągle DALEJ.
Doda nam to do pulpitu piekny aktywator - który niestety nie zadziała :(.

Teraz bierzemy nasz plik fbclient.dll z WinZgrozy XP i zmieniamy nazwę na "gds32.dll" i wrzucamy do katalogu "/home/username/.wine/dosdevices/c:/windows/system32" w naszym LINUXIE. To jest biblioteka do łaczenia się z bazą danych - czemu zmieniamy nazwę? otórz historycznie firebird wywodzi się z serwera baz INTERBASE  - i tam biblioteka kliencka miała właśnie tę nazwę.

Odpalamy teraz Programy>Wine>Programy>Steam Soft SQL>Konfiguracja stanowiska
Ustawiamy Baza na zdalnym serwerze
podajemy adres IP serwera np. "192.168.1.110"
katalog bazy danych zgodny z tym na serwerze np . "/data/db"
rozszerzenie wybieramy takie jak zdefiniowane jest na serwerze np ".fb"
katalog współdzielony i katalog profili....

tutaj sprawy się komplikuja(minimalnie)
załóżmy że na naszym serwerze mamy zdefiniowany przydział Samby ze ścieżką UNC "\\192.168.1.110\shared_dir"
odpalamy terminal w katalogu "~/.wine/dosdevices" poleceniem "mkdir unc" tworzymy katalog "unc"
w tym katalogu tworzymy kolejne katalogi "192.168.1.110/shared_dir"
sprawdzamy czy jest poprawnie "cd ~/.wine/dosdevices/unc/192.168.1.110/shared_dir"

teraz jeszcze np. w /mnt potrzebny bedzie katalog /192.168.1.110/shared_dir
uwaga pamietac o uzyciu sudo w /mnt

montujemy nasz udział Samby jako ścieżkę UNC w /mnt
"sudo mount -t cifs -o username=USERNAME,password=PASSWD //192.168.1.110/shared_dir /mnt/192.168.1.110/shared_dir"

linkujemy katalogi
 "ln -s /mnt/192.168.1.110/shared_dir ~/.wine/dosdevices/unc/192.168.1.110/shared_dir"

w programie konfiguracja połączenia ustawiamy nasz przydział
\\192.168.1.110\shared_dir
i klikamy test; 3 możliwe przypadki:
OK>ok
"nie można znaleźć pliku licencji " > źle zlinkowaliśmy katalogi
"nie można otworzyć \\192.168.1.110\shared_dir > źle zamontowaliśmy przydział Samby

Teraz aplikacja kliencka powinan działać bez zarzutu.

  • można oczywiście od razu zamontować nasz shared_dir do WINE, ale lepiej trzymać porządek na dysku.
  • jeśli chcemy wykonać jakiś skrypt np. typu .bat w srodowisku WINE, można otwierać go jako
" wine start /unix %f "
lub z konsoli
" wineconsole cmd "








piątek, 15 stycznia 2010

A Party of Famous Physicists

One day, all of the world's famous physicists decided to get together for a tea luncheon. Fortunately, the doorman was a grad student, and able to observe some of the guests...
Everyone gravitated toward Newton, but he just kept moving around at a constant velocity and showed no reaction.
Einstein thought it was a relatively good time.
Coulomb got a real charge out of the whole thing.
Cavendish wasn't invited, but he had to show Newton how to find G.
Cauchy, being the only mathematician there, still managed to integrate well with everyone.
Thompson enjoyed the plum pudding.
Pauli came late, but was mostly excluded from things, so he split.
Pascal was under too much pressure to enjoy himself.
Ohm spent most of the time resisting Ampere's opinions on current events.
Hamilton went to the buffet tables exactly once.
Volta thought the social had a lot of potential.
Hilbert was pretty spaced out for most of it.
Heisenberg may or may not have been there.
The Curies were there and just glowed the whole time.
van der Waals forced himself to mingle.
Wien radiated a colorful personality.
Millikan dropped his Italian oil dressing.
de Broglie mostly just stood in the corner and waved.
Hollerith liked the hole idea.
Stefan and Boltzman got into some hot debates.
Everyone was attracted to Tesla's magnetic personality.
Compton was a little scatter-brained at times.
Bohr ate too much and got atomic ache.
Watt turned out to be a powerful speaker.
Hertz went back to the buffet table several times a minute.
Faraday had quite a capacity for food.
Oppenheimer got bombed.

środa, 30 grudnia 2009

Ograniczenie godzin logowania uzytkownikom Windows Server

Co zrobić aby użytkownicy nie logowali się np. a nocy albo w nd na serwer?

Ogranicznie godzin logowania dla użytkowników według dni tygodnia:
najlepiej użyć komendy

net user /time

np:

for /F "skip=1 tokens=1 delims=," %i in (users.txt) do net user %i /time:pn-pt,6:00-18:00

gdzie users.txt jest p;likiem z naszymi wybranymi użytkownikami.

Niestety tylko przy uzytkownikach Active DIrectory można ograniczać niektórym grupom, a tak trzeba poszczególnym użytkownikom.

wtorek, 29 grudnia 2009

$_FILES i PHP

Czytanie instrukcji-pomaga:
w php.net jak byk stoi napisane: rozwiazanie mojego problemu:
Jesli po uploadowaniu pliku skryptem (form input type="file") nie dostajesz go na serwerze,
albo superglobal $_FILES jest pusty.
To problem może być w:
  • w formie:
używasz " zamiast '
zamykasz!!! formę </FORM>
używasz enctype="multipart/form-data"
używasz POST a nie GET
używasz innego name dla kazdego input fielda
używasz <fieldset>

  • php.ini:
post_max_size=12MB    //nie zapomnieć o tym ze MB<>M !!
upload_max_file_size=12MB
file_ulpoads=On
  • na dysku:
masz miejsce w katalogu tmp, albo tam gdzie masz ustawione uploadowanie plików
apache ma prawa zapisu w tym katalogu(w windows standartowo wszyscy maja wszędzie prawo domyślnie :(, ale w Linuxie root mogł zmienić prawa dostępu!) )

Uzyskana forma powinna wygladać mniej wiecej podobnie:
<font color="#003300"><form name="form" action="index.php" method="post" <b>enctype="multipart/form-data</b>">
<fieldset>
<input type="file" name="firstfile"//>
</fieldset>
<fieldset>
<input type="file" name="secondfile"//>
</fieldset>
<fieldset>
<input type="submit" value="Wyslij" //>
</fieldset>
</form></font>

Czasami jeszcze javascript powoduje błędy(np w niektorych wersjach frameworku VCL), ale żadko się to dzieje.



niedziela, 27 grudnia 2009

Windows RDP problem fix

Jeśli ktoś ma problemy z połaćzeniem się poprzez RDP z serwerem Windows.
TAki że po kilku minutach sesja jest rozlączana,
i czasami potem już nie da się podłaczyć do tej maszyny poprzez RDP(a serwer apache/IIS/tomcat dalej działa)
Problem wysępuje m. in. WindowsSERWER!!2003, WindowsXP sp2+,...
To rozwiązaniem moze być zmiana (regeditem) wpisu w rejestrze:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
wartość z 10(szesnastkowo) na:
  • 20 czyli - 32MB
  • ew 80 - czyli 128MB
Problem wiąże się z tym że sesja ma zbyt małą wpołdzieloną pamieć miedzy wszystkie DLLki : sterownik drukarki, sterownik karty graficznej, itd.. i czasami brakuje juz pamieci dla nich.

Problem ten jest opisany w sieci jako " problem RDPDD.dll " czyli "remote desktop protocol display driver problem/error"
Czasami można też ten problem odkryć przegladając Logi serwera i odnajdując poniższy wpis:
\SystemRoot\System32\RDPDD.dll failed to load

Innym rozwiązaniem zarzucenie WInZgrozy na rzecz Linuxa ;)

wtorek, 15 grudnia 2009

Turniej ju-jitsu w Kazimierzy Wielkiej 2009r.

Na temat zawodów:
Data 12-13.XII.2009r.
Turniej ładnie rozreklamowany. Goście z niemiec(kungfu). Darmowy SMACZNY! poczęstunek i picie. Bardzo przyjazna atmosfera zawodów. Nad tym wszystkim unosił się duch sportowej rywalizacji. Ale organizacyjnie to klapa:
  • Ostatecznie nie dostaliśmy regulaminu zawodów.
  • Ważyć - to się ważyliśmy sami - wraz z sekcja z Kobyłki.
  • Zasady się zmieniły w trakcie walk. - np. zawodnik juz podczas walki się dowiedział, że bedzie tylko jedna runda.. chociaż reszta turnieju byla rozgrywana w 2 rundowych pojedynkach.
  • Niemożliwośc stosowania podstawowych technik: Zabroniono używania ciosów prostych! Ogolnie zgadzam się z sędziami, że to ograniczyć mogło liczbę nokautów i kontuzji... ale przecież to jest FULL CONTACT!! Jak ktoś się boi, to przecież może wystartować w semi albo/i light contact. Dalej liczba technik zabronionych: lowkick?! front kick... ogolnie każdy kick (chyba ze wykonywany z wyskoku??WTF!!), duszenia nogami itp.. No prawie jak na turnieju szachowym.
  • Rozstawienie zawodników - cześć sekcji została tak rozstawiona że trzeba bylo toczyć bratobójcze walki! już w pierwszej walce. Najcześciej zawodnikó z jednej sekcji ustawia się tak, że walczą przeciw sobie dopiero w finałach (ew. połfinałach).
 Liczę że te niedociągnięcia będą naprawione za rok.

Przebieg turnieju:
Dojechaliśmy szcześliwie w 3 auta ok godz 8:00. Jak sie załoga wypakowała to sie okazało, że musimy sami się zwarzyć. Potem była przerwa techniczna do ok 11:00.

Ok 12: nasz junior Adaś miał pierwszą walką.
Pierwszy pojedynek przegrał z technicznie lepszym zawodnikiem. Ale ostatecznie wywalczył 2gie miejsce. Myślę, że wyciągnie wnioski z pierwszej porażki, bo parę razy miał przewagę nad przeciwnikiem - raz nawet założył mocne duszenie.

Następnie była przerwa obiadowa, po której nasz senior Norbert walczył z zawodnikiem gospodarzy(?).
Po ciężkiej i dobrej walce Norbert przegrał.

Następnie doszło do bratobójczej walki miedzy naszymi zawodnikami: Tomkiem i Wojtkiem.
Wojtek jak na swoją wagę jest nadzwyczaj silny - ma siłę porównywalną z moją(a jestem cieższy o przeszlo 20kg). Co ciekawe swoją siłę uzyskuje przy zupełnym braku mięsni. Dla mnie, jako jako czlowieka który miał w zyciu już sporo doczynienia z biochemia, jest to spora zagadka - jak on to robi?
Tomek z kolei jest sporo słabszy od Wojtka, ale dzieki swojemu wielkiemu zasięgowi(wzrost 2m) i lepszej technice nie można powiedzieć kąpensuję tę pierwszą wadę.
Pojedynek ciekawy.Wynik walki:
  • Tomek: wybita rzepka z kolana.
  • Wojtek: otrzymane obrotowe kopniecie na glowe - w potylicę.
W ekekcie czego : obaj kontuzjowani.Wojtek się wycofał z turnieju, a Tomek który stracil sporo na swej ruchliwosci (uszkodzone kolano) przegrał sromotnie swoja kolejna walkę.

Kolejna walka miedzy "naszymi chlopakami" odbyła się w w kategorii ok 80-90kg.
Tutaj niespodzianka: po bardzo zawziętym pojedynku Jacek(w zółtym pasie) załatwił stojego Senseji(pseudo Kulfon). Do końca walki pojedynek bardzo wyrównany i wynik nie był przesądzony do statniej sekundy. Była to bardzo ładna techniczna walka. Pełna zaskakujących rozstrzygnięć.

Okazało się że nikt nie zgłosił się do mojej kategorii wagowej!, Choć widziałem zawodnikó odpowaidających mi posturą, to pewnie startowali w kata(formach) - Dlatego za rok musze zejść do 82 kg, abym mogł sobie cokolwiek powalczyć.

Wyszedłęm na matę , ale z powod braku jakichkolwiek chetnych do walki ze mną, odebrałem tylko gratulacje od sędziego i chłopaków za NAJKRÓTSZĄ walkę finałową. Zwyciezyłem w 0s!! tego nawet Chuck Noris nie potrafi!

Niestety, nie mogliśmy być na gali(pokazach), ani wręczeniu nagród, gdyż musieliśmy wracać do Krakowa. Czego bardzo żałuję.

Ogolnie turniej zostawił mieszane uczucia, ale mam nadzieję ze za rok impreza okrzepnie i nabierze jeszcze wiekszej siły.
Za rok. też będziemy.

poniedziałek, 14 grudnia 2009

Facebook chat w Ubuntu

Dla czatujących za pomocą Pidgina dobra wiadomość:
Wójek google przygotował:
Nowy pakiet dla Facebooka.
wystarczy w terminalu wpisać:
i można juz czatować z facebookiem w UBUNTU.
Ciekawe tylko czemu do Empathy jest mniej wtyczek?

wget http://pidgin-facebookchat.googlecode.com/files/pidgin-facebookchat-1.38.deb

sudo dpkg -i pidgin-facebookchat-1.38.deb


Zródło wiadomości:
Ubuntugeek.com

czwartek, 3 grudnia 2009

Cloud Computnig pod strzechy.

Dzis ustawiałem mój pierwszy prywatny "cloud cluster", czyli po ludzku chmurkę.
Wszystko chula na UBUNTU - ktorego od jakiegoś czasu męczę, bo wydaje się dużo lepszy od OpenSUSE,
którego też już muszę "męczyć".

Ogolnie aby tematem się woglóle zająć trzeba mieć:
  • ogólny "opyk" w Linuxach, szczególnie : Debian ew. RedHat, bądź UBUNTU
  • kilka maszyn - najlepiej 2+ rdzeniowe, 2+GB RAM - ogólnie śmieci do chmurki nie opłaca sie wrzucać
  • szybką sieć miedzy maszynami - najlepiej 1GB
  • wszystkie maszyny w tym samym segmencie LAN np. 192.168.52.x
  • wiedzieć conieco o podstawach cloud computing (polecam WIKI)
Na upartego, mozna wszystkie te ograniczenia ominąć, ale po co?

Niedługo napiszę co i jak trzeba zrobić, aby calość działała.
Jak pomyślę ze niedawno chciałem google płacic za dostęp do usług w cloud'zie....

To niedługo to jest już dziś:
Bierzemy nasze maszynki i z Instalki UBUNTU SERWER 9.10 wybieramy "Install Enterprise Cloud"
Potrzebować bedziemy 1 cluster i kilku 2+ node do spiecia w grid
nasz ClusterNode bedzie zachowywał się jako:
  • FRONTEND naszej chmurki
  • DNS - dla pozostałych komputerów w cloudzie
Jeśli nasz cluster działa.. instalujemy nasze nody(węzły). - instalka rozpoznaje że w segmencie sieci już ciała
nasz cluster - i domyslnie podpowiada aby dalej instalowac nody - węzły.

Po skończonej instalacji ostatniego serwera w chmurce , jeszcze raz włączamy
naszego pierwszą maszynę i uaktualniamy DNS (poleceniem euca_conf). Aby widział wszystkie nody.
Ciekawe że sam tego nie robi.. pewnie chodzi aby ktoś nam nie podrzucił takiego spreparowanego noda do sieci.

Jak zarzadzać naszą chmurką??
Trzeba deploynąć na nią jakis obraz ISO - taki spraparowany serwer - jest do tego specjalne oprogramowanie
np. VMBuilder.
Są też w sieci dostępne gotowe obrazy do użycia - np. z preinstalowanym serwerem apache i tomcat.
Trochę mi jeszcze brak opcji do konwertowania zwykłych obrazów dysków w te chmurkowe,
ale pewnie liczba konfiguracji do zmiany bylaby bardzo duza.

Do zarządzania FrontEndową maszyną(Clustrem) jest kilka aplikacji - ja używam Eucalyptus.
Powiedziec mogę tyle : działa.