Hardcoded thoughts… mostly in C# or php

sprawdzanie istnienia czcionki w C#

Nurtowało mnie dziś jak w sposób sprawdzić, czy podana czcionka istnieje w systemie. Teoretycznie można by to zrobić iterując po zainstalowanych czcionkach. Jednak w przypadku dość dużej ich ilości rozwiązanie to staje się mocno czasochłonne i całkowicie nie wydajne. Wysłane na grupę dyskusyjną zapytanie przyniosło banalnie proste, acz cholernie skuteczne rozwiązanie:

C#:
  1. using (System.Drawing.Font f = new System.Drawing.Font(name, 12))
  2. {
  3. return f.Name == name;
  4. }
  5. return false;

EMF w C#

Obiekty typu Image w .net posiadają metodę Save(), której to w parametrach można podać tak ścieżkę, jak i format pliku wynikowego. Ciekawie się robi dopiero przy próbie użycia ImageFormat.EMF - teoretycznie wspierany przez .net, jednak już sama dokumentacja MSDN twierdzi, że sorry, ale nie ma lekko. Zapisywanie do EMF nie jest bowiem w C# obsługiwane - przy próbie podania takiego formatu, plik wynikowy przyjmie domyślny format PNG. Istnieje jednak prosty sposób na operowanie na obiektach Graphics i wyrzucanie efektów pracy do pliku EMF. Jak? Wystarczy nie używać metody Save(), która zawodzi. Poniżej obejście problemu.

C#:
  1. Graphics graphics = Graphics.FromImage(new Bitmap(1, 1, PixelFormat.Format32bppArgb));
  2. IntPtr hdc = tempGraphics.GetHdc();
  3. Metafile mfile = new Metafile("obraz.emf", hdc);
  4. tempGraphics.ReleaseHdc();
  5. graphics.Dispose();
  6. graphics = Graphics.FromImage(mfile);

Od tego momentu rysowanie na obiekcie graphics powoduje automatyczne odwzorowywanie zmian w pliku emf. Ważne by obiekt mfile (typu Metafile) był utworzony z podaniem uchwytu - tylko wtedy toto poprawnie działa.

Wyszukiwanie zależności w DB2

Zasadniczo to dla mnie, na przyszłość, jakbym przypadkiem miał zapomnieć.

Jak wyszukiwać procedur które odnoszą się do procedury nas interesującej (wywołują ją)? Otóż bardzo prosto. Pełną listę można uzyskać dzięki widokowi wbudowanemu w DB2, który pozwala na podejrzenie treści wszystkich zdeklarowanych w systemie procedur:

SQL:
  1. SELECT * FROM SYSIBM.SYSPROCEDURES WHERE TEXT LIKE '%interesujaca_nas_procedura%';

Banalne, proste, a jakie użyteczne ;)

onLoad w IE

Podczas prac nad pewnym projektem, w którym mam wątpliwą przyjemność uczestniczyć, pojawił się ostatnio problem konieczności wywoływania kodu JS przy każdym wejściu na stronę. Rozwiązanie samo się nasuwa - onLoad w body. Ważne jednak było, by funkcja ta wywoływała się również przy cofaniu do strony poprzedniej, nie tylko przy ponownym wywoływaniu. Twierdziłem, że to jest niemożliwe, znajomy - że jak najbardziej. Okazało się, że obaj mieliśmy rację. W niestandardowej przeglądarce, jaką bez wątpienia jest Internet Explorer (w wersji 6.0), komendy zawarte w onLoad wykonywane są przy każdym wejściu na stronę, bez względu na to, czy było to ponowne wywołanie, czy użycie np. history.back(). U reszty (czyt FF 1.5, O9) onLoad wywoływane jest tylko podczas przeładowania strony, a zatem TYLKO raz. Najgorsze jest to, że to właśnie zachowanie IE jest w tym konkretnym przypadku jak najbardziej wskazane. Jak podobny efekt osiągnąć w FF/O - nie mam pojęcia.

eput.info

Początek tworzenia nowej zabawki - serwisu studenckiego Politechniki Poznańskiej. Na razie na etapie szukania chętnych do pomocy i promowaniu w googlu ;)

Wszystkich, którzy mają coś wspólnego z PP zapraszam na eput.info

Główna wada Cake’a

O zaletach CakePHP już wiele razy się tu zachwycałem, czy podobno zachęciłem do frameworka kilka osób. O różnych sztuczkach i ciekawych jego cechach można by tu pisać wiele. Jednak zawsze jest ta druga strona. I chyba warto by przestrzec wszystkich zainteresowanych przed głównymi wadami, które w Cake'u mi najbardziej doskiwierają:

  • szybkość - co jak co, ale CakePHP należy do jednych z najwolniejszych dostępnych środowisk. Nadaje się zatem świetnie na strony średnie, ukierunkowane tematycznie oraz serwisy, których czas (szybkość) powstania jest ważniejszy od szybkości działania.
  • administracja - Cake nadaje się do tego perfekcyjnie - całą administrację strony można właściwie zrobić w 5 minut, zrzucając wyświetlanie rekordów na barki scaffoldingu (albo CRUD, jak kto woli). Pozostaje jednak jeszcze kwestia autentykacji i kontroli dostępu. I mimo, że Cake ma to rozwiązane świetnie, to pierwsza instalacja takiego systemu zajmuje sporo czasu, podobnie zresztą jak samo zrozumienie idei.

Wykresy na szybko w C#

Jako, że wczoraj wieczorem postanowiłem napisać małą aplikację, która w założeniu miała wizualizować statystykę opowiedzi w ankiecie, pojawił sę mały problem - jak? Samemu rysować wykresu mi się na prawdę nie chciało, z resztą oczywiście czasu nie było. Korzystanie z bindingów Office'a? E-e, bez sensu. Rozgryzanie Crystal Reports? Zbyt czasochłonne. Google.com? Czemu nie. Dość szybko pokierowało mnie do biblioteki ZedGraph. I powiem krótko - rewelacja. Biblioteka na prawdę dużo potrafi, jest malutka, no i, co najlepsze, puszczona na zasadach LGPL. Zatem wzorem z allegro - Polecam!!! ;)

Problemy z przejściem na CakePHP v1

Przy aktualizacji oprogramowania nie nawykłem do czytania changelogów, co dziś sprawiło trochę problemów. Nową wersję CakePHP oczywiście ściągnąłem i od razu przystąpiłem do aktualizacji.

(more...)

CakePHP goes stable!

No i proszę, wczoraj wypuszczono stabilną już wersję ulubionego frameworka - CakePHP (wersja 1.0). Przy okazji zmieniono całkowicie wygląd strony głównej, co warto zobaczyć. Developerom dziękuję za prezent na długi weekend :)

pieczenie edit-in-place

(zasadniczo to to o CakePHP i $ajax::editor(); będzie...)
Ku memu zadowoleniu wreszcie w tym semestrze zaczął się przedmiot o wspaniałej nazwie "Aplikacje Internetowe". Miałem nadzieję, że czegoś się nauczę, dowiem, itp. Niestety - wyszło tak, jak się spodziewałem. Poziom materiału dostosowany jest do tych, którzy w temacie są kompletnie zieloni, więc na zajęciach nie pozostaje nic innego do roboty, niż się nudzić... lub nie chodzić wogóle na nie. Mniejsza. Zaliczenie ćwiczeń i labolatoriów w formie projektu. Miałem więc nadzieję, na szybkie zaliczenie i wpis grubo przed sesją, trochę się jednak przeliczyłem. Pewną przeszkodą była mała awaria dysku, jednak przede wszystkim mocno się znudziłem wybraną aplikacją (coś ala FlySpray). Dziś już mocno z przymusu usiadłem i postanowiłem dorobić kolejne ficzery (no bo aplikacja teamu Tas + Klap musi się świecić) - padło na przyuważony jakiś czas temu Edit-in-place - znaczy się edytowanie pojedynczego rekordu bezpośrednio po kliknięciu na nim - beż żadnych przeładowań etc. Pure AJAX ;). Trochę mnie szlag trafiał, gdy tylko zacząłem zastanawiać się nad najłatwiejszym wpisaniem tego w kod i użyciem w Cake'u. Ale tak na wszelki wypadek postanowiłem w googlu sprawdzić, czy ktoś już tego przede mną nie robił. No i proszę. Nie dość, że robił, to jeszcze bezpośrednio zaimplementował w (już) mym ulubionym frameworku. Jednak jako, że sama kontrolka nie jest jeszcze w manualu opisana, opiszę tu pokrótce, jak skorzystać z ustrojstwa.

(more...)

« Previous PageNext Page »