Naprawiłem klejownicę

Popsuła mi się klejownica – najtańsza tandeta, to się nie dziwię, że się wzięła i uszkodziła. Ot, drucik się wziął i urwał od elementu grzewczego, który – oczywiście – rozłożyłem, zacisnąłem na nowo, i złożyłem. Tenże element jednakże mnie zdumiał: otóż całe “serce” klejowniczki stanowią dwie miedziane blaszki, przypięte wprost do kabla od 220V, przedzielone (pękniętym, u mnie) kawałkiem jakiegoś kamieniopodobnego materiału.
Tu moje pytanie do kogokolwiek, kto się zna: cóż to za ledwie przewodzące, grzejące się ładnie, pieroństwo?

Szlakiem automatów nadmorskich – edycja 2

No i się stało – pojechałem znowu, popedałowałem trochę, i wróciłem. Przejechałem, zgodnie z planem, wybrzeże (tym razem) od zachodu – Międzyzdroje – po wschód – Hel. Wszelkie napotkane automaty do gier muzycznych zostały skrupulatnie spisane, wedle założeń wycieczki, i zostaną równolegle na Krokmanię oraz DDR Poland wywieszone, wraz z mapką rozmieszczenia maszyn.

Uwaga: długie, szczegółowe i pełne anegdotek z podróży. Tak, żebym więcej nie zapomniał, komu o czym opowiadałem… ;P
Continue reading “Szlakiem automatów nadmorskich – edycja 2”

Programistom urywam rączki. Tanio.

Właśnie na nowo odkrywam uroki poprawiania kodu po kimś. Ot, typowa robota – coś nie działa, weź napraw. Cóż można jednak znaleźć w cudzym kodzie? Panie i panowie, scyzoryki w kieszeń, zaraz będą się same otwierać.

Eksponat pierwszy – pole formularza typu checkbox, zaznaczone, jeśli formularz już był raz wypełniany i wrócił po poprawki:

<?php
$tmp="serwis2";
if ($_POST[$tmp] == "on") {
?>
<td><input type="checkbox" name="serwis2" checked="yes"/>opcja</td>
<?php
} else {
?>
<td><input type="checkbox" name="serwis2"/>opcja</td>
<?php
}
?>

Rozumiem, że

<td><input type="checkbox" name="serwis2" <?php if ($_POST["serwis2"]=="on") { ?/>checked="yes" < ?php } ?>>opcja</td>

… było za skomplikowane. Trzeba było tę zmienną $tmp koniecznie. Co to jest, do licha, jakiś auto-generator PHP?

Eksponat drugi. Zwracanie błędów z funkcji najlepiej robić o tak:

return "brr";

Będzie informatywnie i wyczerpująco.

Eksponat trzeci. Sprawdzanie poprawności formularza. Oczywiście, jest kilka metod – client-side czyli javascriptem i odmówimy przesłania niepoprawnego formularza, albo server-side czyli sprawdzamy jakimś PHPem i odsyłamy do poprawek, albo łącząc te dwie techniki AJAXem. Tu geniusz wynalazł sposób czwarty. Otóż formularz jest – po kolei – sprawdzany javascriptem, generowane są komunikaty o błędach, a następnie… formularz, z tymi komunikatami i statusem błędu przy pomocy javascriptu wmontowanymi w ukryte pola, zostaje i tak posłany na serwer. Tylko po to, by się od niego odbić na pierwszym ifie (no bo jest niepoprawny przecież, jako w nim samym stoi wyraźnie, <input type=”hidden” name=”error” value=”cośtam”> – no i to pole error zostaje wyświetlone użytkownikowi, wraz z formularzem do poprawki. Tylko po kiego czorta w ten sposób?

Poprawka – w przypadku formularz prawidłowo wypełnionego, o zgrozo, nie zostaje on zaakceptowany. Zostaje znów “odrzucony” tylko tym razem zaopatrzony w kawałek javascriptu, który zmienia mu adres docelowy na innego PHPa, po czym formularz automatycznie podsyła.

Ratunku.

Migrating WordPress while changing table prefix

I’ve lost over an hour today on a macabre discovery: WordPress uses the configurable “table prefix” not only for table names, but for some key names in the user meta-data tables!

In a nutshell: when migrating WordPress with changing the table prefix, say, from the default “wp_” to “blabla_”, your user rights are going out the window – even your administrator user will be helpless like a newborn kitten. That’s because WordPress, when installing its tables, used the prefix to create a “wp_user_roles” entry in the wp_options table, and some similar entries in the wp_usermeta table. Yup, that’s basically a prefix-in-a-prefix scenario, quite ridiculous. To get everything running again, you’ll need to change all the “wp_*” entries in your new blabla_options and blabla_usermeta tables into “blabla_*” entries.

I cannot fathom why this was done in such a crazy manner…