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)))

ismerkedés a symfony2-vel (2.)

Tehát azt ígértem, hogy a project lezárása után elkezdjük az ismerkedést az symfonyval. Az első kérdés a letöltés után, hogy ok, mit hol találok?

Az app könyvtárban találhatóak a beállítófájlok, cache és a kernel. A kernel az mvc szemléletben felépített modulok (bundle-ök) betöltéséért, futtatásáért felel.

A bin könyvtárban lévő vendors fájl, a gyökérben lévő deps és deps.lock fájlok felelősek a symfony frissítéséért git tárolókból. A vendors a futtatható parancsfájl, a deps meg tárolja a függőségeket. Ide kell felvenni a szükséges paramétereket akkor, ha új 3rd party eszközre lenne szükségünk. Későbbiekben a symfonyban egy új csomagkezelést fognak bevezetni, ami nagyjából hasonlít a linuxokban megismert csomagkezelésre. Függőségeket lehet vele definiálni és a saját kódjainkat csomagokba szervezni. További infó az composerről.

Az src könyvtárban lesznek a kódjaink. A bundle egy komponens a symfonyban, amit mi írtunk. src/cégnév/projectnév/bundleneveBundle a bundle elérési útvonala. Ezzel az útvonallal (ami egyben namespace is) később, bizonyos alap összetevők kiszervezhetőek a vendors mappába is. A bundle Controller mappája tartalmazza a kontrollereket. A controller fájl és osztály suffixe minden esetben Controller. A bundle php fájl ami még szükséges, a többi mappának nem kötelező léteznie.

Vendor mappába frissülnek le a fentebb emlegetett komponensek. Symfony és 3rd party kiterjesztések. Itt is megfigyelhető egyébként a bundle szerű felépítés, a Symfony is egy bundle.

Web DocRoot. De ez lehet akármi.

OK! Most már megtalálom nagyjából a dolgokat a fájlrendszerben, hogyan kezdjek neki?

Symfony environment-ek

A environment-ek különböztetik meg a különféle futásokat. Így tudunk csinálni egy rendszerre dev, test, prod(uction) environmenteket. De akár egy symfony kódbázisra ráépíthetünk különféle projecteket, létrehozva ezzel projectneve1_dev, projectneve1_prod, projectneve2_dev … elnevezésű environmenteket. Az environmentek nevét a belépő fájl, az alap telepítéseben a web mappa docroot app.php és app_dev.php fájlja tartalmazza. Azt is itt írjuk le, hogy az adott environment debug módban fut-e (lásd kernel.debug paraméter később), vagy sem.

app.php 9. sor

$kernel = new AppKernel(‘prod’, false);

app_dev.php 15. sor

$kernel = new AppKernel(‘dev’, true);

A web mappát lemásolva és ezeket a paramétereket átírva új environmentet hozhatunk létre. Mondjuk egy új weboldalt.

A konzolos parancsok esetében (app/console a belépési pont) az –env kapcsolóban mi kézzel adjuk meg, hogy milyen environmentet akarunk futtatni. Ha lényeges akkor a további kapcsolókban a debug módot is megadhatjuk (cache újraépítésénél lényeges pl).

Environmentenként betöltődő bundle-ök.

Következő lépésként még azt is szeretnénk megadni, hogy mely bundle-ök töltődjenek be az egyes futások alkalmával. Ezt beállítani az app/AppKernel.php fájlban van lehetőségünk.


app/AppKernel.php 22. sor

if (in_array($this->getEnvironment(), array('dev', 'test'))) {

illetve


app/AppKernel.php 32-35. sor

public function registerContainerConfiguration(LoaderInterface $loader)
{
$loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml');
}

Az első kódban mutatott ponton ágaz(hat)nak el a különféle environmentek. Itt egy egyszerű switch szerkezettel el tudjuk különíteni a különféle environmenteket. A második kód mutatja, hogy az environment nevétől függően, hol keresi a belépő beállító fájlt az app config mappában.

Korábban az app és web mappábat úgy ahogy van másoltam, és úgy hoztam létre új elágazást. De szervesen összetartozó, ugyanakkor mégis külön részegységet alkotó environmentek esetén ez egy kicsit szorosabb integrációt tud eredményezni és karbantartani is egyszerűbb.

Legközelebb nekilátunk egy minta project és néhány tucat bundle létrehozásának.

Olvasnivaló:
How to Master and Create new Environments

symfony in progress

Az első után kicsit elmaradt a symfony2-ről a folytatás. A helyzet az, hogy a napokban fejezek be egy nagyobb lélegzetvételű projectet symfony2 alapokon. Ha azt lezárom, mindenképpen megosztom a tapasztalatokat! A honi hobbi project után azért sok megoldás született!

A mai agymenésem twitteren a következő témák körül forogtak:
– yaf nagyon jól néz ki (pecl-ben megírt MVC keretrendszer)! teljesítmény tesztek twitterpajtitól remélem érkezni fognak
– miért nem írnak több modult zend enginge-ben (c-ben) gyorsítva ezáltal a kódokat? minden adott! még akár 1 az 1ben átültethető lehetne a php kód, interface zend enginge alá.
– innentől gurult el a gyógyszer, egy mobilfejlesztő cégben ahol iphone kódokat túrunk, miért ne lehetne objective c-ben megírni a weboldalt?
– a múltkori crossplatform objective c kód után teljesen felvillanyozott az elgondolás, hogy objective c-ben írjak meg weboldalakat. Egyedül talán a doctrine-t kéne portolni objective c alá. iOS alatt a Core Data nagyjából teljesen megoldja az ORM kérdést. ezt kéne átültetni ebbe a környezetbe cserélhető DB backenddel (mysql, pgsql, oracle, sqlite stb). MVC elv nem tétel, más meg minden létezik lib szinten. max egy objc binding kell hozzá.
– későbbi megvizslatásra eltesszük a cappuccino-t és a frothkit-et. előbbi objective-j és kliens oldali kódot, javascriptet generál egy objective-cre hajazó kódhalmazból, utóbbi objective c és szigorúan szerver oldali. alaposabb ismerkedés és remélhetőleg egy éles project preview-ja közeljövőben érkezik!

telefon mint hangkártya

A régi laptopomat használom újra. Azon viszont rossz a hangkártya. Mivel elég muzikális egyén vagyok, az egy hét csönd itthon kissé sok. Így adva volt a feladat, csináljunk az androidból hangkártyát. Ehhez csak a rygel és a rygel-properties programokat kellett feltenni, illetve a telefonra a UPnPlay programot. Így a számítógépen lévő zenéket out-of-the-box tudom hallgatni. Az még nem egészen megy, hogy a PulseAudio stream-et is továbbítsa. Bár létezik modul és a pavucontrol-ban meg lehet adni, hogy mint kimenet jelenjen meg a lehetőségek között, hang mégsem jön ki a torkán. Ugyan így a banshee-t is látja a telefonos app, hang viszont nem jön. Gyanítom ha felerőszakolnám rá a legújabb rygel-t (0.12-nél járnak, 11.10-ben viszont még csak 0.10 van), akkor működne.

M.j.: 11.10 előtti verzióval nem sikerült, hibaüzenetet dobott a rygel.
M.j.2: annyira megtetszett a dolog, hogy hirtelen egy HTPC-t vizionáltam aminek egy android tablet a “kijelzője”. Elgurult a gyógyszer…

objc ubuntun

Az ember fia mivel múlassa szabad esti idejét mint olyan valami vad perverzióval, hogy objective c-ben ír ubuntu-n egy kis projectet? 🙂
Nosza nézzük mi kell hozzá!

Egyszerűség kedvéért most gcc-t fogunk használni llvm helyett. Mer’ az mindig kéznél van. 🙂

apt-get install libgnustep-base-dev

Csak ezt az egy csomagot kellett feltenni, egy könyvtárban létrehozni a main.m fájt és egy makefile-t.

main.m
#include
#include

@interface Hello
+ (const char *) Word;
@end

@implementation Hello
+ (const char *) Word;
{
return "Hello Word!";
}
@end

int main (void)
{
printf("%s\n", [Hello Word]);
return(0);
}

GNUmakefile
include $(GNUSTEP_MAKEFILES)/common.make

TOOL_NAME = hello
hello_OBJC_FILES = main.m

include $(GNUSTEP_MAKEFILES)/tool.make

Két parancs futtatása szükséges:

. /usr/share/GNUstep/Makefiles/GNUstep.sh
make

Ezek után ha mindent jól csináltunk akkor az obj/hello kiírja a stringet. 🙂

GNUStep doksi.

Hello Symfony2!

Még tavasszal kezdtem el foglalkozni a symfonyval. Mivel már akkor béta állapotban volt a kettes verzió, ezért leginkább azt fedeztem fel. Aztán annyira megtetszett, hogy a folkrádió újraírásánál is erre alapoztam.
Egy többrészes életszerű példán keresztül szeretném bemutatni, hogy mit tud és mit hol lehet benne megtalálni.

Telepítés

A symfony.com-ról kell letölteni a megfelelő fájlt. Abban az esetbe ha van telepítve GIT érdemes a without vendors verziót. Ez annyiban különbözik a másiktól, hogy a vendors könyvtárat, amiben az egész symfony lelke van, a netről szedi le és frissíti. Ez a parancs telepíti a vendorst:

bin/vendors install

A frissítés értelem szerűen update paraméterrel történik. Ha új verzió jön ki, elég ezt lefuttatni és a cache-t kiüríteni.

app/console cache:clear –env=dev

Az alkalmazás index a web mappa app.php vagy app_dev.php. Szabadon fel lehet venni új environmentet is és azt használni. A különféle környezetekhez lehet egyedi beállítást fűzni. Én például arra használom, hogy a migrációkor az adatbázis műveleteket ne naplózza. Ha ezt nem tenném meg, előbb utóbb bármekkora memória elfogyna, hiszen hatalmas adatbázist kell migrálni. Kezdetnek viszont teljesen elég a dev és a prod env.

na még egyszer

Egy éve helyreállítottam a blogot, aztán jött egy félresikerült upgrade majd elszállt megint. Most egy hozzászólás kapcsán vettem észre, hogy a maintenance lejött a blogról és használható. Így nekifutunk még egyszer a blognak. Utóbbi egy évem iOS fejlesztéssel és symfony2 ismerkedéssel telt, így ezeket a témákat szeretném kicsit megkörnyékezni.

Blogra fel!

eladó

Eladó egy LC-Power EH-35BSII típusú külső merevlemez-keret. Jellemzők: SATAII, usb2, esata.
Megkímélt állapotban, fél éves sincs talán.
Boltban újonnan 5500 Ft-ért láttam. 2500 Ft-ért odaadom.
Linux-szal out-of-the-box működik probléma nélkül.

things a dropboxban

Mivel a Things valami egészen elvetemült helyre teszi az adatbázis fájlját így kis trükközés kell, hogy a dropboxba szinkronizálható legyen. Az ehhez szükséges lépések:

1. Kapcsoljuk ki az esetleg futó Things-t.
2. Finderben keressük meg a ~/Library/Application Support/Cultured Code/ mappát és a Things mappát helyezzük át a dropboxba.
3. Indítsunk egy terminált és a következő sorokat gépeljük be:
ln -s “/Users/connor/Dropbox/Things” “/Users/connor/Library/Application Support/Cultured Code/Things”
Értelem szerűen a connor-t cseréljük le a saját home nevünkre.
4. Kiléphetünk.

Ha mindent jól csináltunk akkor a megfelelő symlink létrejött és az a megfelelő mappára mutat.

szégyen

http://picasaweb.google.hu/funtineli/AmikorAHargitaiRendszamuAutoKobanyanParkolAkkorAKedvesEsJoindulatuPolgarokIgy#

Szégyen és gyalázat bazdmeg! A nagy magyarkodó barma arra nem veszi a fáradtságot, hogy mielőtt kinyilvánítja hazaszeretetét a román rendszámú autót látva, megnézze, hogy melyik megyéből jött a kocsi. Történetesen az autó egy budapesti leányt szállított aki csángóföldön tanít magyart a csángók gyerekeknek. 3 hónap alatt többet tett a leány azokért mint ez a barom egész életében fog… Szégyen… Ez az orális hazaszeretet!