log69 blogja

Linux / gyors cache feltöltés

Egy szoftver demójához be szoktam tölteni előtte a mysql fájlokat a rendszer cache-be. Így nem gondolkodik semmin a demó közben.

Shellből szoktam megoldani, de észrevettem hogy Ruby-ból kétszer gyorsabb (sokszor futtatva marad az arány). Vajon a shell while ciklusa lassítana? Igazából mindegy. Ez SSD-n van és relative kicsi az adat. Más esetben jobban számíthat a különbség.

Ubuntu 16 / integrity check

Letöltöttem Opera Linux verzióját, mely egy telepíthető .deb fájl és root jog kell így hozzá. Mivel külső forrásból jön, így nem megy át az oprendszer gyártói folyamaton, nyilván valamivel nagyobb gyakorlati eséllyel megbízhatatlanabb a számomra. Virustotal nem hiszem hogy megfelelően ki tudja elemezni, illetve egyáltalán egy AV megoldás.

Fel akartam tenni Ubuntu 16-ra egy integrity checker-t (pl. tripwire), aztán gondolkodtam hogy jó lenne ha olyan lenne, amely az OS által frissített fájlok változásait nem veszi figyelembe.

Írtam egyet Ruby-ban (nincs semmi külső függősége), futtatható Ubuntu alapú rendszereken, pl. Linux Mint:
https://github.com/log69/myscripts/blob/master/ubuntu_integrity_check.rb

Ubuntu 16 / DPI állítás / Unity és Firefox

Nagy dpi felbontású képernyőnél kicsik a betűk és widget-ek a képernyőn.

Az oprendszerben át lehet állítani külön a betűket, de ezzel még továbbra is kicsik maradnak a grafikus elemek és a böngészőben a weboldalak, amelyeket külön külön mindig nagyítani kell. A unity-tweak betű nagyság szorzója sem jó, illetve a böngészőben a minimális betű nagyság állítása sem oldja meg a problémát, mert a web designerek az esetek 99 %-ban beégetett px értékeket használnak még egy nyomorult OK gombnál is, így a betű lefolyik a gombról ha csak a betűt nagyítjuk. Az piac vezető cégei is ilyen botrányos termékeket produkálnak.

Ubuntu 16 / Firefox / AppArmor / Pepper Flash

AppArmorral engedélyezett Firefox nem fér hozzá a Pepper Flash pluginhez a gyári AppArmor szabállyal, ezért az alábbi kiegészítés kell:

sudo -i

apt install browser-plugin-freshplayer-pepperflash

aa-complain /etc/apparmor.d/*firefox

firefox &

grep -iE "apparmor.*firefox" /var/log/syslog

nano /etc/apparmor.d/local/*firefox

/dev/shm/org.chromium** rw,

aa-enforce /etc/apparmor.d/*firefox

pkill firefox ; firefox &

aa-status

Ruby / permanent key-value storage

Quick and dirty permanent key-value storage solution in Ruby using the standard lib (thread safety and locking are done automatically), store any kind of object easily:
http://ruby-doc.org/stdlib/libdoc/yaml/rdoc/YAML/Store.html

http://paste.ubuntu.com/16170480/

def store(key, value = nil)
require "yaml/store"
$y = YAML::Store.new("myfile.yml") if not $y
value ? $y.transaction{ $y[key] = value } : $y.transaction{ return $y[key] }
end

# store anything
value = [1, 2, "hello", {:test => "ok"}]
store "mykey", value

# get it back
value = store "mykey"

# this is the file that is created
$ cat myfile.yml
---
mykey:
- 1
- 2
- hello
- :test: ok

stat

Átírtam a webes terhelés megjelenítő cuccomat úgy, hogy gnuplot helyett html5-ös vektort használjon és ne legyen httpd függőség:

https://github.com/log69/stat

sudo apt-get install dstat ruby
wget "https://raw.githubusercontent.com/log69/stat/master/stat.rb"
ruby stat.rb &
firefox 127.0.0.1:8888

(Megjegyzés: várni kell pár percet míg dstat begyűjt adatokat, mert a cél, hogy visszamenőleg hosszú távra lássuk a gép terhelést és ne az aktuálisat - arra vannak egyéb eszközök).

Ubuntu 16 / VLC / resume playback

Végre VLC elvileg tudja 2.2 verziótól felfelé a pozícióra emlékezést külön minden média fájlra. Ubuntu 16-ban 2.2.2-es verzió van:
http://packages.ubuntu.com/search?keywords=vlc

Infó innét:
http://addons.videolan.org/content/show.php/Remember+position?content=1…

Szerk.: sajnos nem tudom működésre bírni, pedig elvileg ez az alapértelmezett viselkedés - volt róla bug report és lezárták 1 éve - azt gondolnám mennie kell - még nyomozok.

Internet speed test from command line / Linux

Nem akarok weboldalakkal szórakozni az aktuális netem letöltési sebességének megméréséhez és tudni szeretném hamar gyorsan parancssorból, mert az mindig kéznél van. Az alábbit raktam össze.

"openssl" a lassú /dev/urandom helyett van, "timeout" a pár másodperc utáni befejezéshez, "pv" -a kapcsolója pedig az átlag sebességet írja ki az aktuális helyett (csak újabb pv verziókban van ez a kapcsoló, el is hagyható).

"myserver" feltöltési sebességének nagyobbnak kell lennie mint a helyi letöltési sebesség, ezért nyilván érdemes egy olyan VPS-hez kapcsolódva futtatni, amely 100 vagy 1000 Mbit-es feltöltési sebességgel rendelkezik.

Ruby / functional style

Azzal foglalkoztam, hogy fejlesszem kicsit a funkcionális programozásom Ruby-ban. A népszerűsítéséért megosztok néhány példát.

http://paste.ubuntu.com/14120230/

# n hosszú véletlen jelszó generálása.

def abc; ("A".."Z").to_a + ("a".."z").to_a + ("0".."9").to_a end
def pass(n); n.times.map{abc.sample}.join end

pass 10
=> "FI2dbS9IcR"

# lottó számok

(1..90).to_a.sample(5).sort
=> [3, 7, 34, 73, 77]

# nevek sorba rendezése fordított alakjuk alapján
# és némely karakterük nagybetűvé alakítása véletlen módon

["besenyő", "boborján", "evetke"].sort_by{|x|x.reverse}\
.map{|x|x.split("").map{|x|rand(2) == 0 ? x : x.upcase}.join}
=> ["eVETke", "BoBorjáN", "beSEnYő"]

# számjegyek megszámlálása egy nagy véletlen számban

Linux / vágólap automatikus törlése

Biztonsági okokból szerettem volna a vágólap tartalmát töröltetni időnként, nehogy rajt hagyjak egy jelszót vagy egyéb infót a szükségesnél jóval hosszabb ideig.

su -c "yum install xsel"
sudo apt-get install xsel

crontab -e

* * * * * (/usr/bin/xsel --display :0 -bc; /usr/bin/xsel --display :0 -pc; /usr/bin/xsel --display :0 -sc)

Szerk.: javítottam a Ruby scriptemen, elérhető:
https://github.com/log69/myscripts/blob/master/clipboard_auto_clear.rb

mydns / simple ruby script

Összeraktam egy egyszerű Ruby scriptet saját DNS-hez, hogy ne kelljen külső dinamikus DNS szolgáltatókat használni. Már régebb óta érett bennem, de végül locsemege topicja miatt megcsináltam.

https://github.com/log69/mydns

Ha van kedve valakinek tesztelni Windows platformon több Ruby verzióval azt megköszönöm.

Nincs semmi függősége a Ruby-n kívül.

Az ötlet annyi, hogy egy fix szerverünkön futtatjuk a szerver oldali scriptet indításkor, az elérni kívánt gépeken pedig a kliens oldali scriptet indításkor. Ez automatikusan frissíti az IP-t. A munkaállomásunkról pedig lekérdezzük az IP címet, mikor el akarjuk érni a kliens gépeket, pl. hogy SSH-val kapcsolódjunk.

GNU Screen + Bash history hack

screen-t úgy használom, hogy indításakor megnyit több session-t különböző mappákban különböző programokkal. Példa .screenrc fájl:

startup_message off
defscrollback 10000
caption always "%{-b ..}%-w%{+b ..}[%n %t]%{-}%+w"

chdir /home/user/dir1
screen program1
title "test1"

chdir /home/user/dir2
screen program2
title "test2"

Szerettem volna ha bizonyos shell sessionbe beállíthatok egy bash history-t alapból. Nehéz volt megszülni. Itt találtam a megoldást:

http://stackoverflow.com/a/7193037

Hogy nyissunk egy olyan bash shellt, amely megtartja a .bashrc-t és saját history-t adhassunk neki, így tudtam megoldani:

F20 / Xfce + Compiz

Ehhez a bejegyzéshez.

yum install compiz-xfce compiz-plugins-main compiz-plugins-extra emerald-themes* ccsm

Beállítások - Menü / Settings / CompizConfig Settings Manager:
- Scale windows / Initiate Window Picker -> TopLeft + Overlay Icon -> None
- Snapping Windows
- Zoom Desktop

Beállítások - Menü / Settings / Emerald Theme Manager
- Themes Settings / Themes / Mac4Lin_Emerald_Aqua_v1.0
- Emerald Settings / Titlebar Double-Click Action -> Maximize/Restore

Compiz indítása (betenni Settings / Session and startup-ba):
compiz-xfce-emerald

Server stat (Linux)

Van sok szerver terhelést monitorozó cucc, nekem viszont egy nagyon egyszerű kimenettel rendelkezőre volt szükségem.

Nyílt forráskódúvá tettem a fejlesztésem. Sima szerver oldali ruby script. Lehetőség van szétválasztani a LAN és WAN interface-t, hogy külön grafikonban mutassa.

Ubuntun és Fedora (CentOS) vonalon tesztelve.

https://github.com/log69/stat

Ruby / Rational class

Lebegőpontossal dolgozni sokszor szívás, mivel nem ábrázolható mindig a decimális véges bináris formában.

$ python
>>> 0.3 - 0.1
0.19999999999999998

Ruby-ban is, de van más lehetőség is:

$ irb
> 0.3 - 0.1
=> 0.19999999999999998
> "0.3".to_r - "0.1".to_r
=> (1/5)
> ("0.3".to_r - "0.1".to_r).to_f
=> 0.2

Mondjuk 20x lassabb is :)

> Benchmark.realtime{ 1000000.times{ 0.3 - 0.1 } }
=> 0.10152744
> Benchmark.realtime{ 1000000.times{ "0.3".to_r - "0.1".to_r } }
=> 2.040160752

http://ruby-doc.org/core/Rational.html

Megj.: Perl és Lua-nál 0.2 jön ki. Kerekítenének vajon a megjelenítésnél?

Firefox / form kitöltő lista értékek sorrendje nem megfelelő

Előzmény itt.

Lényeg hogy van egy olyan cuccom, amiben sűrűn töltök ki form-ot. És nem tudom elérni azt, hogy a leggyakrabban használt értékek kerüljenek a leugró lista tetejére, mikor belekattintok a textbox-ba. Függetlenül attól, hogy mit neveznénk leggyakrabban látogatottnak (idő vagy számláló alapján).

Ugyanis vagy olyan érték, amelyet ha 20-szor használok egymás után, akkor sem kerül a lista tetejére soha. Szerintem ez nem megfelelő működés.

Írtam rá egy bugreport-ot:
https://bugzilla.mozilla.org/show_bug.cgi?id=1060766