czwartek, 30 czerwca 2011

Pierwsza aktualizacja Shadow Analysis

Miło mi jest poinformować o zakończeniu prac nad pierwszą aktualizacją aplikacji Shadow  Analysis. Aktualizacja wprowadza długo oczekiwaną funkcję generowania legendy na wynikach analizy.


piątek, 8 kwietnia 2011

Shadow Analysis - Zapowiedź publicznej wersji demo

Po pierwszych testach, które wypadły bardzo obiecująco, przygotowaliśmy krótką listę modyfikacji naszego pluginu. W najbliższym czasie będziemy pracowali nad kilkoma nowymi, ciekawymi funkcjonalnościami. Pojawi się kilka nowych opcji konfiguracji oraz analiza będzie zwracała więcej przydatnych danych. Szczegóły już wkrótce.

W między czasie chcemy przygotować pierwszą publicznie dostępną wersję demo. Chcielibyśmy aby jak najwięcej osób mogło przetestować Shadow Analysis. Oczywiście na nic nam by się to nie przydało gdybyście nie mogli napisać nam co o nim myślicie. Dlatego przygotowaliśmy specjalną ankietę, która pomoże nam zbierać opinie i mamy nadzieję stale ulepszać plugin.

Demo zostanie udostępnione w poniedziałek tutaj oraz na blogu Tomka.

piątek, 1 kwietnia 2011

Shadow Analysis PlugIn for Sketchup - demo już gotowe

Właśnie skończyliśmy przygotowywać prezentację pierwszej wersji naszego pluginu. Krótki filmik, który zrobiliśmy pokazuje cały proces renderowania naszej analizy. 


Więcej ciekawych z punktu widzenia architektów informacji na temat naszego dzieła możecie znaleźć na blogu mojego brata pod adresem http://tomaszjaniak.wordpress.com/. Jeśli chcielibyście przetestować wersję demo piszcie na adres janiaktomasz@gmail.com

czwartek, 31 marca 2011

Nowy projekt - Shadow Analysis Plugin dla Sketchupa

Od kilku dni pracujmy nad nowym projektem. Jest to nasz pierwszy plugin do bardzo popularnego i darmowego programu Sketchup. Pomysł stworzenia takiej aplikacji zrodził się w głowie mojego brata. Na swoim blogu opisał on w jaki sposób można rozwiązać problem obliczeń zacienienia, z którym spotykają się architekci. Jego wpis spotkał się z nadspodziewanie dużym zainteresowaniem więc postanowiliśmy stworzyć prosty w obsłudze program realizujący tą funkcjonalność.

Pierwszą wersję programu Tomek napisał w processingu. W związku z tym, że uzyskanie satysfakcjonujących wyników wymagało przygotowania na prawdę dobrych danych do analizy, nadawała się ona do użytku najwyżej osobistego. Wątpię żeby udało się znaleźć więcej niż 10 osób, które domyśliłyby się jak trzeba ustawić rendering w programie 3d aby wynik analizy był chociaż zbliżony do prawidłowego.

Rozwiązaniem tych problemów okazał się prosty program do edycji 3d rozwijany przez malutką firmę Google Inc. - Sketchup. Sketchup poza oczywistymi zaletami jak łatwość obsługi i 'darmowość' posiada jedną bardzo przyjemną cechę - API oraz konsolę Ruby. Dzięki niewielkim skryptom można zautomatyzować niemal wszystkie operacje związane z przygotowywaniem danych oraz umieścić w tym samym pluginie algorytm analizujący i przygotowujący wyniki.

Gdy Tomek poprosił mnie o pomoc i powiedział, że wiąże się z tym programowanie w Ruby byłem zachwycony i od razu wziąłem się do roboty. Druga wersja jego algorytmu, która napisałem działała już w Ruby jednak wymagała doinstalowania bibliotek ImageMagick i RMagick co, mówiąc delikatnie było problematyczne. Zapadła więc decyzja, że zamiast za pomocą bibliotek analizować pixele danych wejściowych w jpg będziemy analizowali bajty z plików bmp.

Trzecia wersja algorytmu operująca na bajtach powstała następnego dnia i okazała się spełniać wszystkie oczekiwania. Działa szybko, niezawodnie i co bardzo ważne nie wymaga żadnych dodatkowych bibliotek. Oto kilka gotowych analiz (kolory reprezentują ilość godzin zacienienia, od 1h do 10h)





W tej chwili kończymy wersję demo pluginu, która będziemy chcieli rozdać kilku testerom.

poniedziałek, 28 marca 2011

Oficjalny start iValue.com.pl

Dziś po wielu tygodniach walk rusza nasze najnowsze przedsięwzięcie - projekt iValue. Projekt jest owocem ponad ośmiomiesięcznej pracy i jest dumą naszej firmy. Mamy nadzieję, że przypadnie do gustu także naszym klientom.

iValue jest to rozbudowana aplikacja, której celem jest pomoc w uruchomieniu drukarniom i firmom z branży poligraficznej nowego kanału sprzedaży i kontaktu z klientem za pomocą internetu. W zależności od wybranych modułów może ona stanowić uniwersalny formularz wyceny i zamówień czy być podstawą do stworzenia sklepu internetowego. W pełnej wersji zawierającej system obiegu dokumentów wewnątrz firmy, system zadań czy kontroli zaopatrzenia iValue jest kompleksowym systemem ułatwiającym codzienną pracę i zarządzanie przedsiębiorstwem.

Największą siłą systemu iValue jest jego elastyczność, która pozwala w bardzo łatwy sposób dodawać i modyfikować jego funkcjonalności. Dzięki modularnej budowie jesteśmy w stanie zaproponować naszym klientom rozwiązanie skrojone na miarę ich potrzeb bez potrzeby długotrwałych modyfikacji.

Zapraszam do zapoznania się z naszym najnowszym produktem na jego stronie domowej pod adresem http://ivalue.com.pl. Dostępna jest również wersja demonstracyjna systemu dzięki, której można przekonać się jak łatwe w obsłudze i szybkie może być korzystanie z tak rozbudowanych narzędzi.

Jeśli jesteś zainteresowany zakupem aplikacji iValue, lub chciałbyś dowiedzieć się więcej skorzystaj z formularza kontaktowego lub formularza zamówienia.

wtorek, 15 lutego 2011

Automatyczne wyświetlanie submenu bez użycia taxonomii w CMSie Drupal

Głównym wymaganiem co do jednego z projektów nad którymi aktualnie pracuję jest maksymalne uproszczenie procesów zarządzania zawartością. W związku z tym postanowiłem za wszelką cenę ograniczyć do minimum ilość pól i list wyboru formularza dodawania zawartości. Jednak strona docelowo posiadała będzie dość rozbudowaną strukturę podstron co naturalnie sugeruje użycie systemu podmenu.


Intuicyjny interfejs = Logiczny interfejs


Już sobie wyobrażam jak przebiegała by rozmowa z klientem, któremu muszę wytłumaczyć, że aby na nowo tworzonej podstronie wyświetliło się odpowiednie podmenu w formularzu dodawania zawartości musi najpierw wybrać odpowiednią kategorię wpisu z listy kategorii, a później odpowiednie podmenu z listy menu. Nawet pomijając jego niezadowolenie mi byłoby głupio uznać takie rozwiązanie tego problemu za finalne.


Automatyzacja jedynym sposobem uniknięcia błędów


Jeśli zrezygnujemy z kategorii standardowe rozwiązania Drupala też nas nie rozpieszczają. Naturalnie nie jest bardzo skomplikowane utworzenie dodatkowych menu i wyświetlanie ich w jakimś bloku. Nie jest też niczym trudnym ustalenie wyświetlania bloku tylko na konkretnych podstronach. Nie jest to trudne, ale jest bardzo niewygodne, gdyż po dodaniu nowej podstrony trzeba wrócić do konfiguracji bloku. Inną sprawą jest fakt, że wpuszczanie niedoświadczonego użytkownika na stronę konfiguracji bloku jest mocno nieroztropne. Prawdopodobieństwo kłopotów przy takim podejściu jest podobne do tego gdy zwróci się uwagę dresiarzowi, że jego białe skarpety nie komponują się za dobrze z czarnym dresiwem.


11 linijek do szczęścia


Rozwiązanie tego problemu przynosi opcja wyświetlania bloku w zależności od strony z wykorzystaniem skryptu PHP. I znowu, nie mam pojęcia dlaczego, programiści Drupala postanowili nie ułatwiać nam za bardzo życia. Wystarczyłoby gdyby $node przetrzymywał nazwę menu, do których należy. Byłoby też minimalnie łatwiej gdyby zmienna $node była dostępna w polu PHP konfiguracji bloku. Niestety ani jedno, ani drugie nie jest dla nas dostępne. Na początku musimy przygotować więc funkcję, która sprawdzi do jakiego podmenu należy dany node. Umieszczamy ją w pliku template.php i wygląda ona tak:


<?php
function getSubmenu($nid){
  if($nid){
    $result = db_query("SELECT menu_name FROM {menu_links} WHERE link_path = '%s' LIMIT 1", 'node/'.$nid);
    $data = db_fetch_object($result);
    return $data->menu_name;
  }
  else return FALSE;
}
?>


Następnie wchodzimy w konfigurację bloku podmenu i zakładce 'Wyświetlanie zależne od strony' wybieramy ostatnie zaznaczenie: 'Wyświetlaj, jeśli poniższy kod PHP zwraca prawdę - TRUE (tryb PHP, tylko dla ekspertów).'. W polu tekstowym umieszczamy poniższy kod:


<?php
  if(arg(0) == 'node' && is_numeric(arg(1)) && (getSubmenu(arg(1)) == '[nazwa systemowa podmenu]'))
    return TRUE;
  else return FALSE;
?>

I gotowe. Rozwiązanie jak widać banalne, ale jego przydatność jest moim zdaniem nie do przecenienia.

wtorek, 4 stycznia 2011

Cairo-Dock Single/Dual Head setup switch bash script (nvidia)

Pierwszy post w nowym roku miał być bardziej ambitny, ale nawał pracy przy kończących się właśnie projektach sprawił, że na wszystko brakuje czasu. Na ambitniejsze posty przyjdzie wam poczekać jeszcze przynajmniej tydzień.

O czym będzie dzisiejszy post każdy użytkownik linuksa czy maca powinien wiedzieć już po tytule. Dla reszty wyjaśniam iż czytacie właśnie instrukcję stworzenia skryptu automatycznie rozpoznającego czy pracujecie na dwóch, czy na jednym ekranie i dopasowującego konfig docka Cairo-Dock. Potrzeba napisania takiego skryptu chodziła za mną od kilku miesięcy, ale dopiero dziś postanowiłem to w końcu zrobić.

Potrzeba matką wynalazku

Na początku chciałbym zaznaczyć, że funkcja, która opisuję jest chyba jedyną brakującą w konfiguracji Cairo-Docka. Możliwości personalizacji tego programiku są gigantyczne i z tego powodu tym bardziej dziwi mnie brak  tak przydatnego rozwiązania.

Mój komputer to laptop z ekranem 15,4" i maksymalnej rozdzielczości 1280x800px. Gdy pracuję w domu podłączony jest do niego zewnętrzny ekran o rozdzielczości pionowej 1050px, która zapewnia bardzo przyzwoity komfort programowania z widocznym, zajmującym ~40px z dołu ekranu dockiem.



Problem pojawia się gdy monitor VGA jest odłączony. Wtedy te ~40px u dołu ekranu to więcej niż 5% całej dostępnej powierzchni.




Naturalnie Cairo-Dock umożliwia włączenie autoukrywania. Jednak jest z nim jeden problem. Mój dock jest obniżony o 13px poniżej dolnej krawędzi ekranu (coby lepiej wyglądał i zajmował mniej miejsca). Powoduje to że przywołanie urytego docka jest niemożliwe. 

Poza tym, nawet gdyby przywołanie działało byłby to bolesny kompromis bo przecież nie zależy mi wcale na ukryciu doka gdy pracuję na dwóch monitorach.

Co będzie nam potrzebne

Do napisania skryptu potrzebna jest nam informacja czy pracujemy na dwóch czy na jednym ekranie. Jako że piszemy skrypt basha dobrze by było gdyby taka informacja była dostępna w konsoli. Jeśli wasz laptop ma na pokładzie kartę graficzną intela z pomocą przyjdzie wam programik xrandr, jeśli nvidii nvidia-settings, jeśli ati radźcie sobie sami;p

W moim przypadku polecenie, którego należy użyć to:

nvidia-settings -q ConnectedDisplays -t

-q query umożliwia wywołania pozwalające na zmianę atrybutów ustawień,
-t wyświetla aktualny stan atrybutu.

W przypadku gdy podłączony jest jeden monitor polecenie zwraca 0x00010000, w przypadku dwóch 0x00010001. To było dla mnie delikatne zaskoczenie, ale nie chce się kłócić tylko współpracować więc niech będzie tak jak sobie chce.

Teraz przydałoby się rozgryźć gdzie siedzą ustawienia Cairo-Docka. Na szczęscie nie trwa to dłużej niż 3sekundy. Ku zaskoczeniu wszystkich ścieżka do ustawień to:

~.config/cairo-dock/current_theme/cairo-dock.conf

Jako że pliczek ma ~1000 linijek, a ja jestem leniwy nie będziemy go edytowali. Przygotujemy sobie dwa gotowe zestawy ustawień, którymi będziemy nadpisywali ten plik. Aby to zrobić odpalamy sobie panel sterowania Cairo-Docka, ustawiamy wszystkie opcje dla trybu jednego ekranu i zapisujemy. Następnie ręcznie lub w konsoli robimy kopię pliku konfiguracyjnego:

cp ~.config/cairo-dock/current_theme/cairo-dock.conf ~.config/cairo-dock/current_theme/cairo-dock.conf_single

To samo z drugim setupem z tym tylko, że w nazwie pliku z kopią ustawień 'single' zmieniamy na 'dual'.

Składamy wszystko do kupy!

Oto kod skryptu:


#!/bin/sh

if [ `nvidia-settings -q ConnectedDisplays -t` = '0x00010000' ]
then
        cp ~.config/cairo-dock/current_theme/cairo-dock.conf_single ~.config/cairo-dock/current_theme/cairo-dock.conf
else
        cp ~.config/cairo-dock/current_theme/cairo-dock.conf_dual ~.config/cairo-dock/current_theme/cairo-dock.conf
fi

cairo-dock -o


Zapisujemy plik, w moim przypadku (kde4) w katalogu ~.kde4/Autostart/. Ustalany 'wykonywalność' dla naszego pliku za pomocą chmod +x nazwa_pliku i właściwie gotowe. Musimy jeszcze się tylko upewnić czy nasz nowy skrypt będzie uruchamiany automatycznie przy starcie okien i czy automatyczne uruchamianie Cairo-Docka nie jest aktywne.