Ruby: Błąd "no such file to load -- mkmf (LoadError)".

Instalowałem ostatnio interpreter Rubiego i framework Rails do obsługi Redmine na serwerze. Tak się złożyło, że podczas instalacji wyskoczyło kilka błędów, które być może zmuszą Was do “podrapania się w głowę”, dlatego w dzisiejszym krótkim wpisie publikuję rozwiązanie jednego z nich.

PHP: Definiowanie klasy wewnątrz funkcji lub metody.

Język PHP zawiera w sobie dużo różnych “sztuczek”, przez co nasze życie może stać się o wiele łatwiejsze, ale istnieje możliwość, że zostanie przez nas znienawidzony do końca życia. W dzisiejszym wpisie chciałbym pokazać i wyjaśnić jedną z bardzo niejasnych i bardzo brzegowych kwestii, jaką jest zachowanie zasięgu zmiennych podczas przechodzenia do innych plików [np. w przypadku ich includowania]. Zapraszam do lektury. Fotografia: Milian Wolff, CC-BY.

TL;DR.

Nie da się zdefiniować klasy ani wewnątrz funkcji, ani wewnątrz metody. Jeśli chcesz wiedzieć dlaczego - czytaj dalej.

PHP: Definiowanie klasy wewnątrz funkcji lub metody.

Rozważmy następującą sytuację:

MySQL Workbench: Generowanie plików YAML dla Doctrine i symfony.

W codziennej pracy używamy wielu narzędzi wspomagających naszą pracę przy tworzeniu stron internetowych i wykonywaniu innych usług z tym związanych. Poczynając od IDE, poprzez różnego rodzaju narzędzia konsolowe, aż po wtyczki w przeglądarkach internetowych jesteśmy zależni od wielu tysięcy linii kodu, dzięki którym nasze życie jest o wiele łatwiejsze, niż w przypadku, kiedy musielibyśmy wykonać tą pracę sami. W dzisiejszym wpisie chciałbym pokazać jeden z niedawno poznanych sposobów na ułatwienie sobie życia podczas pracy z biblioteką Doctrine i frameworkiem symfony.

PHP: Zwracanie wartości z pliku.

Rozwój języka PHP był, a właściwie cały czas jest, dosyć ciekawym “procesem technologicznym”, w trakcie którego powstało wiele funkcjonalności, o których statystyczny programista tego języka praktycznie nie wie. Nie są to aż tak kluczowe dla naszej pracy rzeczy, aczkolwiek czasem mogą pomóc w zaprojektowaniu bardzo interesujących rozwiązań, niemożliwych do realizacji w innych językach programowania. W dzisiejszym wpisie chciałbym przedstawić jedną z takich możliwości - zwracanie wartości z… pliku.

Wstęp: zwracanie wartości.

Zwracanie wartości nam, programistom, kojarzy się głównie z funkcjami i metodami, poprzez które możemy istotnie zwiększyć “reużywalność” tworzonego kodu:

PHP: Pobieranie ścieżki do pliku klasy pochodnej w metodzie klasy bazowej.

Dzisiejszy wpis jest sponsorowany przez projekt, którego tworzenie obiecałem sobie w momencie, kiedy będę miał gotową całą pracę inżynierską. Ze względu na fakt, że do zrobienia zostały już tylko ostatnie poprawki i przygotowanie do samej obrony, stwierdziłem, że mogę powoli zacząć przygotowywać sobie środowisko pracy. Początki, jak to początki - sprawiają najwięcej problemów, stąd też kolejny wpis problemowy.

Problem: Odziedziczone metody klasy bazowej wykonują się w zakresie klasy bazowej.

Problem jest teoretycznie prosty - mamy dany kod:

Ściąganie plików poprzez wstawienie odnośnika w oknie otwierania pliku.

Tytuł dzisiejszego wpisu jest dosyć karkołomną konstrukcją językową, aczkolwiek “konia z rzędem” przewidziałem dla tego, kto nazwie to lepiej i czytelniej. Chciałbym się dzisiaj podzielić z Wami małą sztuczką, która w wielu przypadkach pozwala mi na oszczędzenie czasu w przypadku, kiedy ściągnięty plik od razu chcę przesłać dalej. Wpis będzie krótki i rzeczowy, dlatego zapraszam do lektury.

Problem: Instalacja szablonów WordPressa.

Wyobraźmy sobie przykładowy problem - instalacja nowego szablonu WordPressa poprzez wstawienie pliku archiwum w formularzu. Czynność trywialnie prosta - klikasz -> wybierasz -> przesyłasz -> zainstalowane.

PHP: Sprawdzanie, czy plik został włączony do kodu.

Ci, którzy śledzą stronę niniejszego blogu na Facebooku, na pewno zauważyli status, jakim się z nimi podzieliłem w środę. Strasznie się wtedy zdenerwowałem, bo straciłem kilka godzin życia, a popełniony błąd był trywialny. Podczas analizy działania zwyczajnie skupiłem się na bardziej zaawansowanych częściach kodu, zapominając o podstawach, co odbiło się niestety na procesie “debugowania”. Skoro powstał problem, to na pewno istnieje dla niego rozwiązanie, dlatego w niniejszym wpisie chciałbym przedstawić Wam sposób na zabezpieczenie się przed tym “błędem”.

Funkcja require_once() działa… tylko “once”.

O co chodziło w całym problemie? Otóż, moja praca inżynierska, w ramach której piszę framework w języku PHP w pewnym momencie przekazuje sterowanie do modułu widoku [View]. Widok ten, pomijając całą abstrakcję, jaka za nim stoi, w pewnym momencie wykonuje zwyczajną instrukcję require_once(), włączając plik z kodem szablonu.

[Eclipse] Domyślny typ kodowania plików.

Jednym z nurtujących problemów na jakie trafiłem rozpoczynając pracę z Eclipse było to, że typ kodowania plików z kodem był nagminnie ignorowany. Mając w pamięci DreamWeavera, z którym miałem przyjemność przez pewien czas “współpracować” [i to jeszcze w wersji 8, czyli chyba ostatniej pod którą “podpisała się” Macromedia] nie mogłem przywołać z pamięci żadnych związanych z tym utrudnień. W dzisiejszym wpisie pokażę Wam więc jak zmusić Eclipse do zmiany przyzwyczajeń na naszą korzyść.

Wstęp.

Na początek kilka słów na temat samego problemu - otóż Eclipse pobiera podczas uruchomienia z systemu wartość domyślnego kodowania jakim się ów posługuje, aby później wykorzystać te informacje podczas otwierania plików. Dlaczego po prostu nie wykrywa go na podstawie zawartości? Cóż - decyzja twórców. W przypadku Windowsa XP rzeczone kodowanie to “niestety” Windows-1250 alias CP-1250 - jednym słowem nie do końca to, co rozumiemy przez aktualny niepisany standard kodowania, czyli UTF-8.

[PHP] Błąd: Call-time pass-by-reference has been deprecated.
Od pewnego czasu korzystam z pewnej bardzo ciekawej aplikacji pomagającego w zarządzaniu projektami. Redmine, bo tak jej “na imię” spełnia praktycznie wszystkie moje wymagania w tym zakresie, poza faktem, że jej wydajność jest “mocno średnia” [jest napisana w Ruby on Rails]. Dzisiaj jednak siadając przy komputerze stwierdziłem, że spróbuję czegoś nowego. Ze względu na to, że miałem przez chwilę styczność z polecanym przez jednego z kolegów OpenGoo zaprosiłem “na warsztat” właśnie ten “kawałek kodu”.
[Symfony] Błąd: "You must be in a symfony project directory".

Zaliczyłem już większość przedmiotów i coraz wyraźniej widzę, że chyba w sesji będę mógł w końcu odpocząć. Zostały jednak jeszcze dwa projekty do zrobienia, co zajmuje całkiem sporo czasu. Najgorsze jest to, że te projekty nie są specjalnie trudne, po prostu nie mogę się zmusić, żeby popracować dłużej i bardziej produktywnie. W każdym razie cały czas “dłubię” we frameworku Symfony, więc niech nie zdziwi Was kilka kolejnych wpisów na ten sam temat - na pewno kiedyś Wam się przydadzą. ;] Dzisiaj także ze względu na ograniczony czas porada będzie krótka i prosta. Ale już w lutym obiecuję być bardziej produktywny [oczywiście jeśli będę przy komputerze] i dokończyć te wpisy, które cierpliwie czekają jako szkice. Ale do dzieła:

Problem.

Struktura katalogów wygląda następująco: framework zainstalowany jest w drzewie /lib/vendor projektu, a do katalogu głównego zostały skopiowane pliki symfony i symfony.bat z drzewa /lib/vendor/symfony/data/bin, żeby było łatwiej wywołać polecenia obsługi. Zechciałem sobie nieco bardziej ułatwić życie zmieniając nazwę skryptu:
mv symfony.bat sf.bat
jednak docelowy dostęp przez [kropka] [slash] [S] [Tab] nie działał, ze względu na obecność pliku symfony. Zmieniłem więc nazwę głównego skryptu:
mv symfony _symfony
i przerobiłem skrypt batch: