piątek, listopad 14, 2008

PostgreSQL, dane binarne i dumpy

Zauważyłem nowa fajną cechę w PostgreSQL. Otóż potrafi on wykonać tekstowy zrzut bazy danych, która zawiera dane binarne. Czyli, mam w tabelkach PostgreSQL pliki wgrane przez użytkowników. Robię pg_dump i wszystko działa poprawnie. Kiedyś tak nie było i dlatego teraz się cieszę.

czwartek, październik 23, 2008

Właśnie zostałem położną

Właśnie zostałem położną. Moja kotka urodziła zdrowe kocię i pewnie jeszcze coś urodzi. Przydały się te instrukcje o porodzie kotki. Chciałbym tylko dodać uwagę dla innych informatyków którzy też będą asystować przy porodzie kotki. Kotka nie wiedziała, że to poród i pierwsze kocie urodziła w kuwecie - pewnie kotka myślała że musi zrobić dużą kupkę. Pozwoliłem jej na to, bo nie chciałem żeby się stresowała. Natomiast nauczka na przyszłość. Przed kocim porodem lepiej jest usunąć piach z kuwety i włożyć tam gazety. Piasek przykleja się do kocięcia i kotka ma trochę roboty żeby go zlizać. O chyba idzie następne kocię...

wtorek, październik 14, 2008

Image + ProgressBar

Bardzo lubię technologie Adobe Flex gdyż można w niej pisać naprawdę szybko programy. Na przykład – potrzebuję indykatora postępu podczas ładowania obrazka. Mogę to zrobić w następujący sposób. Tworzę klasę pochodną od klasy odpowiedzialnej za wyświetlanie obrazka i definiuję metody przechwytujące zdarzenia postępu ładowania i wgrania całego obrazka. Łączę to z komponentem wyświetlania paska postępu i już. Wygląda to tak:

public class ImageWithProgressbar extends Image
{
  public function ImageWithProgressbar()
  {
    super();
  }
  
  private var _progressBar:ProgressBar;
  
  override protected function createChildren():void {
    super.createChildren();
    addEventListener(ProgressEvent.PROGRESS, progressHandler);
    addEventListener(Event.COMPLETE, completeHandler);
    _progressBar = new ProgressBar();
    _progressBar.mode = ProgressBarMode.MANUAL;
    _progressBar.percentWidth = 100;
    _progressBar.setStyle("horizontalCenter", "0");
    _progressBar.setStyle("verticalCenter", "0");
    addChild(_progressBar);
    _progressBar.visible = false;
    
  }
  
  private function progressHandler(e:ProgressEvent):void {
    _progressBar.setProgress(e.bytesLoaded,e.bytesTotal);
    _progressBar.visible = e.bytesLoaded < e.bytesTotal;
  }
  
  private function completeHandler(e:Event):void {
    _progressBar.visible = false;
  }
}

W efekcie otrzymuję klasę – która umożliwia wstawianie obrazków z paskiem postępu wyświetlanym podczas ładowania.

Silverlight

Dziś ukazała się nowa wersja Microsoft Silverlight. Nie znam tej technologii i mam dwa pytania, na które nie udało mi się znaleźć szybko odpowiedzi na necie:
  1. Czy Silverlight obsługuje kamery internetowe?
  2. Czy działa (dokładnie tak samo) na Windows Mobile?

środa, lipiec 30, 2008

Flex i automatycznie skalowane Canvas

W technologii Adobe Flex jest coś takiego jak płótno – Canvas. Jeżeli na tym płótnie położymy zbyt wiele obiektów, to Flex automatycznie narysuje suwaki (ScrollBar). Ja zamiast suwaków wolę skalować. To znaczy, gdy położę na płótnie jakieś elementy które z niego wystają to Flex skaluje zawartość zamiast rysować suwaki. Zrobiłem to dość prosto.

package eu.jakubiak.ui
{
  import mx.containers.Canvas;
  import mx.core.ScrollPolicy;

  public class ScaledCanvas extends Canvas
  {
    public function ScaledCanvas()
    {
      super();
      horizontalScrollPolicy = ScrollPolicy.OFF;
      verticalScrollPolicy = ScrollPolicy.OFF;
    }
    
    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
      super.updateDisplayList(unscaledWidth,unscaledHeight);
      var mx:Number = measuredWidth / scaleX;
      var my:Number = measuredHeight / scaleY;
      if(width < mx || height < my) {
        var sx:Number = width / mx;
        var sy:Number = height / my;
        if(Math.max(Math.abs(sy - scaleY),Math.abs(sx - scaleX))>0.01) {
          var s:Number = Math.min( sx, sy );
          this.scaleX = s;
          this.scaleY = s;
        } 
      } else if ( width > mx && height > my && ( scaleX != 1 || scaleY != 1 ) ) {
        scaleX = 1;
        scaleY = 1;
      }
    }
  }
}

Jest to użyteczne, gdy na przykład mamy koszyk z elementami przeciąganymi techniką drag&drop. Gdy włożymy do koszyka za dużo elementów to koszyk się pomniejsza zamiast rysować suwaki.

niedziela, lipiec 27, 2008

Wiśnie

Gdy byłem mały, to lubiłem opowiadać dowcip o rolniku, który to wyjechał na pole kombajnem walną się w czoło mówiąc "cholera, zapomniałem zasiać". Chciałbym za to przeprosić…

Otóż większość informatyków do myślenia potrzebuje cukrów. Znakomitym źródłem cukru jest dżem. Na przykład pyszny dżem wiśniowy!

W skład tego dżemu, wchodzi 40% owoców – wiśni, cukier i jeszcze coś. Nie znam się na produkcji dżemu, jednak lubię matematykę. Słoiczek waży 330g a to znaczy, że powstał z 13 dekagramów wiśni. To bardzo mało. To mniej, niż na rysunku poniżej.

Ceny idą w górę, drożeje dżem (co oczywiście wpływa na stawki godzinowe w branży IT). Mówią nam, że wszystko drożeje i że drożeją koszta pracy i inne takie. Na ogół to akceptujemy, bo dobry dżem jest potrzebny do życia. Jednak czasami potrzeba chwili refleksji…

Programiści!!! Jak myślicie – ile kosztują wiśnie znajdujące się w słoiku dżemu?

Kto nie wierzy, niech czyta. Tak dokładnie tyle. Za kilogram wiśni, które przecież trzeba zerwać z drzew (co jest bardzo męczącym zajęciem) – rolnik dostanie 60 może 70 groszy. Jeszcze raz, wszystko razem: 330g * 40% * 70gr = 9gr. Wiśnie w dżemie wiśniowym kosztują mniej niż 10 groszy.

Wiśnie w dżemie kosztują mniej niż 10 groszy. Moim zdaniem jest to bardzo nieuczciwe. Oczywiście, nam informatykom to zupełnie nie szkodzi – do czasu, aż na wyzysku sadowników karierę zbuduje następca Leppera. A tego bardzo nie chce, (zresztą jak większość moich znajomych sadowników). Dlatego dziś nagłaśnia na moim technicznym blogu ten problem. Dlaczego Polski sadownik za wiśnie dostaje 1/3 tego, co niemiecki? Jeżeli nie chcemy mieć kolejnego Leppera to zróbmy coś z tym szybko. Na wsi chodzą ploty o paleniu wiśni w punktach skupu. Z polskiego zagłębia wiśniowego do polskiej stolicy (w której mieszka wielu informatyków) jest tylko 35 kilometrów i 35 foto-radarów. Jeżeli nie chcemy mieć w Warszawie strajku sadowników, którzy wjadą traktorkami i zakorkują całe miasto – to zróbmy coś z tym szybko, protestujmy i mówmy o tym głośno! Ja protestuję:

Brutalnie protestuję. Ceny skupu płodów rolnych w Polsce powinny być zbliżone do europejskich – w końcu dążymy do Europy. Cena wiśni nie stanowi nawet pięciu procent ceny dżemu wiśniowego...

piątek, lipiec 25, 2008

Wyłączenie testów maven poprzez konfigurację

Aby wyłączyć cykl testów z procesu budowania aplikacji wystarczy uruchomić maven z opcją:

mvn –Dmaven.test.skip=true clean install

Jednak to nie do końca mi pasuje. Potrzebuję wyłączyć testy poprzez konfigurację. Plik settings.xml wygląda tak:

<?xml version="1.0" encoding="UTF-8"?>

<settings xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

    <profiles>

        <profile>

            <id>skiptest</id>

            <properties>

                <maven.test.skip>true</maven.test.skip>

            </properties>

        </profile>

        <profile>

            <id>test</id>

            <properties>

                <maven.test.skip>false</maven.test.skip>

            </properties>

        </profile>

    </profiles>

    <activeProfiles>

        <activeProfile>skiptest</activeProfile>

    </activeProfiles>

</settings>

Używając tej konfiguracji maven uruchomi się bez testów. Oczywiście włączenie testów jest możliwe:

mvn –Ptest clean install

Nie należy nadużywać automatycznego wyłączania testów z cyklu budowania aplikacji. Moja konfiguracja jest dozwolona tylko w szczególnych przypadkach.

wtorek, lipiec 01, 2008

Firefox dominuje

Firefox dominuje w statystykach wszystkich witryn którymi administruje!!! Dominacja ta jest najbardziej widoczna na stronie szachów – liska wybrało 80% użytkowników tej witryny.