mysql karakterkódolási gondok

Új helyre költözött a blog és kellett egy keveset mókolni az adatbázison, hogy működjön a karakterkódolás. Latin1 táblában unicode karakterek voltak. Mivel az elkövetkezendő időben nagyobb méretű és mennyiségű adatbázist kell majd migrálnom, felvésem ide a receptet.

# mysqldump --no-data --skip-set-charset --default-character-set=latin1 -u user -p adatbázis neve > blog_schema.sql
# mysqldump --no-create-info --skip-set-charset --default-character-set=latin1 -u user -p adatbázis neve > blog_data.sql

Mivel az adatbázisban unicode karaktereket tárol, a latin1 charset kapcsolóval annyit mondunk csak meg, hogy semmi konverziót nem kérünk, illetve a fejlécben elhelyezett set-charset részt se. Így a táblában tartott adatok változtatás nélkül fognak szerepelni a fájlban.

Export után a sémafájlban az összes tábla karakterkódolást át kell írni utf8-ra.

Vegyes táblatartalom esetén (volt már ilyenhez is részem) értelem szerűen az azonosakat kell együtt exportálni, alakítani és importálni.

RAID hdd csere

Némi memó magamnak. Most éppen apánként cserélek egy régóta működő tömbben winyókat és havonta egyszer el kell végezni a mutatványt.

Előfeltételezés: /etc/initramfs-tools/conf.d/mdadm configban BOOT_DEGRADED=true

  1. Gép kikapcs. (Nem hotswappos)
  2. Winó kicserél.
  3. Gép bekapcs.
  4. Raid állapotát és a tömb tagjait meg kell nézi a statban: cat /prod/mdstat
  5. Ki kell keresni a megfelelő hdd-t és létre kell hozni rajta az üres partíciót: fdisk /dev/sdx
    1. n – create new partition
    2. P – primary partition
    3. 1 – Partition number
    4. Enter – Default starts at
    5. Enter – Default ends at
    6. t – choose partition
    7. fd – partition type
    8. p – print changes
    9. w – write changes
  6. mdadm –manage /dev/md0 -a /dev/sdx1

Honda Jazz II., izzócsere

Az eredeti leírás azt próbálja meg beadni, hogy a H4-es izzó cseréje egyszerűbb a kerék felől. Ez akár még igaz is lehetne a jobb oldalra, de a bal oldalon annyi minden van, hogy egyszerűen lehetetlen hozzáférni, ezért itt kipróbáltam, mi van akkor ha kiszedem a lámpatestet.

Nos, a tapasztalat az, hogy SOKKAL gyorsabb és kevésbé bonyodalmas.

Ami kell hozzá:

  • Lapos fejű csavarhúzó
  • Phillips csavarhúzó
  • Tizes villáskulcs

A motorháztetőt felnyitva látható, hogy az első lökhárító 4 műanyag patenttal van rögzítve. Ezeket, és a kerekeknél, a lökhárító és az oldalsó elem találkozásnál található kereszthornyos csavarokat eltávolítva lehet az idomot annyira kiemelni, hogy a lámpa két alsó csavarjáthoz hozzá lehessen férni. Ezeket is kicsavarva ki lehet billenteni a lámpatestet annyira, hogy a szerelést kényelmesen el lehessen végezni.

Ha legközelebb cserélni kell bármelyiket, dokumentálni fogom a teljes procedúrát.

net::ERR_INCOMPLETE_CHUNKED_ENCODING

Oprendszer: OSX
Környezet: brew csomagkörnyezettel feltett nginx, PHP FPM-et hívogat, 8080-as port miatt saját user futtatja az nginx-et sudo nélkül.
Hibajelenség: Nagyméretű oldalak betöltődésekor, véletlenszerűen net::ERR_INCOMPLETE_CHUNKED_ENCODING hibaüzenettel elszáll a chrome és a safari sem tölti be az oldalakat.
Oka: Jogosultsági gondok.
Megoldás:
nginx -V 2>&1 | grep path –color parancs segítségével ki kell deríteni, hogy hol vannak az nginx átmeneti mappái és azokra meg kell adni az írási jogot az nginx-et futtató user számára.
Magyarázat:

I’ve learned that when you give a response too big for Nginx, it uses this directory to write as a working directory for temporary files. If the worker process cannot access it, Nginx will terminate the transmission before it completes, thus the error INCOMPLETE_CHUNKED_ENCODING.

Innenstackoverflow.com/…/neterr-incomplete-chunked-encoding-nginx

PopCorn Garage

Megoldások:

toy story
willy wonka
gremlins
total recall
indiana jones
o brother where art thou
fight club
5th element
terminator
mask
hook
zorro
scream
star wars
matrix
top gun
back to the future
the birds
forrest gump
inception
jurassic park
teenage mutant ninja turtles
harry potter
ghost busteres
adams family
cast away
amelie
catch me if you can
friday the 13th
lion king
The Good, the Bad and the Ugly
avatar
v for vendetta
wall e
amadeus
There’s Something About Mary
12 monkeys
men in black
Zombieland
kill bill
Pirates of the Caribbean
saw
batman
Who Framed Roger Rabbit
big lebowski
predator
E.T. the Extra-Terrestrial
mars attacks
Crocodile Dundee
howard the duck
taxi driver
pulp fiction
wayne’s world
alien
A Perfect World
leon the professional
dracula
the great dictator
goonies
watchmen
snatch
willow
neverending stroy
nightmare berfore christmas
alice in wonderland
clockwork orange

óraátállítás körüli problémák

Egy ideje online rádió fejlesztésében veszek részt. Ez a rádió teljes egészében beavatkozás nélkül működik. Hétvégén legenerálja a következő heti műsort, aztán az adott napon a player mindig veszi a következő napi műsort, aztán éjféltől az szól. Az óraátállítás viszont kissé gondolkodósra sikerült. Az addig okés, hogy 24, 23 vagy 25 órányi műsort generálok. A megjelenítésnél (mi szól most, illetve a következő x szám) már nem teljesen triviális. Mindig tudnom kéne az átálláskor, hogy a 2 és 3 óra közti időszakban mi a helyzet. Pedig nem tudom. Mert php hibába futottam.

$zone = new DateTimeZone(‘Europe/Budapest’);
$date = new \DateTime(‘now’, $zone);
var_dump($date->format(‘r I’), date(‘r I’));

Ez a kód nyári szerint 2 és 3 között azt adja vissza, hogy már téli van. A date a helyes eredményt adja vissza. OSX és Ubuntu alatt is reprodukálható a téma.
Verziók:
PHP 5.4.7 (cli) (built: Oct 28 2012 08:17:31)
PHP 5.3.10-1ubuntu3

Úgy tűnik a DateTime nem jól kérdezi le a rendszeridőt.

Most pedig megnézem, a forráskódban, hogy mi okozza a gebaszt.

Update:

Olyankor amikor stringet kap, akkor ugyan az a lib parseolja fel mint a strtotime() így az is hibás eredményt ad. Egyetlen esetben sikerült daylight save time biztos módon megkapnom a datetime objectet, ha így inicializáltam:

$date = new \DateTime(‘@’. time());
$date->setTimeZone(new DateTimeZone(date_default_timezone_get()));

Most nem fogok mélyebben belemászni, hogy mindez miért van, de valahol egy elég régi bug van, mert a neten is található néhány megválaszolatlan poszt a témában.

NSOutline- és NSTableView sorkiválasztás

Egy apró érdekességbe futottam bele.

A view alapú tábla és outlineview felépítésekor a customizált sorháttér rajzoláskor szükségünk van ugye arra, hogy a cella tartalom is highlighted állapotba kerüljön. Viszont nem mindegy, hogy a sorháttér rajzoló metódusa és a cellatartalom változtatása mikor fut, mouse down vagy up állapotkor. Ha ezek nem egyszerre futnak, sorháttér down cellatartalom mouse up állapotkor, akkor lassú kattintáskor csúnya, gyors kattintáskor se túl elegáns villogást lehet észlelni. A cellatartalmak változtatására az apple egy WWDC videóban az -outlineViewDidChanged: notification-t javasolja, hogy ott állítsuk át. Ez viszont a kattintás befejezésekor fut. Ahhoz, hogy a két eseményt (közel) azonos időbe hozzuk a kétféle view datasource protokolljában implementálni kell a sárkánydobáshoz tartozó metódusokat:
-tableView:writeRowsWithIndexes:toPasteboard: illetve,
-outlineView:writeRowsWithIndexes:toPasteboard:
Ilyenkor a kattintás felengedésekor megvizsgálja, hogy indult-e droppolás és akkor állítja a cél sort kijelölt állapotba.
További optimalizáció, hogy a notification helyett szerintem a mouseUp metódusban is el lehetne végezni a cellatartalom highlighted állapotba kapcsolását, akkor még kevesebb a delay a megjelenítéskor. Viszont ez utóbbit még nem próbáltam.

youtube vlc alól

Egy ideje elcsesződött a youtube videók lejátszása VLC alól. Viszont a main repoban megtalálható a javítás a problémára. Szerencsére elég a youtube.lua scrip frissítése. Aki nem tudja/akarja megvárni a 2.0.4-es verziót amiben javítják, az megjavíthatja maga is. A mac-es metódust írom le, a többiek úgyis tudják mit kell csinálni. 😉

Letöltöd az új lua scriptet a vlc repóból youtube.lua néven.
Finderből megkeresed az /Applications-ben a VLC appot.
Jobbklikk, Show Package Contents.
Az app package-ben megkeresed a Contents/MacOS/share/lua/playlist/youtube.lua fájlt, és lecseréled.
Voilà!

class-dump exception

Egy folyamatban lévő munkához volt szükségem egy friss AppKit.framework class-dumpra, de a program elszállt.

Hibajelenség:
class-dumpot frameworkon futtatva a következő exceptiont adja:

2012-09-28 20:41:02.484 class-dump[21769:707] *** Terminating app due to uncaught exception 'NSRangeException', reason: 'Trying to read past end in -[CDDataCursor readLittleInt32]'
*** First throw call stack:
(
	0   CoreFoundation                      0x00007fff8f52bf56 __exceptionPreprocess + 198
	1   libobjc.A.dylib                     0x00007fff8614ad5e objc_exception_throw + 43
	2   CoreFoundation                      0x00007fff8f52bd8a +[NSException raise:format:arguments:] + 106
	3   CoreFoundation                      0x00007fff8f52bd14 +[NSException raise:format:] + 116
	4   class-dump                          0x000000010000ed41 class-dump + 60737
	5   class-dump                          0x000000010001a3d2 class-dump + 107474
	6   class-dump                          0x0000000100009399 class-dump + 37785
	7   class-dump                          0x000000010001a8dd class-dump + 108765
	8   class-dump                          0x0000000100001fa8 class-dump + 8104
	9   class-dump                          0x000000010000d217 class-dump + 53783
	10  class-dump                          0x0000000100001464 class-dump + 5220
)

Hiba oka: olyan frameworkon próbálod futtatni ami SDK és az XCode szállítja. Ezek MH_DYLIB_STUB típusúak és nem tartalmaznak futásidejű információt.
Hiba megoldása: /System alatt található framework-ön futtassad. pl:

class-dump /System/Library/Frameworks/AppKit.framework/AppKit

Megj.: Mindez persze nem vonatkozik az iOS SDK-ra.

mouseUp never called

Kód:

- (void) mouseDown:(NSEvent)event
{
   [super mouseDown:event];
   ....
}

Hibajelenség:

– mouseUp nem fut.

Oka:

> Probably the superclass will setup a local event loop in mouseDown. I
> think several of the view classes do this.

That is exactly what’s going on. If you want to implement -mouseDown:
and -mouseUp:, don’t call [super mouseDown:].

This is one of those things that should probably be fixed, but fixing
it would break too many existing apps..

Megoldás:
super-t nem hívjuk meg. Dzsízüsz…

Továbbá, ha NSButton-t subclass-olsz és ezekkel bűvészkedsz, a target-en a selectort neked kell meghívni mouse up esetén.

kevesebb több

“…a képek gondolatisága erősebb legyen, mint az esztétikája. Persze el kell kerülni azt a csapdát, hogy így akár rossz képeimet is rettentő izgalmasnak nevezhetném. Inkább arra gondolok, hogy meg akarom szabadítani a felületet a felesleges részektől, hogy a rétegleszedésnek köszönhetően többé váljon. Ez a fajta absztrakciós lehetőség hihetetlenül felszabadító tud lenni.”
Szalontai Ábel a vele készült interjúban, Fotóművészet 2010/2.

forrás

Az utolsó két mondatban párhuzamot vélek felfedezni a szoftverfejlesztéssel. Persze ahogy a forrás folytatja, nem is annyira egyszerű a rétegleszedést jól művelni. Ott sem, itt sem.

libreoffice calc

Szakmai munkásságom csúcsán megalkottam ezt:
CONCATENATE(IF(INDEX(Sheet10.$C$1:$C$235, MATCH(B71,Sheet10.$A$1:$A$235, 0))=”Budapest”,CONCATENATE(INDEX(Sheet10.$C$1:$C$235, MATCH(B71,Sheet10.$A$1:$A$235, 0)),” “, IF(ISTEXT(INDEX(Sheet10.$B$1:$B$235, MATCH(B71,Sheet10.$A$1:$A$235, 0))),INDEX(Sheet10.$B$1:$B$235, MATCH(B71,Sheet10.$A$1:$A$235, 0)),CONCATENATE(ROMAN(MID(INDEX(Sheet10.$B$1:$B$235, MATCH(B71,Sheet10.$A$1:$A$235, 0)),2,2)),”.”)) ),CONCATENATE(INDEX(Sheet10.$B$1:$B$235, MATCH(B71,Sheet10.$A$1:$A$235, 0)),” “,INDEX(Sheet10.$C$1:$C$235, MATCH(B71,Sheet10.$A$1:$A$235, 0)))),”, “,INDEX(Sheet10.$D$1:$D$235, MATCH(B71,Sheet10.$A$1:$A$235, 0)),CHAR(10),INDEX(Sheet10.$E$1:$E$235, MATCH(B71,Sheet10.$A$1:$A$235, 0)))