Egér optimalizálás játékokhoz

Az elmúlt időben volt szerencsém mindenféle játékkal játszani, és kezdett kicsit fusztrálni, hogy az egerem nem mindig úgy viselkedik mint ahogy szeretném. Először azt hittem, hogy én vagyok a béna, aztán azt, hogy az egérrel van probléma, és végül rájöttem, hogy mindennek a fejlődés az oka. Történt ugyanis, hogy a felhasználók nagy részének kényelmetlen a pontos, precíz egér. A microsoft-nak pedig fontosak a felhasználók, így történhetett az, hogy mindenféle okos algoritmusokat raktak az egér és a pointert mozgató réteg közé. Ennek viszont az lett az eredménye, hogy a precíz egérhasználat megszűnt.

Szerencsére elég sokan játszanak mindenféle játékkal, és van köztük olyan, aki ért is ahhoz, amit csinál, így nem kellett sokat keresgélni ahhoz, hogy ráleljek erre a nagyszerű leírásra, amiben szépen elmagyarázzák, hogy miről is van szó:

CS:S Mouse Optimization Guide

Pár programról esik szó még a cikkben, ezek:

MarkC Windows 8.1 + 8 + 7 + Vista + XP Mouse Acceleration Fix Builder

Mouse Rate Checker

Mouse Movement Recorder

Azt hiszem minden gépen meg fogom tenni ezeket a beállításokat, mert sokkal pontosabb lett az egér, és ez nem csak a játékok alatt jön jól, hanem sok más területen is (pl. zeneírás, képszerkesztés, stb).

Napi idézet

“A számítógépes játékok nincsenek hatással a srácokra. Ha gyerekkorunkban hatott volna ránk a PacMan, akkor ma sötét termekben rohangálnánk tablettákat rágcsálva, miközben repetitív elektronikus zene szól.”

Hupsz  🙂

VirtualBox partíció növelése

Elfogyott a hely a virtuális gépen, szerencsére már nem olyan bonyolult megnövelni mint régen…  Persze a vmdk formátum (amit preferál új virtuális gép létrehozásánál) átméretezését a virtualbox  még nem támogatja.

Az alábbit kell tenni:

1. konvertálni a vmdk formátumot vdi formátummá:

VBoxManage.exe clonehd Appliance-disk1.vmdk appliance_1.vdi –format vdi

2. Új uuid-et generálni, mert ha ugyanaz több lemeznek az uuid-je, akkor a virtualbox ellenségessé válik, és nem csinál semmit egyik lemezzel se:

VBoxManage.exe internalcommands sethduuid Appliance-disk1.vdi

3. Átméretezni a kedvenc vdi formátumú lemezünket:

c:\Program Files\Oracle\VirtualBox>VBoxManage.exe modifyhd Appliance-disk1.vdi –resize 12000

(a 12000 mb-ot jelent)

4. átrakni az új lemezt a virtuálisgépbe (merészek vissza is konvertálhatják vmdk-ba)

5. átméretezni a partíciót az operációs rendszer számára (pl. bootolni egy ubuntu iso-t, és gparted-el átméretezni a kívánt partíciót)

Scarlett upgrade

Ilyen volt:
Scarlett2i2

Ilyen lett:

focusrite_Scarlett_6i6_front

Hozzáértőknek feltűnhet, hogy az új kép sokkal profibb, hisz míg a régin csak egy vézna kis árnyék van, az új képen frankó tükröződés. Amikor ezt megláttam, tudtam, hogy a sorsom megpecsételődött. Egyszerűen kell.

Persze vannak még különbségek, amik a képen nem látszanak elsőre. Pl. míg a 2i2 usbről működött, a 6i6-nak már dedikált tápegységre van szüksége. Ez lehetne hátrány is, de mint tudjuk, ha valaminek külön táp kell, akkor az csak egyet jelenthet: sokat fogyaszt. És ha csak nem rontottak el valamit nagyon a Focusrite főhadiszállásán, akkor reménykedhetünk benne, hogy ez a valami gyorsabb is lesz ezáltal és nem csak olvasztjuk vele a jégsapkákat, mert megtehetjük (segítek: nem hibáztak, gyorsabb lett).

Fontos apróság továbbá, hogy van hozzá MixControl is végre (hello pfl, hello loopback). Az igazat megvallva azt hittem, hogy ez alap, amíg egy kedves angol úriember fel nem világosított, hogy rosszul hiszem. Persze ahogy a mondás tartja, olcsó hangkártyának ne nézd a MixControlját. Sajnos még a 6i6 mixere is fapad a Liquid Saffire 56 mixeréhez képest de ennek legalább van.

És hát a hangja… Szóval a teszt biztos jól sikerült volna, ha nem akadok el az első sound check videónál:

http://vimeo.com/63173106

Chocolatey finomságok

A minap elég sok alkalmazásból frissítettem verziót, és ennek kapcsán felmerült bennem az ötlet, hogy kellene készíteni egy programot, ami felveszi pontosan mit csinálnak az adott telepítők, és az rpm-hez hasonlóan egy univerzális csomagot készítene az ily módon rögzített adatokból (fájl és registry módosítások).

Ezt nem lehetetlen megcsinálni, elvégre a sysinternals process monitora is valami hasonlót csinál (csomagot nem készít, de a módosításokat szépen megmutatja). Ez egy elég jó kiindulási alap lehetne, és ha jól emlékszem open source is. Persze lennének problémák mindenféle varázs guid-ot generáló komponens regisztrációkkal, kiszűrni mi tartozik a telepítőhöz mi nem, nomeg a file formátuma, operációs rendszerenként eltérő műveletek. De hát a problémák azért vannak, hogy az emberek megoldják őket 🙂

Mivel időm nincs, gondoltam segítségül hívom a google-t, és megnézem, van e már ilyen. Sajnos pont ilyen nincs (szóval valaki aki lelkes, és ideje van igazán megírhatná), ellenben van egy sokkal egyszerűbb (de legalább vicces fejlesztők által készített) alternatíva, a Chocolatey.

Ez egy primitív apt-get windowsra, a felhasználók egyszerű scripteket készítenek, és egy leírót. A script általában letölti a telepítőt, felrakja silent módban a gépre. Update során megnézi a leírót, van e újabb verzió, ha van akkor ezt a folyamatot megismétli az újabb scriptel.

Értelemszerűen uninstallálni nem tud (az enyém tudna, bibibiii), és a csomagok terén is vannak még hiányosságok (pl: pspad, plex, winamp, fences, hypersnap még nincs), de a dolog működik, és még így is nagy könnyebbség, hogy nem kell kézzel frissítgetni mindent. A hiányzó csomagokat pedig bárki elkészítheti (én pl. hétvégén a felsoroltakat megcsinálom), és a support is csodás (vasárnap este írtam, hogy egy csomag hibás, másnap reggelre jött a válasz, hogy javítják).

Szóval egyenlőre maradnak a nagy álmok, az univerzális windows telepítő csomagot készítő alkalmazást illetően, aztán majd egyszer ha sok időm lesz (pl. elfogynak a synctocloud feladatok), akkor lehet nekiállok…

Addig is: The chocolatey gods have answered your reuest! Yipieee!

Oracle 11g 64 bit telepítése ubuntu 12.04 64 bit alá

Az Oracle céget és piacvezető alkalmazásukat elég jól jellemzi, hogy az ubuntu és minden más normális linux disztribúció támogatása kimerül abban, hogy tedd redhat-ra mert az a supportált. Oracle adatbázis miatt redhat-et telepíteni pedig több mint nevetséges.

Az ubuntura történő telepítés nem is olyan bonyolult, csak rá kell jönni a telepítő (és a borzasztó oracle telepítést végző script halom) működésére.

A telepítő két dolgot csinál valójában:

  1. kimásolja az oracle fájlokat
  2. sok make fájlal, és elképzelhetetlenül sok (és értelmetlen) változó segítségével lefordítja a bináris dolgokat

Az első lépésen viszonylag könnyen felül lehet emelkedni, a neten megvan hozzá minden, én csak kigyűjtöttem egy helyre.

Kell egy kevés dependencia, hogy egyáltalán elinduljon a telepítés:

sudo apt-get install ksh less lesstif2 lesstif2-dev lib32z1 libaio1 libaio-dev \
libc6-dev libc6-dev-i386 libc6-i386 libelf-dev libltdl-dev libmotif4 \
libodbcinstq4-1 libodbcinstq4-1:i386 libpth-dev libpthread-stubs0 \
libpthread-stubs0-dev lsb-cxx make openssh-server pdksh rlwrap rpm \
sysstat unixodbc unixodbc-dev unzip x11-utils zlibc gcc-multilib \
ia32-libs libstdc++5 libstdc++5:i386

Egy két extra link, hogy minden ott legyen, ahol a telepítő keresi:

sudo ln -s /usr/bin/basename /bin/basename
sudo ln -sf /bin/bash /bin/sh
sudo ln -s /usr/bin/rpm /bin/rpm
sudo ln -s /usr/bin/awk /bin/awk
sudo mkdir /usr/lib64
sudo ln -s /usr/lib/x86_64-linux-gnu/libc_nonshared.a /usr/lib64/
sudo ln -s /usr/lib/x86_64-linux-gnu/libpthread_nonshared.a /usr/lib64/
sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /usr/lib64/
sudo ln -s /lib/x86_64-linux-gnu/libgcc_s.so.1 /lib64
sudo ln -s /usr/lib/i386-linux-gnu/libpthread_nonshared.a /usr/lib/libpthread_nonshared.a
sudo ln -s /bin/lib/libgcc_s.so.1 /lib/libgcc_s.so
sudo ln -s /usr/lib/libstdc++.so.6.0.13 /usr/lib/libstdc++.so.5

Egy user, és pár group a telepítőnek, és az oracle példánynak:

 sudo groupadd oinstall
sudo groupadd dba
sudo groupadd nobody
sudo useradd -m oracle -g oinstall -G dba
sudo passwd oracle

Kell még egy pár kernel paraméter:

sudo nano /etc/sysctl.conf

Ide az alábbi dolgokat kell felvenni:

kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000

Ha a módosításokkal megvagyunk, olvastassuk fel újra a kernelparamétereket:

sudo /sbin/sysctl -p

A limits-eket is érdemes módosítani:

sudo nano /etc/security/limits.conf

ide fel kell még venni az alábbi sorokat:

* soft nproc 2047
* hard nproc 16384
* soft nofile 1024
* hard nofile 65536

És kell még egy ál-redhat release is, hogy a telepítő megnyugodjon:

sudo nano /etc/redhat-release

A fájl tartalma pedig:

Red Hat Enterprise Linux AS release 3 (Taroon)

Ha mindent default módon telepítünk, akkor érdemes még felvenni, az alábbi környezeti változókat, hogy az életünk könnyebb legyen már a telepítés alatt is:

#oracle exports
export ORACLE_BASE=/home/oracle
export ORACLE_HOME=$ORACLE_BASE/app/oracle/product/11.2.0/dbhome_1
export ORACLE_SID=orcl11
export PATH=$PATH:$ORACLE_HOME/bin

Ha ezzel megvagyunk, akkor jöhet a telepítő kitömörítése, és indítása (oracle userként).

xhost +
sudo su oracle
~/oracle_install/runInstaller

A fájlok másolása ha nem rontottunk el semmit, akkor hiba nélkül megtörténik, az érdekes rész ezután jön. Amikor elkezd fordítani az oracle, jó eséllyel látunk majd egy két hibát. Gondolom meg kell indokolni Oracle-nál, hogy mire kell azt a nagyon sok support költséget fizetni (hogy nem normális telepítő írására, az biztos). A hibák az alábbi főbb problémákra vezethetőek vissza:

  1. Ubuntu alatt a gcc picit szigorúbban fordít, és meg kell enyhíteni a lelkét, amin a „-Wl,–no-as-needed” paraéterpáros általában szokott segíteni.
  2. Hiányoznak a fordításhoz referenciák, amit a gcc általában –l(lib) formában kap meg.

Itt fontos megjegyezni, hogy a –lagtsh az valójában libagtsh.so-t jelent, azt érdemes keresni. Másik hasznos utasítás az nm parancs, aminek a segítségével megnézhetjük, hogy egy adott függvény, amit épp a make nem talál, milyen so fájlokban van benne. Pl:

nm -A $ORACLE_HOME/lib/*.so | grep procr_get_ctx

Ahol U van, ott az so fájl használja a szolgáltatást, ahol T ott implementálva van.

A neten sok problémára van megoldás, de nem mindre (én kettőre nem találtam). A tapasztalatom szerint ilyen esetekben érdemesebb picit beleásni a dolgokba, és megérteni, mit és miért csinálunk, mert az az esetek nagy részében célravezetőbb mint mindenféle misztikus sed-et, és egyéb utasításokat kiadni, hátha valami működik.

Az részletes fordítás alatt jelentkező (make) hibákat az alábbi módon érdemes nézni:

tail -f $ORACLE_HOME/install/make.log

Vegyük sorra, hogy nálam milyen problémák adódtak, és mi volt a megoldásuk:

– libagtsh.so: undefined reference to `nnfyboot’ in make: rdbms/lib/dg4odbc]

Ez egy elég ravasz hiba, a probléma az, hogy nincs még meg az a fájl, ami a fordításhoz szükséges. A megoldást az internet szállítja: fordítsunk magunknak egyet:

ln -s $ORACLE_HOME/lib/libclient11.a $ORACLE_HOME/lib/libagtsh.a
$ORACLE_HOME/bin/genagtsh $ORACLE_HOME/lib/libagtsh.so 1.0

 

– libnnz11.so: could not read symbols: Invalid operation /sysman/lib/ins_emagent.mk

Kis keresgetés után lehet látni, hogy a hívás a $ORACLE_HOME/sysman/lib/ins_emagent.mk fájlból indul, és egy olyan szolgáltatásra hivatkozik, ami a libnnz11.so-ben van benne. Ezt pótoljuk oly módon, hogy a dependenciát is kapja meg meg a gcc:

$ORACLE_HOME/sysman/lib/ins_emagent.mk

régi:

$(MK_EMAGENT_NMECTL)

új:

$(MK_EMAGENT_NMECTL) -lnnz11

– genorasdksh: Failed to link liborasdk.so.11.1

Szintén egy dependencia probléma, amikor a teljes oracle sdk-t próbálja lefordítani, akkor nagyon sok dolgot nem talál hirtelen. A megoldás hasonló az előző esethez, a megnézzük a szolgáltatásokat, azonnal feltűnik, hogy a libagtsh.so és a  liborasdkbase.so hiányzik neki nagyon. Értessük meg vele:

$ORACLE_HOME/bin/genorasdksh

Régi:

OLIBS="$LCLIENT $LSQL $LVSN $LNETWORK $LCLIENT \
$LCOMMON $LGENERIC $LMM $XAONDY $LNETWORK $LCLIENT $LCOMMON \
$LGENERIC $LTRACE $LNNET_ON $LSKGXP"

Új:

OLIBS="$LCLIENT $LSQL $LVSN $LNETWORK $LCLIENT \
$LCOMMON $LGENERIC $LMM $XAONDY $LNETWORK $LCLIENT $LCOMMON \
$LGENERIC $LTRACE $LNNET_ON $LSKGXP -lagtsh -lorasdkbase"

– getcrshome – libhashgen11 missing reference

Itt ha megnézzük, akkor az a szolgáltatás amit keres, megtalálható az .so fájlban, ami meg is van adva. Itt a hiányzó extra paraméter a gond. Kis keresgetés után erre is rá lehet találni. A megoldás:

$ORACLE_HOME/srvm/lib/env_srvm.mk

Régi:

LDOBJSZ=-m64

Új:

LDOBJSZ=-m64 -Wl,--no-as-needed

És láss csodát, hiba nélkül működik az oracle ubuntun. Szerencsére csak az oracle build script-jeit láttam, a forrását nem, de ha azt is olyanok írták, mint ezeket a scripteket, akkor jobb is ez így…

Drobox szerver otthonra

Miutan elszaporodtak a gepek a halozaton, egyre nagyobb szerephez jut a dropbox. Ellenben eleg sok szamitogepemben ssd van abbol is a legkissebb darabok igy oda nem telepul ilyesmi (elvegre rendes ember adatokat ugyis csak raiden vagy cloudba tarol, vagy inkabb mindket helyen, felesleges a nagy hdd kis gepekbe). Felraktam egy dropboxot a szerverre is, es kiosztottam sambaval (mert cloud nelul azert megsem elet az elet :).

Ennek a megoldasnak van par elonye:
– a szerverrel is barhonnan tudok egyszeruen fajlokat cserelni (pl torrent fajlt megadni letoltesre)
– a lokalis gepek sokkal gyorsabban szinkronizalnak a dropboxal (hisz lanrol toltenek)
– ha valami nagyot akarok feltolteni, csak atdobom a szerverre, es majd megkuzd vele
– alahol nincs dropbox onnan is elerem a benne tarolt fajlokat fileshare-n keresztul

A tanulsag pedig: Cloud ide vagy oda, mindig jo ha van egy szerver odahaza 😉

GPX fájlból route endmondo-ba

Itt találtam egy jó leírást, hogy lehet csak útvonalat tartalmazó gpx fájlból endomondo útvonalat létrehozni.

https://getsatisfaction.com/endomondo/topics/gpx_import_not_working

 

A lényeg:

At the moment we don’t have a feature for a direct import of GPX file without timestamps, but there is a workaround – see how to do it below.

1) Run the file (containing the route) through a converter such as the one found at gpsies.com. Converting the file from it’s current state to a GPX Track will generally add all of the information that we need.
2) Import this file as a workout to endomondo.com
3) Save a workout as a route: go to the workout, click “To Route”, give it a name and select whether it should be public or private (private routes are only visible by you), and click save. Now you can find the route on the “Routes” page.

Route is now available to be downloaded to the phone or used otherwise.

 

Ennek örömére meg is csináltam a G50 útvonalát: http://www.endomondo.com/routes/175134683

 

Wifi optimalizálás, avagy harc az erőért

Pesten a népsűrűségnek, és a wifi hálózatok terjedésének megvannak a maga jótékony hatásai. Soha se volt jó a jel a pesti lakásban, de azért amikor minden 5 csomag request timeoutra futott, elkezdtem komolyabban venni a problémát. Gondoltam leírom milyen út vezetett a megoldáshoz, később még jól jöhet.

Nulladik lépésként ellenőrizzük, hogy az internet kapcsolattal, vagy a wlannal van probléma. Elég kellemetlen, ha órákat töltünk a wlan kapcsolat állítgatásával, közben az internettel van probléma. Ezt úgy tudjuk megtenni, hogy elfelejtjük a wlant, nézünk egy ping -t google.com-ot, esetleg speedtest.net-et, és ha minden rendben, megismételjük ezt vezeték nélküli hálózatról is.

Ha csak a wlan része a problémás a dolognak, akkor jöhet az érdemi munka. Első körben mindig próbáljuk meg frissíteni a router szoftverét, mert lehet azt próbáljuk megoldani épp, amit a router készítői már megoldottak (mondjuk 2 éve).

Ha ez megvan, és a helyzet nem javult, akkor a “mi mindent megtettünk” felkiáltás mellett végre széttúrhatjuk a gyári beállításokat.

A hullámformából következik egy csomó dolog (például, hogy nem kell vezeték…), de ami minket most a legjobban zavar az a hullámok között fellépő interferencia. Ha sok wlan van egy helyen, akkor azok hajlamosak összeveszni a csatornákon, ami elég rossz hatással van hálózatunk működésére. Azt, hogy pontosan mi is történik körülöttünk a Wifi Analyzer nevű programmal meg tudjuk nézni, akár a telefonunkon is. Itt kell választani egy olyan tartományt, ami viszonylag kevésbé belakott. Nálam ez a 12 csatorna volt (a routerek általában az alacsonyabb csatornákat lakják be, és ott harcolnak egymással).

Első beállításunk tehát:

Channel: 12

Ha nagyon terhelt a hálózat, akkor érdemes még a csomagméretet kisebbre venni, mert kisebb csomagokba kevésbé tud belerondítani bárki. Ha ezt az értéket túl kicsire vesszük, akkor járhat sávszélesség vesztéssel, de:  inkább legyen egy lassú de állandóan működő hálózatom,  mint egy gyors, de néha nem működő változtat.

Fragmentation Threshold: 1024

Ilyen helyzetben alap, hogy minden sok sok crc-vel fogunk ellátni, hogy minél nagyobb hibákat is tudjanak javítani az eszközeink, tehát:

Preamble Type: Long preamble

Ha az életben maradásért (na jó nem, csak stabil internet kapcsolatért) küzdünk, akkor mindenféle optimalizációt (mint a rövid gurad intervallt, csomag összefűzést kapcsoljunk ki):

Short GI: Off

Aggregation: Off

És lőn nagy öröm, boldogság, éjszakákat átívelő stream-ek.

A végén megjegyezném, hogy -1 lépés az, hogy ne vegyük meg a legolcsóbb és legrosszabb minőségű routert. Törekedjünk az ismert, bevált márkákra (asus, cisco, linksys, stb), és ezekből se a kategória alját vegyük, hanem a kb. 2-3000 huf-al drágább középmezőnyből válogassunk. Olcsó noname routereknél nem ritka jelenség, hogy nagy mennyiségű adattól túlmelegednek/belassulnak, vagy egyszerűen sok élő kapcsolattól meghalnak, és ezekre a problémákra rendszerint csak egy drágább router vásárlása jelenti a megoldást.