Grzegorz Bernaś Blog Podróże i Programowanie to niekończąca się opowieść…

26sty/120

Zakochałem się w … vaadin

Zupełnie przez przypadek trafiłem na stronę projektu vaadin. Co to jest? To tylko kolejny framework dla javy ;) Można powiedzieć, że jest to nakładka na GWT. Czyli podobnie jak w przypadku Apache Wicket i GWT programujemy interfejs użytkownika w Javie. Jaka jest natomiast (dla mnie) najważniejsza różnica względem GWT? Nie musimy kompilować kodu Javy do JavaScriptu! Czyli setki zaoszczędzonych minut i godzin na czasochłonną kompilację GWT.

Zakres tematyczny: Java, Programowanie Czytaj dalej
10lis/110

Walidacja w Symfony2 – Custom Validation Constraint

Piszę właśnie aplikację do automatycznej obsługi rejestracji, zarządzania i płatności dla strony http://document-management.pl/ i napotkałem pewien problem z walidacją danych. Potrzebowałem sprawdzić w unikalność Stringa w dwóch różnych tabelach. Niestety Doctrine domyślnie tego nie obsługuje więc pośpieszyłem z napisaniem własnego walidatora. Dziarsko przeczytałem "How to create a Custom Validation Constraint", napisałem walidator i ... zonk

Fatal error: Class 'Symfony\Component\Validator\Constraints\UniqueDomain' not found in /home/kirkor/Projects/Beriko Software/document-management.pl/public_html_register/Symfony/vendor/symfony/src/Symfony/Component/Validator/Mapping/Loader/FileLoader.php on line 73
Zakres tematyczny: PHP, Programowanie Czytaj dalej
7mar/113

Jak napisać własnego robota internetowego cz. 1

Kiedy myślimy o robocie internetowych, sprawa wydaje się skomplikowana. Ale czy na pewno? Spróbujmy napisać robota internetowego, który będzie indeksował np. Panoramę Firm - oczywiście tylko do celów edukacyjnych. Dlaczego akurat tą stronę? Jest tam dużo powtarzających się - według szablonu - treści. Tak więc wyciągnięcie informacji będzie dla nas prostsze. A tak na marginesie, jak myślicie, jak długo zajmie zindeksowanie Google?? :-)

Jest kilka bibliotek do przetwarzania wyrenderowanych stron HTML, lub też po prostu do pobierania źródła strony. Mi do gustu najbardziej przypadł HtmlUnitSelenium. Selenium jest używane przez testerów do automatycznych testów stron internetowych, posiada przyjemny edytor - pracuje jako dodatek do Firefoxa. Wszystko generalnie można znaleźć na stronie producenta. Jego wadą jest jednak dość skromna dokumentacja, ale jakoś sobie z tym poradzimy.

Zakres tematyczny: Java, Programowanie Czytaj dalej
5mar/110

Nowa odsłona witryny www.movida.pl

W nocy z 3 na 4 marca wystartowała nowa strona firmy MOVIDA Conferences. Po dwóch miesiącach pracy system Joomla! został dostosowany na potrzeby firmy MOVIDA. Dzięki wzorowej współpracy i wysiłkom z obu stron projekt odniósł sukces. Cieszę się iż mogę wszystkim zaprezentować nowe oblicze serwisu firmowego Movida Conferences.

W trakcie pracy został przygotowany specjalny szablon, jak również moduły:

Stronę przygotowała firma Beriko Software, zajmująca się tworzeniem stron internetowych, systemów dedykowanych oraz outsourcingiem it na obszarze Warszawy i okolic.

Dla potrzeby strony internetowej zostały przygotowane specjalne dwa pluginy do systemu Joomla!

  1. Beriko! iTi (item to item) - pozwalający na umieszczanie listy oraz pojedynczych artykułów wewnątrz treści innego artykuły. Szczególnie przydatne w opiniach na temat konferencji oraz wyświetlaniu podobnych elementów. Dodatek został tak zaprojektowany aby można było przygotować dedykowane szablony dla każdego rodzaju treści.
  2. Beriko! Tabs - pozwala na umieszczanie zakładek wewnątrz tekstu.
Zakres tematyczny: PHP, Programowanie Brak komentarzy
11sty/110

Joomla! 1.6 premiera – zapowiedź autorskiego pluginu do komponentu K2

To był dobry dzień... Choć premiera miała miejsce już wczoraj ja dopiero dziś to zauważyłem. Joomla! 1.6 przynosi wiele bardzo ważnych zmian i poprawek, których brakowało mi wcześniej. Pracując teraz na nową stroną firmy Movida Conferences bardzo doskwierał mi ubogi system uprawnień jak również brak automatycznej aktualizacji wtyczek - znany choćby z WordPress'a.

Najważniejsze funkcje w Joomla 1.6

  • Nowy system kontroli dostępu - daje administratorom witryny i redaktorom możliwość określania, kto może oglądać i zarządzać treścią.
  • Nieograniczony model zagnieżdżania - umożliwia administratorom oraz twórcom treści definiowanie wielopoziomowych kategorii o dowolnie zagnieżdżonej strukturze.
  • Prosta aktualizacja rozszerzeń - dostarcza użytkownikowi lepszego sposobu utrzymania bezpieczeństwa witryny przez uproszczony proces aktualizacji rozszerzeń
  • Szablony zgodne z semantyką XHTML - zapewnia lepszą podstawę do prezentacji treści
  • Wielojęzyczność - pozwala w podstawowy sposób na stworzenie witryny wielojęzycznej.
Zakres tematyczny: PHP, Programowanie Czytaj dalej
18gru/100

Firma COMAC Sp. z o.o. rozpoczyna przygodę z internetem


Na zlecenie firmy COMAC - firmy doradczej w zakresie prawa i rynku farmaceutycznego - została przygotowana strona internetowa z formularzem kontaktowym oraz zakładką komentarzy. Komentarze posiadają specjalny panel do zarządzania treścią dzięki czemu pracownicy firmy mogę samodzielnie przygotowywać treści oraz je publikować.

Stronę przygotowała firma Beriko Software, zajmująca się tworzeniem stron internetowychsystemów dedykowanych oraz outsourcingiem it na obszarze Warszawy i okolic.

Zakres tematyczny: PHP, Programowanie Brak komentarzy
27lis/102

Wielowątkowość sposobem na wolny odczyt z plików

Dziś zmierzyłem się z całkiem ciekawym problemem. Prosta Javova aplikacja miała odczytać zawartość plików csv, policzyć wskaźniki, uzupełnić obiekty Hibernate i zapisać wszystko do bazy danych. Wszystko zrobiłem szybciutko ale powstał pewien problem... Aplikacja działała wolno ale procesor był obciążony tylko w 50%. To nie byłby problem przy małej ilości danych, natomiast ja musiałem zaimportować 864 pliki o łącznej wadze 36,3 MB! Niby niewiele, ale przypomina... to są pliki tekstowe.

Gdzie szukać problemu? Sama aplikacja była wydajna, bo operacja matematyczne to błahostka. Nie implementowałem też żadnych skomplikowanych reguł. Może baza danych? Faktycznie interfejs sieciowy miał słabą responsywność. Zwiększyłem cache dla bazy danych do 1GB, zaalokowałem więcej pamięci dla aplikacji Javy (-XX:MaxPermSize=512m -Xms1024m -Xmx2048m) i aplikacja chodzi szybciej, ale nadal za wolno.

Zakres tematyczny: Edukacja, Java, Programowanie Czytaj dalej
15paź/100

Dziedziczenie w Doctrine 1.2 po mojemu ;)

Ostatnio programując na co dzień w Javie i używając Springa, Hibernate, Struts i Velocity nie natrafiłem na żaden interesujący problem dlatego nie pojawił się na blogu żaden wpis, który tego dotyczy.

Ale za to jest coś ciekawego w Doctrine :) W wersji 1.2 nie ma rozsądnej formy dziedziczenia, to co proponują autorzy nie podoba mi się. postanowiłem użyć takiego przypadku:

sf_guard_user to klasa standardowego pluginu, która odpowiada użytkownikowi. Dodatkowo stworzyłem tabelę ae_experts z jednym kluczem obcym odwołującym się do użytkownika. Czyli każdy ekspert jest również użytkownikiem. Tak sobie pokrętnie wytłumaczyłem obiektowo relacyjną bazę danych.

Efekt, który chciałem osiągnąć to przy każdym pobraniu eksperta jest również pobierany użytkownik. Skoro ekspert to user, to warto wyświetlać domyślnie imię i nazwisko. Aby to osiągnąć w klasie Expert (Expert.class.php) dodałem taki kod:

/**
 * Expert
 *
 * This class has been auto-generated by the Doctrine ORM Framework
 *
 * @package    ask-expert
 * @subpackage model
 * @author     Beriko Software, Grzegorz Bernaś
 * @version    SVN: $Id: Builder.php 7490 2010-03-29 19:53:27Z jwage $
 */
class Expert extends BaseExpert
{
	public function preDqlSelect($event)
	{
		$params = $event->getParams();
		$query  = $event->getQuery();
		$alias  = $params['alias'] . '.sfGuardUser';
		if ((!$query->isSubquery() || ($query->isSubquery() && $query->contains(' '.$params['alias'].' '))) && !$query->contains($alias))
		{
			$query->innerJoin($alias);
		}
	}

	public function __toString() {
		return $this->getSfGuardUser()->getFirstName().' '.$this->getSfGuardUser()->getLastName();
	}
}

Ale to nie wszystko, kod nie będzie działać jeżeli nie włączymy DQL'a (Doctrine Query Language). Aby to zrobić w pliku ProjectConfiguration.class.php do klasy ProjectConfiguration dodaj taki kod:

class ProjectConfiguration extends sfProjectConfiguration
{
	public function configureDoctrine(Doctrine_Manager $manager)
	{
		$manager->setAttribute(Doctrine_Core::ATTR_USE_DQL_CALLBACKS, true);
	}
}

Dzięki temu nie mam dwóch zapytań tylko jedno :) Nie wiem jaki to będzie miało wpływ na wydajność i pracę w przyszłości kiedy mój projekt edukacyjny urośnie, ale czas pokaże.

Zakres tematyczny: Edukacja, PHP, Programowanie Brak komentarzy
14paź/100

Tworzenie tabel z kodowaniem utf-8 w symfony 1.4 i doctrine 1.2

W ramach odświeżenia swojej wiedzy, wróciłem do zabawy z frameworkiem Symfony. Realizując mały i prosty "projekt edukacyjny" natrafiłem na pewien problem. Mianowicie kodowanie tabel w MySQL oraz kodowanie połączenie z bazą danych. Osobiście preferuję używania wszędzie UTF-8 dlatego domyślne kodowanie latin1 nie do końca mnie zadowalało. Dzięki dziadkowi google znalazłem na sieci bardzo przydatne rozwiązanie.

Jeżeli chcesz używać kodowania UTF-8,  powinieneś dodać do swojej definicji schematu (schema.yml) następujacy kod:

User:
  options:
    type: MyISAM
    collate: utf8_unicode_ci
    charset: utf8
  columns:
    username: string(255)
    password: string(255)

Jak widać elegancko ustawiamy collate: utf8_unicode_ci oraz charset: utf8. Powyższe opcje sprawiają, że tylko jedna konkretna tabela będzie kodowana w UTF-8, jeżeli chcemy aby wszystkie table miały takie kodowanie oraz aby kodowanie połączenia było ustawione na UTF-8 musimy do pliku ProjectConfiguration.class.php dodać następującą metodę:

public function configureDoctrine(Doctrine_Manager $manager)
{
  $manager->setCollate('utf8_unicode_ci');
  $manager->setCharset('utf8');
}

Następnie trzeba przebudować cały mode (aby w bazie danych zmieniło się kodowanie tabel) oraz na nowo wgrać dane inicjalne już z odpowiednimi znaczkami.

symfony doctrine:build --all --and-load --env=dev --no-confirmation

Miejmy na uwadze, że tak komenda usunie wszystkie dotychczasowe tabele i stworzy je na nowo z kodowaniem UTF-8.

Zakres tematyczny: PHP, Programowanie Brak komentarzy
24wrz/100

Po co tworzyć użyteczne oprogramowanie?

Jest to niestety pytanie na które odpowiedzi nie zna 80% osób wykonujących oprogramowanie. Gdyby świat był idealny to wszyscy programiści, bazodanowcy i analitycy dążyli by do wspólnego celu - stworzyć aplikację, która będzie użyteczna i przydatna dla klienta.

Zakres tematyczny: Ogólne, Programowanie Czytaj dalej