tag:blogger.com,1999:blog-54871362260709754172024-03-05T20:33:17.745-08:00coshacksBlog about various hacks & projects i'm working on.coshttp://www.blogger.com/profile/15241919046329987814noreply@blogger.comBlogger44125tag:blogger.com,1999:blog-5487136226070975417.post-60550583418617246212021-05-27T07:06:00.023-07:002021-11-11T05:55:47.515-08:00Matrix tips they don't tell you<p> <br /></p><h2 style="text-align: left;">FAQ</h2><h2 style="text-align: left;"> </h2><h3 style="text-align: left;">1. Why is this in blogger.com? This is ugly</h3><p style="text-align: left;"> </p><p style="text-align: left;">Migrated to fediverse! <a href="https://wordsmith.social/cos/matrix-tips-they-dont-tell-you">https://wordsmith.social/cos/matrix-tips-they-dont-tell-you</a> <br /></p><br />coshttp://www.blogger.com/profile/15241919046329987814noreply@blogger.com0tag:blogger.com,1999:blog-5487136226070975417.post-48193517406904614452020-02-15T03:57:00.000-08:002020-02-15T04:39:52.430-08:00Mitä vikaa Telegramissa?Telegram-pikaviestimestä on tullut melko suosittu joissain piireissä. Siinä on kuitenkin joitain puolia jonka vuoksi sitä ei voi suositella ainoana viestimienä uusien yhteisöjen perustamiseen.<br />
<br />
Tässä on avattuna muutamia Telegramiin liittyviä ongelmia ja lopussa ehdotus ongelmien ratkaisemiseksi tai ainakin kiertämiseksi. Artikkeli on kirjoitettu lähinnä harrasteyhteisöjen näkökulmasta, yritysmaailmassa on eri kuviot. Lukijan oletetaan tietävän pikaviestinten eroavaisuudet tai osaavan selvittää ne tarvittaessa.<br />
<br />
<h3>
3. Tekniikka</h3>
<h3>
</h3>
<span style="font-weight: normal;">Käyttäjän kannalta Telegramin asiakasohjelmat ovat samalla viivalla muiden nykyaikaisten viestimien kuten Slackin, Riotin, Mattermostin jne kanssa. Kaikissa on jonkinlainen kanavalista josta kanavan valitsemalla näkee keskustelun sisällön jossa virtaa tekstiä ja kuvia. Telegramin virallinen asiakasohjelma on avointa lähdekoodia josta iso peukku.</span><br />
<span style="font-weight: normal;"><br /></span>
<span style="font-weight: normal;">Telegramista puuttuu muihin palveluihin siltaamisen kannalta olennainen ominaisuus eli kummituskäyttäjät. Kummituskäyttäjillä (ghost user) tarkoitetaan sillan loihtimia käyttäjiä, jotka edustavat sillan toisessa päässä olevia käyttäjiä. Esimerkiksi IRC, Slack ja Matrix tukevat kummituksia ja niissä sillan toisessa päässä olevat käyttäjät näkyvät "oikeina" käyttäjinä.</span><br />
<br />
<span style="font-weight: normal;">Telegram-kanavan siltauksessa Telegramin päässä siltabotti toistaa toisten käyttäjien viestit mikä hieman vaikeuttaa keskustelun seuraamista ja yksityisviestien lähettäminen sillatuille käyttäjille on mahdotonta.</span><br />
<span style="font-weight: normal;"><br /></span>
<br />
<h3>
2. Yksityisyys</h3>
<h3>
</h3>
<span style="font-weight: normal;">Telegramissa käyttäjän identiteettinä toimii puhelinnumero. Tämä kuulostaa alkuun ihan hyvältä idealta, mutta aiheuttaa ongelmia.</span><br />
<br />
<span style="font-weight: normal;">Yhdellä laitteella ei voi olla kuin yksi Telegram-tunnus. Et voi tehdä toista tunnusta esim työkäyttöön hankkimatta toista puhelinliittymää. Käyttäjänä näkyvän bottikäyttäjän luominen ei onnistu (bottien luomiseen on oma rajapintansa).</span><br />
<br />
<span style="font-weight: normal;">Puhelinnumero on erinomainen tapa yksilöidä ihminen tietokannassa. Yhdistämällä puhelinnumeron sisältämiä tietokantoja saadaan käyttäjästä kerätä paljon luotettavampaa tietoa joten puhelinnumerolla yksilöity tieto voidaan myydä kalliimmalla.</span><br />
<br />
Telegram väittää että se ei myy käyttäjiensä tietoja
kolmansille osapuolille. Tähän voi uskoa ne, jotka haluavat mutta sitä
on vaikea todistaa suuntaan tai toiseen, koska palvelinpää on täysin suljettu.<br />
<br />
<h3>
1. Hallinto</h3>
<h3>
</h3>
<span style="font-weight: normal;">Telegramin omistaa venäläisen Pavel Durovin rahoittama<b> </b>yritys<b> </b>Telegram Messenger LLP. Telegram pyörii täysin Durovin lahjoitusvaroin ja Durovin mukaan ei pyri tuottamaan voittoa.</span><br />
<br />
<span style="font-weight: normal;">Kuulostaa hyvältä? Mutta vaikka tilanne on tämä nyt, Telegram on kuitenkin yksittäisen tahon hallinnoima ja infrastruktuuriltaan suljettu palvelu.</span> Jos Durov kääntää rahahanat kiinni, Facebook ostaa koko firman tai tapahtuu muuta yllättävää, voi tilanne muuttua eikä käyttäjillä ole siihen mitään valtaa.<br />
<br />
Telegramin käyttäjillä ei ole mitään sanomista siihen mihin suuntaan se kehittyy ja mitä ominaisuuksia siihen tulee. Telegram sallii kolmannen osapuolen asiakasohjelmat, mutta sekin voi muuttua yksipuoleisella päätöksellä koska tahansa (muistatteko Facebookin XMPP:n ja Slackin IRC:n?).<br />
<br />
Telegramin omistajan luotettavuutta arvioidessa kannattaa muistaa myös 1.7 miljardia dollaria tienannut <a href="https://en.wikipedia.org/wiki/Telegram_(software)#Telegram_Open_Network_ICO" target="_blank">kryptovaluutta-huijaus.</a> <br />
<br />
<h3>
Mitä sitten kannattaa käyttää?</h3>
<h3>
</h3>
Jokainen yhteisö päättää miten haluaa palvella jäseniään. Nämä ovat omaan kokemukseeni perustuvia suosituksia. Oletuksena on, että yhteisö piittaa sekä tekniikasta, yksityisyydestä että hallinnosta. Jos näillä ei ole väliä, voi käyttää vaikka WhatsAppia (Älkää nyt oikeasti käyttäkö silti).<br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj32RZbJheeR-w7EUyMovsGPRRFKGu3md4Uc12EQgctSfr_ETu_NPgV4t1CLiBCtI6HeKoNqAHXVx0NptSlXMN4R5Baq-mc0sXUMhceXU2ESVrW-w_xIqItV6nfsj3qccChk9nXm_V7Uqgu/s1600/viestinkuva.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" data-original-height="304" data-original-width="794" height="245" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj32RZbJheeR-w7EUyMovsGPRRFKGu3md4Uc12EQgctSfr_ETu_NPgV4t1CLiBCtI6HeKoNqAHXVx0NptSlXMN4R5Baq-mc0sXUMhceXU2ESVrW-w_xIqItV6nfsj3qccChk9nXm_V7Uqgu/s640/viestinkuva.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">(Kuva ei mittakaavassa)</td></tr>
</tbody></table>
<br />
<h4>
Olemassaolevat yhteisöt</h4>
<br />
Hacklab-yhteisöissä lähtötilanne oli se, että labit ja labien jäsenet käyttivät sekaisin IRCiä (kahdessa verkossa), Telegramia ja Slackia.<br />
<br />
Noin 2018 tuli huhu uudesta viestimestä nimeltään Matrix millä pystyisi siltaamaan eri palvelut. Matrix otettiin koekäyttöön ja alkuaikoja vaivanneiden teknisten ongelmien jälkeen se on toiminut varsin mukavasti. Uusille suositellaan Matrixin käyttöä jolloin sillä pääsee "kaikille" kanaville helposti, mutta vanhat voivat käyttää omia suosikkiviestimiään kuten ennenkin.<br />
<br />
Käyttäjän kannalta tälläisessä järjestelyssä ei ole väliä mitä viestintä kukakin käyttää, eikä se näy mitenkään keskustelussa poislukien Telegramin päässä oleva siltabotti. Uusia viestimiä voidaan ottaa kanavalle mukaan ja turhia poistaa tarpeen mukaan keskeyttämättä keskustelua.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsgB_0nCQWXCxmjVQiN9pqsJUeUgEs6mZhYe2vZnOD_LSXQBWzhRsRHoRKCJcLsrKgG9PORx5_R8hItvDtnhF15VKacFJyHG5wWCri8pupHMqgKy804zZfUovquXkNzYowFzbfsiru1Z1W/s1600/viestinkuva2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="335" data-original-width="794" height="270" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsgB_0nCQWXCxmjVQiN9pqsJUeUgEs6mZhYe2vZnOD_LSXQBWzhRsRHoRKCJcLsrKgG9PORx5_R8hItvDtnhF15VKacFJyHG5wWCri8pupHMqgKy804zZfUovquXkNzYowFzbfsiru1Z1W/s640/viestinkuva2.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">WhatsApp on mahdollista sillata, mutta se on aikamoinen säätö</td></tr>
</tbody></table>
<br />
Harrasteyhteisöissä monilla on valtava muutosvastarinta pikaviestimien suhteen. "Ylhäältä päin" annettu määräys siirtyä käyttämään tiettyä viestintä ei toimi. Pahimmassa tapauksessa yhteisö jakaantuu kahteen koulukuntaan pelkästään sen takia että toinen puoli haluaa käyttää eri pikaviestintä. Matrixin sillat ovat olleet valtava apu sovun säilyttämisessä. <br />
<br />
<h4>
Uudet yhteisöt</h4>
<br />
Uusille yhteisöille kannattaa suosia samantien Matrixin käyttöä. Se on ei-teknisten ihmisten helppo ottaa käyttöön ja täyttää tekniset, yksityisyydelliset ja hallinnolliset vaatimukset paremmin kuin mikään muu. Tämän jälkeen kannattaa selvittää mitä viestimiä jäsenet mieluiten käyttävät ja pystyttää Matrixiin sillat k.o palveluihin, mikäli mahdollista.<br />
<br />
Jos yhteisö on isompi ja teknisesti orientoitunut, kannattaa harkita oman Matrix-palvelimen pystyttämistä. Sillä käyttö on nopeampaa kuin matrix.orgin välillä ruuhkaisella palvelimella ja pystyttäminen ei ole valtavan vaikeaa.<br />
<br />
<br />
<br />
t: @cos:hacklab.fi coshttp://www.blogger.com/profile/15241919046329987814noreply@blogger.com1tag:blogger.com,1999:blog-5487136226070975417.post-66699894210366460182019-06-25T03:59:00.001-07:002019-06-25T04:08:31.192-07:00Matrix Synapse authentication from Unix user accounts<span style="font-family: inherit;"><i>Problem: You have an organization (university, business, hackerspace, etc) with existing user accounts on a Unix server. You want to host Synapse homeserver for them so that they can use their existing accounts to log in. </i></span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">Here's how to do it quite easily.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">We use three main components:</span><br />
<span style="font-family: inherit;"><br /></span>
<br />
<ul>
<li><span style="font-family: inherit;">Synapse - the Matrix homeserver</span></li>
<li><span style="font-family: inherit;">Synapse REST Password provider - This is a plugin to Synapse that acts as a HTTP client asking "I have client with this username and password, is it valid?" </span></li>
<li><span style="font-family: inherit;">pam-auth-rest-api - This is a HTTP server which receives the question, checks Unix PAM (Pluggable Authentication Modules) if the username / password pair is valid, and returns the information to the password provider.</span></li>
</ul>
<span style="font-family: inherit;">You can run the homeserver on same or different server to where the accounts are. Security-wise it's probably better to have own server for Synapse.</span><br />
<span style="font-family: inherit;"><br /></span>
<br />
<h3>
<span style="font-family: inherit;">
Set up synapse</span></h3>
<h3>
<span style="font-family: inherit;">
</span></h3>
<span style="font-family: inherit;">Read the <a href="https://github.com/matrix-org/synapse/blob/master/INSTALL.md" target="_blank">installation instructions</a>. I installed as Debian package. It doesn't matter how you install it. Remember to use postgresql database.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">Use <a href="https://federationtester.matrix.org/" target="_blank">federation tester</a> to make sure your homeserver is seen by the federation. </span><br />
<h3>
<span style="font-family: inherit;">
</span></h3>
<h3>
<span style="font-family: inherit;">
Set up REST Password provider</span></h3>
<h3>
<span style="font-family: inherit;">
</span></h3>
<span style="font-family: inherit;">Read the instructions <a href="https://github.com/kamax-matrix/matrix-synapse-rest-password-provider" target="_blank">here</a>. You just copy the plugin file to a specific directory. In homeserver.yaml you need to add the magic lines:</span><br />
<span style="font-family: inherit;"><br /></span>
<br />
<div class="highlight highlight-source-yaml">
<pre><span style="font-family: inherit;"><span class="pl-ent">password_providers</span>:
- <span class="pl-ent">module</span>: <span class="pl-s"><span class="pl-pds">"</span>rest_auth_provider.RestAuthProvider<span class="pl-pds">"</span></span>
<span class="pl-ent">config</span>:
<span class="pl-ent">endpoint</span>: <span class="pl-s"><span class="pl-pds">"</span>http://server.with.accounts:3000<span class="pl-pds">"</span></span></span></pre>
</div>
<h3>
<span style="font-family: inherit;">
</span></h3>
<h3>
<span style="font-family: inherit;">
Set up REST PAM API </span></h3>
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">This should be done on the computer with the Unix accounts, whether it is the homeserver or not.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">Read instructions <a href="https://github.com/vranki/pam-auth-rest-api" target="_blank">here</a>. You'll need to git clone the repository and do some setup. It is a node.js application so you'll need to install required nodejs packages as needed.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">There is a systemd service file provided that can be used to automatically start the server.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">After you have set up the server, test it with curl by running:</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">curl -X POST -d '{ "user": { "id": "@john.doe:example.org",
"password": "passwordOfTheUser" } }' -H "Content-Type: application/json"
http://localhost:3000/_matrix-internal/identity/v1/check_credentials </span><br />
<br />
<span style="font-family: inherit;">This should return json with success: false (or true, if you provide real user credentials). </span><br />
<br />
<span style="font-family: inherit;">You can also do the same test from Synapse server by replacing localhost with the hostname of the account server.</span><br />
<br />
<br />
<h3>
Test the setup</h3>
<br />
<br />
Now you can test the whole pipeline. Open a new private browser tab, load <a href="https://riot.im/app">https://riot.im/app</a> , Sign in, change homeserver to your homeserver and enter valid user account credentials. You should be logged in as a new Matrix user on the homeserver.<br />
<br />
Note: homeserver name needs to be the real hostname of the server (https://matrix.example.org, not https://example.org).<br />
<br />
If something fails, check the Synapse log and systemd log for the REST PAM API.<br />
<br />
If you have questions or comment, I'm on <a href="https://riot.im/develop/#/room/#synapse:matrix.org">#synapse:matrix.org</a> and I'll try to help. <br />
<br />
<br />
<b>Good luck!</b><br />
<br />
- @cosmo:modeemi.fi<br />
<br />
<h3>
End notes</h3>
<br />
<ul>
<li>The REST Password provider is no longer maintained by its author. I'm tempted to fork and continue work on it unless someone else wants to. </li>
<li>HTTP request between homeserver and account server is not encrypted. If these are different computers and there is possibility of a MITM attack, It's recommended to encrypt the traffic. I tried stunnel first (failed as the password provider doesn't like self-signed certs) and finally got it working with autossh ssh tunneling. You could also use reverse http proxy, vpn, or anything like that.</li>
</ul>
coshttp://www.blogger.com/profile/15241919046329987814noreply@blogger.com0tag:blogger.com,1999:blog-5487136226070975417.post-50179778187032235112018-04-12T02:04:00.000-07:002018-05-09T00:39:50.119-07:00Gemini PDA hacker's guide<br />
<h2>
Gemini PDA hacker's guide</h2>
Here's a collection of hints on how to do stuff on your Gemini they don't tell in the official documentation.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://z-m-scontent-arn2-1.xx.fbcdn.net/v/t1.0-9/30581578_10155237097646594_7022232328793489408_o.jpg?_nc_cat=0&_nc_ad=z-m&_nc_cid=1388&oh=c195a6476b081816f71fb3b5725f7da4&oe=5B74DBC7" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="451" data-original-width="800" height="180" src="https://z-m-scontent-arn2-1.xx.fbcdn.net/v/t1.0-9/30581578_10155237097646594_7022232328793489408_o.jpg?_nc_cat=0&_nc_ad=z-m&_nc_cid=1388&oh=c195a6476b081816f71fb3b5725f7da4&oe=5B74DBC7" width="320" /></a></div>
<br />
<h3>
Linux warning</h3>
Just a warning for non-hacker users: The Debian Linux for Gemini is still early alpha (12. Apr 2018) and it's not usable for daily work yet. Xorg uses slow software rendering, keyboard mapping is not right, Fn-modifier doesn't work so you can't type some characters etc. The best way to use it is from another computer via SSH. This is why it's called technology preview.<br />
<br />
Anyway, make sure you have everything backed up and ready to reflash everything if something breaks. <br />
<br />
<h3>
Flashing the operating system</h3>
There is now official Linux version of the flasher tool provided by Planet. Use it.<br />
<h3>
Accessing Linux via USB networking</h3>
If you are in situation when you can't access Linux side of Gemini, you can get there by USB networking:<br />
<ol>
<li>Boot to Linux on Gemini</li>
<li>Connect USB cable</li>
<li>ssh gemini@10.15.19.82</li>
</ol>
This works directly on Ubuntu.<br />
<br />
<i>If DHCP doesn't work, you can do sudo ip addr add 10.15.19.1/24 dev usb0; sudo ip link set usb0 up</i><br />
<i>(usb0 can be renamed into something else by udev, check dmesg)</i><br />
<br />
<h3>
Linux setup and general hints</h3>
I've created a shell script to help setting up Gemini's Debian:<br />
<a href="https://github.com/gemian/gemini-scripts/blob/master/linuxsetup.sh">https://github.com/gemian/gemini-scripts/blob/master/linuxsetup.sh</a><br />
<br />
Usage is documented in the script itself, please read it.<br />
<br />
NOTE:<br />
<ul>
<li>GDM display manager from Gnome doesn't seem to work. Gray screen after logging in. Use the default display manager.</li>
<li>In Gnome the WiFi password dialog doesn't seem to work from top right corner menu. Open Settings / Network from menu, from there you can connect.</li>
<li>By default Debian uses connman for managing network connections. You might want to remove it and install NetworkManager which is more commonly used by desktops. </li>
<li>Don't try to mount the android system partition from Linux, at least in rw mode. Android won't boot after that and you'll need to reflash.</li>
<li>To get larger widgets for touch usage in Gnome run:<br /><pre>gsettings set org.gnome.desktop.interface scaling-factor 2 </pre>
<pre></pre>
</li>
</ul>
<h3>
Booting TWRP</h3>
It's possible to boot TWRP to install other distributions such as Sailfish on the Gemini. But booting it can be tricky. TWRP for Gemini can be found <a href="https://forum.xda-developers.com/gemini-pda/development/recovery-twrp-3-2-1-0-t3763855">here</a>.<br />
<br />
<ol>
<li>Copy the files you want to flash with TWRP to Android Download folder, sd card or other place accessible from TRWP.</li>
<li>Boot to Debian.</li>
<li>Copy the TWRP .img file to Gemini from your pc:</li>
<ol>
<li>scp twrp-geminipda-3.2.1-0.img gemini@10.15.19.82: </li>
</ol>
<li>sudo dd if=twrp-geminipda-3.2.1-0.img of=/dev/disk/by-partlabel/recovery</li>
<li>Power off the device.</li>
<li>Power on the device by holding ESC for until screen turns on. TWRP should launch.</li>
</ol>
NOTE: Next time you boot Android, the recovery partition will be wiped and you need to repeat this!<br />
<br />
<h3>
Installing Sailfish</h3>
It's now in "closed beta". Don't ask me where to download it from. Hopefully it will be public soon. Here are the steps to install it in it's current form:<br />
<br />
<ol>
<li>Install Android + Linux image, set up Debian (at least run resize2fs if you don't run the full script)</li>
<li>Make a backup of linux_boot: sudo dd of=linux-boot.img if=/dev/disk/by-partlabel/linux_boot</li>
<li>Download the sailfish .zip file to Android's Download directory. For some reason TWRP didn't find it if i just copied it to Android filesystem via Debian. MicroSD card should also work. </li>
<li>Boot TWRP.</li>
<li>Select the .zip from Downloads and install.</li>
<li>Power off and boot to Linux. Sailfish should start. The tutorial is a bit broken but you should get past it.</li>
<li>In Sailfish make a backup of linux_boot: dd of=sailfish-boot.img if=/dev/disk/by-partlabel/linux_boot</li>
</ol>
<h3>
Switching between Sailfish and Debian</h3>
Overwrite the linux_boot partition with image you made earlier. For example to get from Sailfish to Debian, use dd if=linux-boot.img of=/dev/disk/by-partlabel/linux_boot<br />
<br />
GUI for this would be nice.<br />
<br />
NOTE: You can access Sailfish sysroot from Debian at /.stowaways/sailfishos and Linux sysroot from Sailfish by mounting /dev/mmcblk0p29 in any directory.<br />
<br />coshttp://www.blogger.com/profile/15241919046329987814noreply@blogger.com0tag:blogger.com,1999:blog-5487136226070975417.post-69814540548947479182016-03-08T05:24:00.000-08:002017-12-14T03:42:34.967-08:00Why icons are needed in combat flight simulators<br />
By cos / VLeLv Icebreakers<br />
<br />
<b>UPDATE 22.2.2017: Found 2 more sources for eye angular resolution, updated calculations based on it. 0.3 -> 0.6 arc-minutes.</b><br />
<br />
In recent years it’s become a trend to force icons off in many multiplayer flight simulator arenas. The icons are said to be unrealistic and not needed for realistic simulation. As a real life pilot I have noticed that in real life you can see an aircraft several kilometers away and see it’s color, attitude and larger details. In flight simulators the same is not possible - you just see a pixel or few. <br />
<br />
Seeing your opponent as soon as possible is paramount in air to air combat. I decided to study the issue and found out that icons must be used if you want to fly realistic air combat. Icons are a compromise caused by limitations in current display technology. You can fly without icons, but then the visual detection and identification ranges are much shorter than in real life.<br />
<h2 dir="ltr" style="line-height: 1.38; margin-bottom: 6pt; margin-top: 20pt;">
Resolution comparison</h2>
Human eye is not a digital camera. It is analog device and has various smart features. The eyes move constantly and paint the image in our brain. Regardless of this, we can calculate a resolution for eyes for comparison.<br />
<br />
According to [1], human eyes have FOV of about 200 degrees horizontal and 130-135 vertical.<br />
<br />
There are several different values for the visual angle or one “pixel” in human eye.<br />
According to [2] it's 0.3 arc-minutes. According to [7] it's 0.6 arc-minutes.<br />
According to [8] (page 16 table) it's 0.63. <br />
<br />
Let's assume the correct value is 0.6 arc-minutes which is 0.01 degrees. If we limit our study to a more moderate usable FOV of 120 degrees in both directions, the human eye resolution is 144 megapixels [3].<br />
<br />
A average modern monitor has resolution of 2560*1200 pixels. This is about 3 megapixels. The FOV is usually about 75 degrees in a flight simulator. <br />
<br />
We can calculate how many pixels we would need in a monitor to match the eye angular resolution for 75 degree image: 7500*7500. That would be 56 megapixels.<br />
<br />
One more geometry exercise: How many “pixels” wide is an aircraft with wingspan of 15m at 10km distance?<br />
<br />
On a 2560*1200 monitor with 75 degrees horizontal FOV one pixel represents 0.0293 degrees [4].<br />
<br />
The aircraft is 0.0859 degrees wide. This gives 8.6 “pixels” with human eye [5]. You should be able to see its orientation and larger details quite well.<br />
<br />
With a monitor, this would give about 2.9 pixels [6]. You might be able to see aircraft color, but not orientation or other details. Even noticing the aircraft against terrain would be difficult.<br />
<br />
In summary:<br />
<br />
<div dir="ltr" style="margin-left: 0pt;">
<table style="border-collapse: collapse; border: none;"><colgroup><col width="208"></col><col width="130"></col><col width="136"></col></colgroup><tbody>
<tr style="height: 0px;"><td style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;"><b><br /></b></td><td style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<b><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">Human eye</span></b></div>
</td><td style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<b><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">Typical monitor</span></b></div>
</td></tr>
<tr style="height: 0px;"><td style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">Horizontal FOV (degrees)</span></div>
</td><td style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">200 (120 used in calculations)</span></div>
</td><td style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">75</span></div>
</td></tr>
<tr style="height: 0px;"><td style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">Resolution (pixels)</span></div>
</td><td style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
7500*7500</div>
</td><td style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">2560*1200</span></div>
</td></tr>
<tr style="height: 0px;"><td style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">Megapixels</span></div>
</td><td style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
144</div>
</td><td style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">3</span></div>
</td></tr>
<tr style="height: 0px;"><td style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">Angle of one pixel (degrees)</span></div>
</td><td style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">0.01</span></div>
</td><td style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">0.0293</span></div>
</td></tr>
<tr style="height: 0px;"><td style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">Size of 15m object at 10km (pixels)</span></div>
</td><td style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">8.6</span></div>
</td><td style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">2.9</span></div>
</td></tr>
</tbody></table>
</div>
<br />
With first generation VR headsets (OR CV1, HTC Vive, etc) the resolution issue is even worse - they typically have resolutions of about 1200*1200 which is less than half of the typical monitor used here. FOV is luckily better (110 degrees on both).<br />
<br />
<h2>
Peripheral motion detection</h2>
<h2>
</h2>
In addition to resolution one important factor is the peripheral motion detection. Eyes and brain are able to detect targets moving against background outside the high-resolution central vision area. When flying, this is very important as it allows noticing other aircraft when looking elsewhere.<br />
<br />
It's difficult to measure any significant numbers on the motion detection so it's excluded in this study. I also didn't find any data on if or how well this works on monitor compared to real life. At least the FOV is significantly smaller on monitor which naturally has an effect on target detection.<br />
<h2 dir="ltr" style="line-height: 1.38; margin-bottom: 6pt; margin-top: 20pt;">
Suggestions for simulator developers</h2>
<br />
As the chapters above explains, icons are mandatory for realistic air combat in visual range. Many simulators implement icons in sub-standard way, and they often either unrealistic (too long range / visible through cockpit) and ugly (line of text). <br />
<br />
Here’s my suggestion:<br />
<br />
Use these ranges as baseline. Make sure that in multiplayer situation all players have the same settings forced. Players should have option to turn off icons, if they want.<br />
<div dir="ltr" style="margin-left: 0pt;">
<table style="border-collapse: collapse; border: none;"><colgroup><col width="134"></col><col width="490"></col></colgroup><tbody>
<tr style="height: 0px;"><td style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">Range</span></div>
</td><td style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">Icon</span></div>
</td></tr>
<tr style="height: 0px;"><td style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">5km</span></div>
</td><td style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">Detect small aircraft</span></div>
</td></tr>
<tr style="height: 0px;"><td style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">3km <!--5km--></span></div>
</td><td style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">Show aircraft type and friend or foe</span></div>
</td></tr>
<tr style="height: 0px;"><td style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">1km<!--1km--></span></div>
</td><td style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">Show any other details as needed (weapon loadout, etc)</span></div>
</td></tr>
</tbody></table>
</div>
<br />
<ul></ul>
<br />
<ul>
<li>Make the icons look good. Use alpha blending to gradually display them. </li>
<li>Darkness, clouds, fog and sun glare should decrease the distances. </li>
<li>Icon must not be shown if the target is behind obstacle (mountain) or in other way not visible from cockpit. </li>
<li>Use visual means to display distance (a bar or arc instead of text). Distance is difficult to judge visually so this doesn’t have to be very accurate. </li>
<li>Keeping the target in view for longer period can increase the distances. For example you might be able to detect a target or identify it's type if you look at it for several seconds. </li>
<li>It is more difficult to notice targets against ground than against sky. Reduce the distances, if the target background is ground. </li>
<li> Large aircraft should be detected and identified from longer distance.</li>
</ul>
<ul></ul>
For an example of well working icons, take a look at World War 2 Online. See videos of the simulator to see how the icons work.<br />
<br />
Thanks for reading!<br />
<br />
<br />
<br />
<br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">[1] </span><a href="https://en.wikipedia.org/wiki/Human_eye#Field_of_view" style="text-decoration: none;"><span style="background-color: transparent; color: #1155cc; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: underline; vertical-align: baseline;">https://en.wikipedia.org/wiki/Human_eye#Field_of_view</span></a></div>
<br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">[2] </span><a href="http://www.clarkvision.com/articles/eye-resolution.html" style="text-decoration: none;"><span style="background-color: transparent; color: #1155cc; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: underline; vertical-align: baseline;">http://www.clarkvision.com/articles/eye-resolution.html</span></a></div>
<br />
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">[3] (120 / 0.01)^2</span></div>
<br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">[4] 75 / 2560</span></div>
<br />
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">[5] 0.0859 / 0.01</span></div>
<br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">[6] 0.0859 / 0.0293</span><br />
<br />
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">[7] <a href="https://en.wikipedia.org/wiki/Visual_acuity#Physiology">https://en.wikipedia.org/wiki/Visual_acuity#Physiology</a></span><br />
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;"><br /></span>
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">[8] <a href="http://www.icoph.org/dynamic/attachments/resources/icovisualacuity1984.pdf">http://www.icoph.org/dynamic/attachments/resources/icovisualacuity1984.pdf</a></span><br />
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;"><br /></span></div>
coshttp://www.blogger.com/profile/15241919046329987814noreply@blogger.com1tag:blogger.com,1999:blog-5487136226070975417.post-2499966938684940552013-02-12T05:11:00.000-08:002013-02-12T05:11:12.735-08:00Running Qt applications in AndroidDigia (owner of Qt) is working on official Android and iOS ports of Qt,
but meanwhile Qt applications can be built and run in Android using
Necessitas, an open source project which forks official Qt SDK.
Currently it is still in beta phase but is already usable. This document
has been written in early February 2013 so it may not be valid with
later Necessitas versions.<br />
<br />
<h1>
Setting up</h1>
<h2>
Necessitas SDK</h2>
Download and install Necessitas SDK from <a class="external-link" href="http://necessitas.kde.org/necessitas/necessitas_sdk_installer.php" rel="nofollow">http://necessitas.kde.org/necessitas/necessitas_sdk_installer.php</a><br />
<br />
Launch SDKMaintenanceTool from Necessitas. Select the desired API
level from Miscellaneous/Android NDK. You could here also install
Android SDK under Necessitas if you don't already have it installed.<br />
Note: While testing API level 10 seemed to work the best. Later
versions launched always in AVD even when a device was connected.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCky7TXomuV3hffVSegN7sb7uaquKwzHO7o_FgCoITQoP1MZstCt4uWfawMgJOVQUEnK9kflA2ilEOH4q4wLJj_QQm_mbta8dwZa2klIBeTQ2-E1GSf8VQKMS1L3xDr3eQFMyAAJUMnNLz/s1600/ProjectConfig.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyVal2UBeuixk6-VDVODkAXyJGpOt5fkxMj3FbBilEcQHTqHO0yfq0TY6jyCVosE_747XS5KsCXkFDgsoPk4FozXDtpYb4r8-c3rBRKYzxKOUgWhutly4dZKhryqLdN7rfXddMJ2ot7aph/s1600/MaintainSDK.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyVal2UBeuixk6-VDVODkAXyJGpOt5fkxMj3FbBilEcQHTqHO0yfq0TY6jyCVosE_747XS5KsCXkFDgsoPk4FozXDtpYb4r8-c3rBRKYzxKOUgWhutly4dZKhryqLdN7rfXddMJ2ot7aph/s320/MaintainSDK.png" width="284" /></a></div>
<br />
<h2>
Android SDK</h2>
Download and install Android SDK from <a class="external-link" href="http://developer.android.com/sdk/index.html" rel="nofollow">http://developer.android.com/sdk/index.html</a><br />
Load the Android SDK version you want to support using android_sdk/tools/android tool.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSNZY0bhJR9vyWfraMK7LcH5rPEapUKNbRZKAvNR30quFcZ2C-rdD6-MOtbqmamQDv8sFXscBfyNOECMI0Vac6PgxtVKURELdyZoZhyphenhyphensdgLj9AqeWXet9MveYLSBzpUgNJuXdIp6lXHfl-/s1600/AndroidSDKManager.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="172" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSNZY0bhJR9vyWfraMK7LcH5rPEapUKNbRZKAvNR30quFcZ2C-rdD6-MOtbqmamQDv8sFXscBfyNOECMI0Vac6PgxtVKURELdyZoZhyphenhyphensdgLj9AqeWXet9MveYLSBzpUgNJuXdIp6lXHfl-/s320/AndroidSDKManager.png" width="320" /></a></div>
<br />
<br />
<h1>
Building</h1>
Launch Qt Creator from Necessitas installation using QtCreator/bin/necessitas (not bin/qtcreator!)<br />
<br />
Open a project (existing one or create a new). A "Configure Project" dialog is shown.<br />
<br />
Set the project as "Necessitas Qt 4.8.2 for Android armv7a" project.
You can also select other platforms you might want to build to.<br />
<br />
Select from menu Tools | Options and Android page. Set "Android SDK
location" to the path you installed Android SDK. If you need to create a
Android Virtual Device (emulator) create it now.<br />
<br />
Some items were not autoconfigured in my install, so:<br />
<br />
Set x86 GDB to android-ndk/toolchains/x86-4.4.3/prebuilt/linux-x86/bin/i686-linux-android-gdb<br />
Set x86 gdbserver to android-ndk/prebuilt/android-x86/gdbserver/gdbserver<br />
Set OpenJDK location to /usr/bin/java<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikYNs6z-R3HmGrRaUvEy5CNmkhKmeRNS69YSD2jHQroBfnqh1h71mu0e1cMJ1RGdmMLHrCoOlPC5eMiGuzTeGNoeD4pkEKj1z7BdKiO0BRt8VWVRf6EbAnqgR519-E76TOJcBUYVw9U5vU/s1600/AndroidConfig.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="183" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikYNs6z-R3HmGrRaUvEy5CNmkhKmeRNS69YSD2jHQroBfnqh1h71mu0e1cMJ1RGdmMLHrCoOlPC5eMiGuzTeGNoeD4pkEKj1z7BdKiO0BRt8VWVRf6EbAnqgR519-E76TOJcBUYVw9U5vU/s320/AndroidConfig.png" width="320" /></a></div>
Click "Ok" to close dialog.
<br />
Click on build configuration icon in bottom left corner, above "Run"
button. Select the Necessitas build and Debug or Release, which one you
prefer.<br />
Click Projects (on the left side bar) -> Run Settings ->
Deployment -> Package configurations -> Android target SDK. Change
it to the android version you plan to use.<br />
In "Deploy configurations" you can select wheter to include Qt
libraries in your package or use Ministro to download libraries on
demand. Ministro seemed to work on device but not in AVD. Ministro is a
"library downloader" which will install the required Qt libraries to
Android so that they can be shared between Qt applications.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCky7TXomuV3hffVSegN7sb7uaquKwzHO7o_FgCoITQoP1MZstCt4uWfawMgJOVQUEnK9kflA2ilEOH4q4wLJj_QQm_mbta8dwZa2klIBeTQ2-E1GSf8VQKMS1L3xDr3eQFMyAAJUMnNLz/s1600/ProjectConfig.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="312" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCky7TXomuV3hffVSegN7sb7uaquKwzHO7o_FgCoITQoP1MZstCt4uWfawMgJOVQUEnK9kflA2ilEOH4q4wLJj_QQm_mbta8dwZa2klIBeTQ2-E1GSf8VQKMS1L3xDr3eQFMyAAJUMnNLz/s320/ProjectConfig.png" width="320" /></a></div>
Press Ctrl-b to build the application.<br />
<h1>
Running</h1>
Press Ctrl-r to run the application. Application should start in device (if connected) or in AVD.<br />
Sometimes i got error "Found some build errors in current task. Do
you want to ignore them?" but ignoring errors worked and the application
would run nicely.<br />
<h1>
<a href="http://www.blogger.com/blogger.g?blogID=5487136226070975417" name="RunningQtapplicationsinAndroid-Conclusion"></a>Conclusion</h1>
The Necessitas SDK is clearly still beta quality, but already can be
used to port existing Qt applications to Android or create Android apps
from scratch. Source changes are normally not needed at all. Naturally
UI's may need adjustment for touch interface if they have been
implemented on desktop. Applications built<br />
using Necessitas can be and have been published in Google Play store.<br />
<br />
coshttp://www.blogger.com/profile/15241919046329987814noreply@blogger.com0tag:blogger.com,1999:blog-5487136226070975417.post-53042847247413989732012-01-29T07:36:00.000-08:002014-03-24T01:46:32.550-07:00State of Linux video editorsI need to edit some videos randomly. Nothing professional, mostly some clips from a GoPro or cell phone video camera. I need to cut & paste clips and add music soundtrack. This should be the basic feature set of any video editor, but unfortunately most of them fail one way or another.<br />
<br />
See also <a href="http://coshacks.blogspot.com/2010/11/state-of-linux-audio-players.html">State of Linux audio players</a><br />
<br />
Here is a comparison of few free video editors available. They are tested on Ubuntu.<br />
<br />
<h2>
Kdenlive (tested march 2014)</h2>
Current winner. Does all I need without issues. UI could use some polishing, but good enough.<br />
<br />
<h2>
OpenShot (tested summer 2013)</h2>
<br />
Decent video player. Crashes randomly but is still usable. Ui misses some features, such as moving a clip to end of previous clip which makes editing long videos painful. Also there's still no way to select multiple clips.<br />
<br />
<h2>
PiTiVi 0.15 (tested jan 2012)</h2>
<br />
Mediocre but not bad UI. Preview becomes so slow that it's practically a slideshow with multiple 720p videos. Crashes frequently. Development is active but work is done for next version based on gstreamer editing services. I had a problem with rendered files having zero size, but this was fixed by removing gaps from the project. Many thanks to thiblahute on #pitivi.<br />
<br />
<h2>
Cinelerra (tested spring 2011) </h2>
Crashes so often that it's useless. UI looks like it's from 90's.<br />
<br />
<h2>
VLMC (checked summer 2013)</h2>
<br />
Spawned from VLC media player. Looks promising but i suppose develoment is dead as the official repository doesn't have packages for current or previous Ubuntu release.<br />
<br />coshttp://www.blogger.com/profile/15241919046329987814noreply@blogger.com0tag:blogger.com,1999:blog-5487136226070975417.post-33941639238623287992012-01-26T01:40:00.001-08:002012-01-26T02:35:09.205-08:00Saving all channels in irssiNormally it's only possible to save channels one by one in irssi. This is quite annoying. Here's a small script to save 'em all (thanks pulk!):<br /><br />/alias channelsaveall script exec foreach my \$channel (Irssi::channels()) { Irssi::command("channel add -auto \$channel->{name} \$channel->{server}->{tag} \$channel->{key}")\;}<br /><br />Copy-paste that on a single line and then just /channelsaveall.coshttp://www.blogger.com/profile/15241919046329987814noreply@blogger.com0tag:blogger.com,1999:blog-5487136226070975417.post-22617944580266766202011-01-08T12:48:00.000-08:002011-01-08T13:30:49.598-08:00How NOT to add force feedback to your flight stickI want to add force feedback support to my CH fighterstick. Currently no one makes consumer-priced force feedback flight sticks, so I can't buy one.<br /><br />This project started a few years ago and has lasted over several iterations.<br /><br /><span style="font-size:130%;">First fail</span><br /><br />The first version had a large RC car servo connected to the stick. For prototyping i implemented force feedback only on elevator axis of the stick. I bought a serial servo controller and a usb serial dongle to control the servo and wrote a plugin for X-Plane to control it. It worked well and caused good force, but the stick could not be "relaxed" at all. In slow flight i needed to push or pull the stick quite hard to move it (and the servo). High-speed aerobatics felt really good though, so i knew i was up to something. Unfortunately this was not realistic enough so i ditched this prototype.<br /><br /><span style="font-size:130%;">Second fail</span><br /><br />I found a few old printers from electronic waste bin at work and looted them for parts. They contained many usable parts such as motors, axles, gears and belts.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBnn2-j0FXZ81lP3yyw048JROrsJbNFnjHXw5yEC_2qybr7nkh9cSfNw8N1mqE5ABIPslluwvYgZPzEshXUoSfsdxkYU0V04EuNXsHMFKWpQzXKFsOu4jk3mlIVZNRoJ01v5x7SyHVXeij/s1600/ff_rojua.jpg"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBnn2-j0FXZ81lP3yyw048JROrsJbNFnjHXw5yEC_2qybr7nkh9cSfNw8N1mqE5ABIPslluwvYgZPzEshXUoSfsdxkYU0V04EuNXsHMFKWpQzXKFsOu4jk3mlIVZNRoJ01v5x7SyHVXeij/s400/ff_rojua.jpg" alt="" id="BLOGGER_PHOTO_ID_5559926352423737618" border="0" /></a><br />I set up one motor (don't know the specs, maybe 300 size) with a belt to a larger gear to get a sensible gear ratio. To control it i bought a Phidgets USB motor controller board.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-sjFSXWYDnwgkTWH5fnPPn1J7_yoYtWrCqdVMt9KNjI3HQMNhnc_uXSIBrvxfkcqGZ0kgkLKjzCDPxHdgZAUn35KwwhYfJvULLMQHMhwA_Nda8A_JQknvDC7S0hkwqyb9-VEPq6FH6sBt/s1600/ff_toka.jpg"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-sjFSXWYDnwgkTWH5fnPPn1J7_yoYtWrCqdVMt9KNjI3HQMNhnc_uXSIBrvxfkcqGZ0kgkLKjzCDPxHdgZAUn35KwwhYfJvULLMQHMhwA_Nda8A_JQknvDC7S0hkwqyb9-VEPq6FH6sBt/s400/ff_toka.jpg" alt="" id="BLOGGER_PHOTO_ID_5559926358406759442" border="0" /></a><br />Unfortunately this time controlling the force was difficult - with low power it just made noise and with large it suddenly started moving rapidly. Also the maximum force was not large enough. The belt slipped sometimes, no matter how i adjusted it. It wouldn't work so i ditched this one too.<br /><br /><span style="font-size:130%;">Third fail<br /></span><br />This time i decided to make a more powerful version of the last prototype. I got some stuff meant for RC planes: a gearbox and a Speed 400 motor. They fit perfectly together and felt mechanically strong.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmAMGnzUGQcP8Qxv1o8bmYtXTfElGKNqIwYGFMMqoiFNgBUR40k7fd-xpfg9hvSOaGq5SLo2LyKjcj6sCuJ8tzJIkHDyMf4PPdSR1iI4DVIg1opc4ooXxXSfkHh7eLoIOYmHKobeHVBM6D/s1600/ff_viimenen.jpg"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmAMGnzUGQcP8Qxv1o8bmYtXTfElGKNqIwYGFMMqoiFNgBUR40k7fd-xpfg9hvSOaGq5SLo2LyKjcj6sCuJ8tzJIkHDyMf4PPdSR1iI4DVIg1opc4ooXxXSfkHh7eLoIOYmHKobeHVBM6D/s400/ff_viimenen.jpg" alt="" id="BLOGGER_PHOTO_ID_5559922937056901234" border="0" /></a><br />This time there was plenty of power. I hooked up a multimeter to monitor current use and the largest current measured in beginning of tests was 19A. I decided to not to monitor current longer as the multimeter was meant for currents only up to 15A. After a little tuning the thing seemed to work! I removed the centering spring from fighterstick and did some additional testing until smoke started pouring out of the motor. Third fail.<br /><br />Clearly electric motor is not the way to go. If i used a larger motor, the current would go even higher and over the limitations of the controller board. Using larger gear ratio would cause the same problem as with servo - it would be impossible to cause small or no force.<br /><br /><span style="font-size:130%;">Next fail</span><br /><br />Pneumatics? Hydraulics? Stay tuned!coshttp://www.blogger.com/profile/15241919046329987814noreply@blogger.com0tag:blogger.com,1999:blog-5487136226070975417.post-29821176580446344612010-12-10T13:28:00.000-08:002010-12-10T13:53:26.848-08:00ExtPlane Panel for X-PlaneI bought a touchscreen monitor to use in my simpit a while ago. Unfortunately after that I noticed that X-Plane's external cockpits don't support any input - I can't press buttons and turn knobs using finger.<br /><br />I almost got dismotivated by that but decided to do what any of us would do: write a plugin for X-Plane to support input from external apps and software to run my panel.<br /><br />The plugin part lives inside X-Plane and starts a TCP server to get commands from. Currently it supports only reading and writing of datarefs (simulation variables) but button support is coming soon. The plugin's source code can be found at:<br /><br /><a href="https://github.com/vranki/ExtPlane">https://github.com/vranki/ExtPlane</a><br /><br />The panel, called ExtPlane panel is a "client" for ExtPlane plugin. It displays a 2D panel showing various instruments. It can read and write X-Plane's datarefs via ExtPlane and display any information on screen. Currently it's aimed for making sharp, antialiased scalable vector graphic displays (as opposed to X-Plane's bitmap based) but in future "anything" can be done. Instruments can be added, moved and removed using mouse just like in X-Plane's Plane Maker.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgASOUnJ3lwuIaH7jwdtoEL0dKbGdUGZE3Fkip2R2y5Or8iHxRUwv6vz6d2EEUE_R8HNCSWaOuOMjkzPsSe9EMi-ZoGhE1OoyjXQ0IZEyBmIEU3exJOghV9vyT_aPRLhBjCrAJjQjBXyjWG/s1600/P1330322.JPG"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgASOUnJ3lwuIaH7jwdtoEL0dKbGdUGZE3Fkip2R2y5Or8iHxRUwv6vz6d2EEUE_R8HNCSWaOuOMjkzPsSe9EMi-ZoGhE1OoyjXQ0IZEyBmIEU3exJOghV9vyT_aPRLhBjCrAJjQjBXyjWG/s400/P1330322.JPG" alt="" id="BLOGGER_PHOTO_ID_5549171262627952594" border="0" /></a>The panel is written in Qt, so naturally i wanted to see if it would run on my Nokia N900 cell phone. As you can see, it runs without any modifications. Also there are no wires - The N900 communicates with X-Plane over WLAN connection. On the left is a airspeed gauge and on the right a compass. Currently they are the only instruments available, but it's very fast to write new ones using the framework provided. The airspeed indicator is 40 lines of code and compass is 37. The instruments can have configuration UI so that for example you can set the units used in airspeed indicator. I'll probably soon write some "generic" instruments that can show value of any dataref, just like in X-Plane.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTmenEwA0x6_surYITN56qKF1kkVn9R1KUFsL_nmb_LD_DpBuLWxyL1Nc7scxoyafT19SMUy3YiUuuYWzWz9me4tVljCjW_APZxG24pEBpteLXKAanYrRmfxTrgsYpPy3nmPeQ-TCU7xj0/s1600/P1330327.JPG"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTmenEwA0x6_surYITN56qKF1kkVn9R1KUFsL_nmb_LD_DpBuLWxyL1Nc7scxoyafT19SMUy3YiUuuYWzWz9me4tVljCjW_APZxG24pEBpteLXKAanYrRmfxTrgsYpPy3nmPeQ-TCU7xj0/s400/P1330327.JPG" alt="" id="BLOGGER_PHOTO_ID_5549171264300902050" border="0" /></a>All instrument graphics are vector graphics so they can be freely scaled and rotated while keeping graphics crystal clear. You can run the panel in portrait or landscape mode, or even with any angle.<br />Sources for ExtPlane-Panel can be found at:<br /><br /><a href="https://github.com/vranki/ExtPlane-Panel">https://github.com/vranki/ExtPlane-Panel</a><br /><br />If you're not a developer and don't know how to build from sources, ExtPlane is not ready for you just yet. I'll need to add more instruments and do some more finishing until I'll start making binary releases for general public.coshttp://www.blogger.com/profile/15241919046329987814noreply@blogger.com0tag:blogger.com,1999:blog-5487136226070975417.post-5468410685721730402010-12-03T01:20:00.000-08:002010-12-03T01:45:35.372-08:00Streaming live DVB using VLCThe problem: i needed to stream live DVB broadcast from home to the outside world. Limiting factors are bandwidth (1Mbps up) and CPU (Core 2 Duo @ 1.8Ghz). I found out a lot of guides on how to do it using VLC, but only a few worked. Source for the video in this case is a USB DVB-C tuner, but any DVB tuner which VLC sees should work.<br /><br />After a lot of tuning, the best result was obtained with the following command line:<br /><br />cvlc -v channels.conf \<br />--sout \<br />'#transcode{vcodec=theora,venc=theora,acodec=null,deinterlace,vb=700,fps=16,threads=2,scale=0.7}:standard{access=http,mux=ogg,dst=:8081}'<br /><br />This will give a average of 700kbps ogg theora stream scaled a bit down and with 16fps<br />frame rate. This stream doesn't include audio, so you'll probably want to set acodec=vorbis<br />and audio bitrate (ab=) something sensible.<br /><br />Stream is served at port 8081 and can be viewed locally at url http://localhost:8081/ using VLC or other video player. You'll need the channels.conf file (google how to obtain it). You can also use vlc instead of cvlc to get GUI. You can change channel from playlist window. This can probably also be done on command line somehow.<br />Set threads= to number of cores in your CPU. On Core 2 Duo it's naturally 2.<br /><br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4iCN6Jcj_yGKq4vmDNhq6p2pX0JU2LFcilnuQolckTekoQVNPlrx7ixig2PvUCrhUbsq9Iuajx1L4yTFAKd0V7qvYjUFt2B_yYcXhQJnrtWpCgpAkpJcl3T8_EH094N0WzWg31LOj232l/s1600/dvb-screenshot.png"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 280px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4iCN6Jcj_yGKq4vmDNhq6p2pX0JU2LFcilnuQolckTekoQVNPlrx7ixig2PvUCrhUbsq9Iuajx1L4yTFAKd0V7qvYjUFt2B_yYcXhQJnrtWpCgpAkpJcl3T8_EH094N0WzWg31LOj232l/s400/dvb-screenshot.png" alt="" id="BLOGGER_PHOTO_ID_5546385279894770802" border="0" /></a><br />The quality can be described as "youtube-like". You don't want to watch Avatar on this but for some basic stuff such as sports, talkshows and news it's way better than no stream at all. Naturally if you have more bandwidth, increase the vb parameter. With 1M uplink 800kbps resulted in jerky video, so 700 is pretty close to optimum.<br /><br />Notes on some other codecs: x264 encoder didn't obey the bitrate parameter at all and was unusable. ffmpeg created corrup video (random bright colors et all) so i decided to use ogg theora which worked really well.coshttp://www.blogger.com/profile/15241919046329987814noreply@blogger.com0tag:blogger.com,1999:blog-5487136226070975417.post-3643991817999189422010-11-05T06:23:00.000-07:002012-08-01T03:24:30.869-07:00State of Linux audio players(Last updated: 2.8.2012)<br />
<br />
I've been looking for a good music player for advanced users. I have a large music collection (hundreds of gigs) on a server which is mounted over sshfs. My requirements are<br />
<br />
- iTunes like UI based on tags - NOT file names and directories.<br />
- Ability to scan the large connection over and sshfs share in reasonable time.<br />
- Must not forget the whole database if the network share is down temporarily.<br />
- Stay responsive. All programmers know that you shouldn't do any potentially long operations in UI thread, but most players seem to do so.<br />
- Ability to edit tags. A large part of collection is either untagged or wrongly tagged.<br />
<br />
Wishlist:<br />
- Allow multiple locations to be selected for library.<br />
- Some kind of indicator about what the scanner is doing. Ability to force re-scan of collection.<br />
<br />
And now to the players:<br />
<br />
<span style="font-weight: bold;">Rhythmbox (Updated 30.7.2012)</span><br />
<br />
The Gnome's default music player. UI is pretty slick and nice. Works pretty well, except tagging files doesn't work at all (Unable to save song information - Timeout was reached). And sometimes grays out a little bit.<br />
If the network gets congested, Rhythmbox's UI gets totally confused and grays out. Looks like file operations are done in UI thread. This is the player i use the most, as on good day it can scan the full collection and be usable.<br />
<br />
<span style="font-weight: bold;">Amarok 2.5.0</span><br />
<br />
Started scanning the library nicely and UI stays responsive. After 6 hours the <br />
scanner progress bar hasn't moved at all and there are 0 tracks in collection.<br />
<br />
<span style="font-weight: bold;">Quod Libet</span><br />
<br />
I selected the library directory and hit "Reload Library". 0 files found. Maybe it doesn't understand symlinks?<br />
Ok, let's try playing from file system. I enter the library directory and.. The player grays out for a couple of minutes. The UI is very slow.. maybe it's scanning after all? I'll never know as i kill it.<br />
<br />
<span style="font-weight: bold;">Exaile</span><br />
<br />
I add the library directory. Ui grays out just a little bit but says "Scanning collection..".<br />
After a while it still is scanning and has found 0 songs. The Radio tab seems to work and i can play a Shoutcast radio while waiting. UI is slow, so looks like some processing is done in the UI thread.<br />
I left exaile scanning for the weekend. On monday morning it was still scanning at 0%.<br />
<br />
<span style="font-weight: bold;">Banshee (Tested 23.11.2011, Ubuntu Oneiric)</span><br />
<br />
UI seems very nice and possibly even better than Rhythmbox so this player gives a lot of hope. I added the collection directory and the app started scanning very nicely. Now, after almost 24 hours it displays 78%, uses 3.3 gigabytes of memory and is very unresponsive.<br />
<br />
<b>Nightingale </b><span style="font-weight: bold;">(Tested 30.7.2012)</span><br />
<br />
Download link and the ppa advertised do not work, so unable to test.<br />
<br />
<b>Clementine (Tested 2.8.2012)</b><br />
<br />
UI looks nice and might be a good player if it works. Unfortunately it doesn't. It starts updating library and gets to 99% soon.. but the percentage drops to 85% and then back up.. until it repeadetly drops down. During scanning it doesn't add anything to library to be playable so it's impossible to see if it is really progressing. To give it a chance i left it running overnight. After over 24 hours of scanning it is "Updating library 98%" and i decide to quit it.<br />
<br />
<span style="font-weight: bold;">Conclusion</span><br />
<br />
They all suck, more or less. Let me know if you find any good player to be added here. I'll try to update this post whenever i test new players.coshttp://www.blogger.com/profile/15241919046329987814noreply@blogger.com1tag:blogger.com,1999:blog-5487136226070975417.post-17842370829877247272010-08-08T07:43:00.000-07:002010-08-08T08:02:40.564-07:00Cross-compiling Qt applications for Windows, the easy wayFor a while I've been looking for a way to cross-compile my Qt app for Windows on Linux. I don't have any Windows PC's at home or at office, so native build is out of question. There are several instructions how to do this, but they involve cross-compiling the whole Qt from source and a lot of other manual work.<br /><br />I found and easier way using Wine.<br /><br />1. Install Nokia Qt SDK for Windows using Wine. It should install fine.<br /><br />2. Create a build script that does something like this:<br /><br />export QTDIR=$HOME/.wine/drive_c/Qt/2010.04<br />export Path=C:\\windows\\system32\\\;C:\\windows\\\;C:\\windows\\system32\\wbem\;C:\\Qt\\2010.04\\mingw\\bin\\\;C:\\Qt\\2010.04\\qt\\bin\\\;\<br />C:\\Program\ Files\\NSIS\\<br />cd <project>app_directory<br />wineconsole --backend=curses qmake.exe<br />wineconsole --backend=curses mingw32-make.exe<br /><br />3. That's it! You should now have a working .exe in yout project directory. You can run it using wine.<br /><br />When shipping your application, you need to include the required mingw and Qt DLL's with it. For example:<br /><br />$QTDIR/qt/bin/mingwm10.dll<br />$QTDIR/qt/bin/libgcc_s_dw2-1.dll<br />$QTDIR/qt/bin/QtCore4.dll<br />$QTDIR/qt/bin/QtGui4.dll<br />.. and any other DLL's your app needs. Remember to use the d-versions if you build your app in debug mode.<br /><br />For SQL drivers install them into directory named sqldrivers in the directory where your .exe is installed. For SQLITE the DLL is $QTDIR/qt/plugins/sqldrivers/qsqlited4.dll.<br /><br />If you want to create an installer, I can recommend the open source <a href="http://nsis.sourceforge.net/Main_Page">Nullsoft installer (NSIS). </a></project>coshttp://www.blogger.com/profile/15241919046329987814noreply@blogger.com0tag:blogger.com,1999:blog-5487136226070975417.post-30578237585259701652010-05-31T03:46:00.001-07:002010-05-31T04:15:07.154-07:00RC Hornet first flightRecently I bought a F-18 Hornet model from Bananahobby.com. It's a ARF foamie which is pre-painted and looks pretty good. It has a brushless electric ducted fan motor and a 4 cell LiPo battery pack. The model took a few hours to build, most time taken by gluing wings and stabilizers and installing servo wires. The kit had a 2.4Ghz radio included and installed, but i opted to use my own DX7 with it's 7 channel receiver. If you or your friends need a cheap 4 channel RC radio set at Tampere area, let me know. I haven't tested if the receiver works with DX7 yet.<br /><br />I also decided to connect left and right ailerons to different channels in receiver and thus making them flaperons with DX7's mixing functions.<br /><br />Yesterday was the first flight day. First i flew with a full size sailplane (LS-8) and then made some preparations and waited for a rain shower to go away. When the rain stopped, weather was semi ok for first flight - there was some light wind but no strong gusts.<br /><br /><br /><img style="width: 854px; height: 640px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK7qd5q3CdJcjx3eAjvVkb1uTHsZqa5CYnTYYlYsbKU68pwQjUA-p1T9aIhtfxARFy0csf-qFZeo58nvCAOyHZjGAFcVyxID-kNi2b8fzMHNYZ-BS6xnY3IeDDaX5z2sNldbbe9Qpz1iT9/" /><br />Pre-flight photo.<br /><br />The flights went fine. I flew 3 flights, totalling maybe 15 minutes. I was alone at the airfield so there are no in-flight photos, sorry. The model has plenty of power - maybe close to 1:1 power to weight ratio. Cruising can be done at half throttle. It's also surprisingly stable - center of gravity is so low that it tends to correct any bank by itself. It's also pretty agile and looks great in flight. It's not easy to fly though - for example stalling can cost 10 meters of altitude easily. Landings must be done pretty carefully and at low angle to avoid hitting ground tail first.<br /><br />I tried using flaps (both up and down) but they caused huge trim change and almost losing control so i didn't use them during landings yet.<br /><br />The ESC that came with the kit doesn't warn about low battery by cutting power like ESC's usually do. This one just outputs less power which came as a surprise to me and caused unscheduled landing. I guess I'll have to have a stopwatch to estimate flight time left.<br /><br /><br /><img style="width: 1012px; height: 759px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_bE6LvIguBIO10F4Af1qdyn7m-20JSRcjx1SUZos8gvp6bjfyQQ78S0-MJrsEtsPz1b3qU2PQtqlo-GAwEFkAT4w-lEWhXVzUkGhFkb02XgeUIuz0nje7IkIVHasaNpfCuWW6F5SDp2Lc/" /><br />Construction pic. Electronics are behind the plastic door which is glued into the fuselage.<br /><br /><br /><img style="width: 853px; height: 638px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgba1ccdPK96vPRfwDvih6E7KpxjRxQLc-FkCcyrHkEHuoLowPinf4OQOY4m-oXRFXeRKTC1W_ucjE3EtN81u6_FzprVQvw0c4l_SOh2ubldS7sH3Mo0Kem0lfmafvRS1vfHye-U3H2I3KH/" /><br />Looks like I'll have to buy a larger car if I want to get larger models than this.<br /><br /><br />Link to the model (it's on sale now!):<br /><br /><a href="http://www.bananahobby.com/1940.html">http://www.bananahobby.com/1940.html</a>coshttp://www.blogger.com/profile/15241919046329987814noreply@blogger.com0tag:blogger.com,1999:blog-5487136226070975417.post-33953945520074920372010-02-26T04:40:00.000-08:002015-07-23T08:58:21.139-07:00Converting music to mp3 in placeI bought a new car stereo a while ago. I'm not going to specifics about it as this is not a car hifi blog. What's interesting is that the player can play mp3's from CD, USB memory and SD card.<br />
<br />
My digital audio collection is mostly in ogg and flac format for better quality/file size and the player can't handle them. I tried to find a nice solution to mass convert files from ogg/flac to mp3 but none of them were satisfactory so i wrote my own script:<br />
<br />
<br />
<span style="font-family: courier new;">#!/bin/bash<br /># Convert flac & ogg audio to low quality mp3 for mobile playing.<br /># By Ville Ranki <ville .ranki="" iki.fi=""><br /><br />find -type f -name "*.flac" -o -name "*.ogg" | while read file<br />do<br />outfile=`echo $file | sed 's/\.[^\.]*$/.mp3/'`<br />echo "Converting $file to $outfile"<br />gst-launch-1.0 filesrc location="$file" ! decodebin ! audioconvert ! lamemp3enc target=quality quality=4 ! id3v2mux ! filesink location="$outfile"<br /><br />if [ -f "$outfile" ];<br />then<br /> echo "Removing original $file"<br /> rm "$file"<br />else<br /> echo "Error: File $outfile was not created."<br />fi<br /><br />done<br /></ville></span><br />
<br />
<br />
This script will find recursively all files in current directory, convert them to mp3's (while preserving id3 tags) and delete the original files. It preserves directories as they are - my car player should be able to browse by directory although i haven't figured out how to do so.<br />
<br />
I use it by copying wanted music to a temporary directory, run the script in the directory and copy the results to usb stick or other media.<br />
<br />
Make sure you have all the commands installed before running the script, such as gst-launch-0.10. Also don't run the script where the original collection is or you'll lose it. Copy files somewhere else first.<br />
<br />
I hope this is helpful for others with the same problem.<br />
<br />
(Updated 23.7.2015 for gst-launch-1.0 and simplified the script at the same time)coshttp://www.blogger.com/profile/15241919046329987814noreply@blogger.com2tag:blogger.com,1999:blog-5487136226070975417.post-84978200997379119902009-12-13T12:30:00.000-08:002009-12-13T12:42:50.298-08:00Sergei gunsight without the coverI'd like to add a couple more photos about the gunsight and how it looks without the cover. The cover reduces some glare and is good for anti-aircraft guns but for aircraft it may block visibility too much so most ww2 aircraft have the gunsight without any cover.<br /><br />Well, here are the photos:<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8DfgKzQFHpwpfHXL1cQF0b-zJmoNA9TElblpl35aGCywRdpyQ1szijfIaaPwavUX6PKm3i7y-xcbT3X6imzpH29kxPpLghZG8XBNGoo4qlIk83rJbskbavBWSY7MfAQ_SzHkmSLOPtwQO/s1600-h/20091213_001.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 225px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8DfgKzQFHpwpfHXL1cQF0b-zJmoNA9TElblpl35aGCywRdpyQ1szijfIaaPwavUX6PKm3i7y-xcbT3X6imzpH29kxPpLghZG8XBNGoo4qlIk83rJbskbavBWSY7MfAQ_SzHkmSLOPtwQO/s400/20091213_001.jpg" alt="" id="BLOGGER_PHOTO_ID_5414822137280306034" border="0" /></a><br />Side view. The reflector glass is in 45 degree angle.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVWmRwMAgqyIdcUvtYW6M66GExYn2FWtr2na23uhDRjiz9k3pKpgLxs8gGO4TPlWwOMewF4dcjnLXnVN6b29y-qKYIzQp3JIozoFTlmfaAIdUplQyOuzpPlI1gsYSusLh9VaQte5LRLzV7/s1600-h/20091213_002.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 225px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVWmRwMAgqyIdcUvtYW6M66GExYn2FWtr2na23uhDRjiz9k3pKpgLxs8gGO4TPlWwOMewF4dcjnLXnVN6b29y-qKYIzQp3JIozoFTlmfaAIdUplQyOuzpPlI1gsYSusLh9VaQte5LRLzV7/s400/20091213_002.jpg" alt="" id="BLOGGER_PHOTO_ID_5414822142315312642" border="0" /></a>Another view<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSVfCUodDahHCkV3ph7eibTOY0lTUNej_ektpxDszvCD_uM3CctofboQ5XYERrrVd5LFLIrtpKvA8mbyjfLVlDD87I3rkyLSgZKJG8pkpHgv90bSYV83PuEnGUX1v1l55hexwxA7xQlskq/s1600-h/20091213_004.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 225px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSVfCUodDahHCkV3ph7eibTOY0lTUNej_ektpxDszvCD_uM3CctofboQ5XYERrrVd5LFLIrtpKvA8mbyjfLVlDD87I3rkyLSgZKJG8pkpHgv90bSYV83PuEnGUX1v1l55hexwxA7xQlskq/s400/20091213_004.jpg" alt="" id="BLOGGER_PHOTO_ID_5414822147870354434" border="0" /></a>Looking through the gunsight.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3B4NmV0iCQ3bnSjfd0CNezFfAHQ87SR6nsmrMuFCCRgHm53Ux48SzpZLUe7nTw4lq58Mx3XRzJ5HK81NmK_kt58xgx9C41HLDjv4eVGwgfsIL0EfwdRi6Qy9UIcJxkgphOu4_08VRXEiu/s1600-h/20091213_005.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 225px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3B4NmV0iCQ3bnSjfd0CNezFfAHQ87SR6nsmrMuFCCRgHm53Ux48SzpZLUe7nTw4lq58Mx3XRzJ5HK81NmK_kt58xgx9C41HLDjv4eVGwgfsIL0EfwdRi6Qy9UIcJxkgphOu4_08VRXEiu/s400/20091213_005.jpg" alt="" id="BLOGGER_PHOTO_ID_5414822156041823138" border="0" /></a>Looking through, from longer distance<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRhc4aXHTDwqm9FMiosmBPF5RhR0A0vWdpOCaVVXIJ7y5EcUknf596Xg_C4GvAXTH8xjvaW-1tfTzJHj3meP_Wc5nEmbBEEk4jWeEcOpARNdbL9yrOMfnwXDF9dC3DyTt1VCiiePmbfbOD/s1600-h/20091213_006.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 225px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRhc4aXHTDwqm9FMiosmBPF5RhR0A0vWdpOCaVVXIJ7y5EcUknf596Xg_C4GvAXTH8xjvaW-1tfTzJHj3meP_Wc5nEmbBEEk4jWeEcOpARNdbL9yrOMfnwXDF9dC3DyTt1VCiiePmbfbOD/s400/20091213_006.jpg" alt="" id="BLOGGER_PHOTO_ID_5414822164221028530" border="0" /></a><br />This is what it looks like from top of the gunsight. It shows the reticle through the glass and inverted reflection.<br /><div style="text-align: left;"><br />For the simpit i'll naturally remove the cover. This way the gunsight looks just like any WW2 fighter's gunsight. At least il2 supports removing any on-screen sights so maybe i'll even get to play some games with hardware gunsight. Otherwise it'll just look cool :-)<br /><br />Btw notice how the size of reticle is always the same regardless of the distance. That's how the reflection gunsight (and modern HUDs) are supposed to work.<br /><br />Next step is to mount the thing to the simpit. Let's see when that happens, as i have some other projects (hacks) to do such as the RC 109 used as practice target in photos above.<br /><br /></div></div>coshttp://www.blogger.com/profile/15241919046329987814noreply@blogger.com0tag:blogger.com,1999:blog-5487136226070975417.post-76163042681413174952009-12-11T15:18:00.000-08:002009-12-11T15:34:42.564-08:00Sergei gunsight illuminatedLong time no post.<br /><br />Today i built a light for the <a href="http://coshacks.blogspot.com/2008/08/sergei-gunsight.html">sergei gunsight </a>i've had for some time. It illuminates the reticle so it's more visible in various lighting conditions. Here's the photos:<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSM3E225atsFcgBWYV8f1mjrRQCiURrpjGeY5-Ne5u_rM36KTV6tuUd2kP4TmWWR71tejqY96CCJ08hbuEzKF-M-8kcwo1-SWSUxsLrvEX_bpSaJ2KSE90tSnExfBzi7tOxit5W2xPVOjx/s1600-h/20091212_002.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 225px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSM3E225atsFcgBWYV8f1mjrRQCiURrpjGeY5-Ne5u_rM36KTV6tuUd2kP4TmWWR71tejqY96CCJ08hbuEzKF-M-8kcwo1-SWSUxsLrvEX_bpSaJ2KSE90tSnExfBzi7tOxit5W2xPVOjx/s400/20091212_002.jpg" alt="" id="BLOGGER_PHOTO_ID_5414123187131956498" border="0" /></a>Lamp assembly is mounted on the bottom of the gunsight. The assembly is actually a plastic cap from a Pisang Ambon liquer bottle.<br /></div><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE0rdLuLFvlWbPC2uiraPXCs7dlPRzTE_jUCIaScD4NLJsMeu47AXz-8RNDiR0RtXHviN215Tmt_FkOiN_He_wHKuohkAM503QSL44BXDdUOF2A-BYHZ8WPIY_XWX_haLMAOXtN_qgB8SX/s1600-h/20091212_004.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 225px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE0rdLuLFvlWbPC2uiraPXCs7dlPRzTE_jUCIaScD4NLJsMeu47AXz-8RNDiR0RtXHviN215Tmt_FkOiN_He_wHKuohkAM503QSL44BXDdUOF2A-BYHZ8WPIY_XWX_haLMAOXtN_qgB8SX/s400/20091212_004.jpg" alt="" id="BLOGGER_PHOTO_ID_5414123199762229218" border="0" /></a><br />This is the lamp holder, looking inside. Inside i put a piece of paper to spread the light evenly. Without the paper reticle was uneven as the light bulb could be seen through the reticle.<br /><br /></div><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNh7GDphbyjUJk0wi4_MTjysSJ04zmt8D0JBMEgj-rLnYfW7tPm7svJq89xxZWZATuD2yky801SRBOJLzEdPKkmdp33LtCOXDCcisyTpkzqFs6KvVipzzNA7v2emFB2t3AbYqtQtSPAPZ-/s1600-h/20091212_009.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 225px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNh7GDphbyjUJk0wi4_MTjysSJ04zmt8D0JBMEgj-rLnYfW7tPm7svJq89xxZWZATuD2yky801SRBOJLzEdPKkmdp33LtCOXDCcisyTpkzqFs6KvVipzzNA7v2emFB2t3AbYqtQtSPAPZ-/s400/20091212_009.jpg" alt="" id="BLOGGER_PHOTO_ID_5414125078467158114" border="0" /></a><br /><div style="text-align: center;">This shows the whole reticle. Pretty nice!<br /><br /><br /></div><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDlsNJqv3Y3pWfXXlK1UHIsg8AK4MNX5zFsUS19z5z-RIG3UlHHWO-xV8zLhsUZ25kH-8o_DIYTLBOAjDLF44xXmFZ2fCQWEZ2cn9cnCQlwUxx1Lw92vc-jUafGRUXkeUK11U-dgfLUIwG/s1600-h/20091212_012.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 322px; height: 180px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDlsNJqv3Y3pWfXXlK1UHIsg8AK4MNX5zFsUS19z5z-RIG3UlHHWO-xV8zLhsUZ25kH-8o_DIYTLBOAjDLF44xXmFZ2fCQWEZ2cn9cnCQlwUxx1Lw92vc-jUafGRUXkeUK11U-dgfLUIwG/s400/20091212_012.jpg" alt="" id="BLOGGER_PHOTO_ID_5414125091741979826" border="0" /></a>Comparison: Light turned off<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg59uiIeVgDpGvjFDKniPiMCzjmdU8hql41cpxYf-JjfIiWLKZ-BkG_KZMFUXYS6oddFV9uJ-bTXlsArIXL4Xh2SSSDYIpV9m-xXFWmfBBCAghVTwNsfHRTQwKQ9xH5okNrk9O6Z024qdT7/s1600-h/20091212_011.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 359px; height: 201px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg59uiIeVgDpGvjFDKniPiMCzjmdU8hql41cpxYf-JjfIiWLKZ-BkG_KZMFUXYS6oddFV9uJ-bTXlsArIXL4Xh2SSSDYIpV9m-xXFWmfBBCAghVTwNsfHRTQwKQ9xH5okNrk9O6Z024qdT7/s400/20091212_011.jpg" alt="" id="BLOGGER_PHOTO_ID_5414125081898355970" border="0" /></a>Light turned on!<br /></div><br />Photos taken with my new Nokia N900 phone. Less bad than the previous ones.coshttp://www.blogger.com/profile/15241919046329987814noreply@blogger.com0tag:blogger.com,1999:blog-5487136226070975417.post-31165996648526468692009-04-25T12:00:00.000-07:002009-04-25T12:04:12.892-07:00F-18 simulator on TVThey showed Finnish Air Force's WTSAT F-18 simulator on tv in "Äijät" tv show. It's in Finnish, but i think everyone understands what's the idea. See the whole episode at:<br /><br /><a href="http://www.sub.fi/netti-tv/index.shtml/ohjelmat/aijat?12856">http://www.sub.fi/netti-tv/index.shtml/ohjelmat/aijat?12856</a><br /><br />Also getting to fly a Hawk is quite cool.coshttp://www.blogger.com/profile/15241919046329987814noreply@blogger.com0tag:blogger.com,1999:blog-5487136226070975417.post-9995720393029551602009-04-23T12:09:00.001-07:002009-04-23T12:29:15.097-07:00Velocity EP second flightToday i got Velocity EP finally repaired and ready to fly. I installed the new electronics -<br /><br /> * CC Phoenix 45 ESC<br /> * Ultrafly A/30/24 brushless motor<br /> * AR6200 2.4GgHz receiver<br /><br />- to the plane. My new shiny transmitter is Spektrum DX 7, which i got for discount as the shop didn't get DX6 in time. DX 7 is maybe a bit too high end for my use, but now i got it and it's really cool. Motor was compatible with Speed 400 and the mount didn't need modifications.<br /><br />The flights went good. This time i didn't crash the plane and flew very carefully (no high speed passes or low level aerobatics). Performance is AWESOME. 5 seconds with full throttle and the plane is so high i don't want to get it higher. Normal aerobatics such as loops and rolls are possible with 50% throttle. Level flight requires about 30% throttle. Thrust/Weight ratio is about 1. And this is not a lightweight depron model. I flew about 30 minutes and didn't get the battery to run out. I had to quit, because it became dark and cold.<br /><br />Velocity glides surprisingly well. I needed a few passes every time i tried to land it. Almost like Zagi 400. I don't think it can thermal though as it loses altitude rapidly when turning.<br /><br />Sorry, no photos this time as i was flying alone.<br /><br />Next time i'll try how fast it goes. My fear is that it might disintegrate mid-air. Let's see what happens.coshttp://www.blogger.com/profile/15241919046329987814noreply@blogger.com1tag:blogger.com,1999:blog-5487136226070975417.post-74646790602451233562009-04-12T09:37:00.000-07:002009-04-12T09:39:11.665-07:00More simpit details, updated web pageI updated my personal web page about some details of the simpit. If you're intrested, you might want to check out <a href="http://www.modeemi.fi/%7Ecosmo/projects/simpit/">http://www.modeemi.fi/~cosmo/projects/simpit/</a>coshttp://www.blogger.com/profile/15241919046329987814noreply@blogger.com0tag:blogger.com,1999:blog-5487136226070975417.post-33815296503556370642009-04-09T02:15:00.000-07:002009-04-09T02:42:14.392-07:00Playing C64 games with wiimote & balance board<div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjUjiF3rVbr_SW3ZclwTgIZ6WGS-o9AbqafKRoQk9oNgnfXX-Alc1sG0m31DB3U66djWjMWQ12C-0D4t-_nLbenV-gEJMVcW_Ndlf9-KDHzfJzNGHqlY8nBLPB6wLForoaj58AfAy2Cf2X/s1600-h/Photo0022.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjUjiF3rVbr_SW3ZclwTgIZ6WGS-o9AbqafKRoQk9oNgnfXX-Alc1sG0m31DB3U66djWjMWQ12C-0D4t-_nLbenV-gEJMVcW_Ndlf9-KDHzfJzNGHqlY8nBLPB6wLForoaj58AfAy2Cf2X/s400/Photo0022.jpg" alt="" id="BLOGGER_PHOTO_ID_5322620317380012930" border="0" /></a>Playing Le Mans<br /></div><br />Yesterday we demonstrated a software/hardware combo that allows controlling any game system with Atari connector (C64, Amiga, Atari 2600..) using wiimote and balance board.<br /><br />It consists of Linux pc software which communicates with wiimotes, Arduino<br />Duemilanove and software for it.<br /><br />It's made by my colleague Dr. Dick/Byterapers (HW and Arduino software) and me (pc sw) .<br /><br />Arduino: http://arduino.cc/en/Main/ArduinoBoardDuemilanove<br /><br />The sw supports 1 or 2 wiimotes or balance boards. Wiimote controls work as you can expect, using the d-pad for stick and 2 button for fire. Balance board works by leaning your body to desired direction. Fire can be used by jumping or leaning forward (configurable). Wiimotes can be used for playing any game, but balance board is useful only for slow paced games which don't require fire button much. Our favorite on balance board was Space Taxi. We forgot to test Decathlon, but i bet it will be most fun.<br /><br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBQqIy6tK8av0cb8JC_YNz5cOY6fm3PAE-OUPtUoQ3wxgcrdEOOa21XATYc3vBLhnIJnqn_eoVliQu22QNLkuDuoiJ9jl3S9h0mpWwMf1lmg-1zFCZ5mPVJ0JpzNsulPa72Wzuhom-IkoK/s1600-h/Photo0021.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBQqIy6tK8av0cb8JC_YNz5cOY6fm3PAE-OUPtUoQ3wxgcrdEOOa21XATYc3vBLhnIJnqn_eoVliQu22QNLkuDuoiJ9jl3S9h0mpWwMf1lmg-1zFCZ5mPVJ0JpzNsulPa72Wzuhom-IkoK/s400/Photo0021.jpg" alt="" id="BLOGGER_PHOTO_ID_5322620320687762898" border="0" /></a>The setup. C128 on left, Arduino board on center, laptop on right.<br /><br /></div><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwl7GsWucsv7ZQXIELGF42kZSGTC7U_HpCVpJWoKDNZxvt5NG37CbubfeqjsEwx_WeQVRFjJS6S0nn6BwayQOdKfq5rWtkHcla2XipWJT2BmWh2h9rzk-12lZ1lpwoxNRx4vk_0_dGaDVz/s1600-h/Photo0020.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwl7GsWucsv7ZQXIELGF42kZSGTC7U_HpCVpJWoKDNZxvt5NG37CbubfeqjsEwx_WeQVRFjJS6S0nn6BwayQOdKfq5rWtkHcla2XipWJT2BmWh2h9rzk-12lZ1lpwoxNRx4vk_0_dGaDVz/s400/Photo0020.jpg" alt="" id="BLOGGER_PHOTO_ID_5322620320920031794" border="0" /></a>Arduino board with the Atari joystick cables connected to i/o ports.<br /><br /><div style="text-align: left;">The software will probably be released soon in sourceforge or some other location under GPL.<br /></div></div><h2></h2>coshttp://www.blogger.com/profile/15241919046329987814noreply@blogger.com0tag:blogger.com,1999:blog-5487136226070975417.post-4221532564935875332009-04-04T12:23:00.000-07:002009-04-20T04:18:15.448-07:00Model ExpoToday i was at Model Expo in Helsinki.<br /><br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjExb5eM6MZyb196PdHrfQ4obo4fTO8ZX7Pv3dSoNFdsmvSEbRluhU1ZvRMSNv9la0Zi-0__3rPY_t4cZGy8WUDPXuiZf5byOkKiM8UGMliF6eUm4EK-J-ZMGcqOdHpV2in_MA-nKRXJwLu/s1600-h/Photo0009.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjExb5eM6MZyb196PdHrfQ4obo4fTO8ZX7Pv3dSoNFdsmvSEbRluhU1ZvRMSNv9la0Zi-0__3rPY_t4cZGy8WUDPXuiZf5byOkKiM8UGMliF6eUm4EK-J-ZMGcqOdHpV2in_MA-nKRXJwLu/s400/Photo0009.jpg" alt="" id="BLOGGER_PHOTO_ID_5320919881923542866" border="0" /></a><br />Suomen Urheiluilmailuopisto had a glider simulator at the expo. It was really popular as you can see. Built into a real fuselage of some glider.<br /><br /></div><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYpV10xrrxPOeOMLKn3Ndrenk7gEwX9Veq2ZJ6-3CSJ2RbAejmz-IwQ-qNOADgHibjLzBCDY9rTfCC8dzsUbFFb3MGqhxBE1hAEPTzKWKa5f1Re_VG-8liWsi9Sm5B67BIp5iaH6AahlkN/s1600-h/Photo0003.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYpV10xrrxPOeOMLKn3Ndrenk7gEwX9Veq2ZJ6-3CSJ2RbAejmz-IwQ-qNOADgHibjLzBCDY9rTfCC8dzsUbFFb3MGqhxBE1hAEPTzKWKa5f1Re_VG-8liWsi9Sm5B67BIp5iaH6AahlkN/s400/Photo0003.jpg" alt="" id="BLOGGER_PHOTO_ID_5320919882293307250" border="0" /></a><br />Software was condor. Unfortunately the panel display didn't work so they had cockpit visible on visual screen.<br /></div><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuYwKsWf7HyVfe3jGv4vbNRN5ma4wsZ5LXqrGQUPWnZHS5zNFlUFP0pAw_E0mZiVkWS8o6giVc0IUyjtiirb0xdOGlTLk_MAPbr5nKN8up63kCut9n2ginA0zCHHZ0TdOLdoPjNMxgiCyO/s1600-h/Photo0004.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuYwKsWf7HyVfe3jGv4vbNRN5ma4wsZ5LXqrGQUPWnZHS5zNFlUFP0pAw_E0mZiVkWS8o6giVc0IUyjtiirb0xdOGlTLk_MAPbr5nKN8up63kCut9n2ginA0zCHHZ0TdOLdoPjNMxgiCyO/s400/Photo0004.jpg" alt="" id="BLOGGER_PHOTO_ID_5320919882762450546" border="0" /></a><br />They had (at least) working stick, pedals and brake lever, from original glider. I'm not sure about flaps. There was a commercial joysticks handle attached in the place of stick and it looked a bit weird and plasticky. If i had a real glider fuselage available, i'd use as much original controls as possible.<br /></div><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTUzyoJhiAHnZx2mrMg7ExuBs4VJtB8FKrn5HtQ8eWSeOEhu78RfQPSUetrlxNJMNd70nBT2P_-2L9aLmth7-ATp-57W3gJMrGnegySFeAimbj9Z9n1cOWv-bNq1Q2TiqNOZDZpLESb5Q9/s1600-h/Photo0013.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTUzyoJhiAHnZx2mrMg7ExuBs4VJtB8FKrn5HtQ8eWSeOEhu78RfQPSUetrlxNJMNd70nBT2P_-2L9aLmth7-ATp-57W3gJMrGnegySFeAimbj9Z9n1cOWv-bNq1Q2TiqNOZDZpLESb5Q9/s400/Photo0013.jpg" alt="" id="BLOGGER_PHOTO_ID_5320919882660671554" border="0" /></a>Here's an internal shot. The mechanics were well done, but for some reason they use TWO USB GAMEPADS linked with complex mechanical links to controls. Yes, it's a USB gamepad in the photo. There's another one not visible here which is moved in 2 directions according to control movements. What's wrong with using potentiometers and a simple USB HID board?<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3LvOJfPj8Gdy8EWJZ9TtyfAbzbilP9DnKcmUtSFdP35gIJdj-X9eDxzQtbdnQ8se52uM_O1oJbmtgTmoRoRbHygACT79KpAFfvm-mSONKLLhfgxbRg3Z3fNHiOXp5H7NfTinz9bmjCsdX/s1600-h/Photo0010.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3LvOJfPj8Gdy8EWJZ9TtyfAbzbilP9DnKcmUtSFdP35gIJdj-X9eDxzQtbdnQ8se52uM_O1oJbmtgTmoRoRbHygACT79KpAFfvm-mSONKLLhfgxbRg3Z3fNHiOXp5H7NfTinz9bmjCsdX/s400/Photo0010.jpg" alt="" id="BLOGGER_PHOTO_ID_5320921698234790002" border="0" /></a>There were also some jets. I'll spare you from the generic expo shots, as i only had my cellphone as camera and you can find better quality ones somewhere else.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibZMBL3C773WsjtK3_3rx4jzvTEVGAXhxKpHaOFio4fC6NHe69BEfH4h1PlEV3zJSbQ3NC-6wdsRjOGiViAB13GJayuDUESHCCLSFX2OgIXiWxhE3eXXy5n-GqQUpkmFTpB6ZNGQfY2-WM/s1600-h/Photo0017.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibZMBL3C773WsjtK3_3rx4jzvTEVGAXhxKpHaOFio4fC6NHe69BEfH4h1PlEV3zJSbQ3NC-6wdsRjOGiViAB13GJayuDUESHCCLSFX2OgIXiWxhE3eXXy5n-GqQUpkmFTpB6ZNGQfY2-WM/s400/Photo0017.jpg" alt="" id="BLOGGER_PHOTO_ID_5320921695665686690" border="0" /></a>This was really interesting one. It's a PULSEJET model made in Finland in 60's. It's a control line model, not RC. Jets are lame, real men use pulsejet propulsion (this is a challenge for all model builders out there)<br /><br /><div style="text-align: left;">I also bought a new toy, but as it doesn't fly it's not anything of interest.<br /></div></div>coshttp://www.blogger.com/profile/15241919046329987814noreply@blogger.com0tag:blogger.com,1999:blog-5487136226070975417.post-36199457358928910812009-03-24T06:42:00.000-07:002009-04-23T12:29:34.182-07:00Velocity EP first flightI flew the Velocity EP first time on the weekend. Weather was good but windy.<br /><br /><div style="text-align: center;">Before:<br /></div><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/_355f2z9_UBI/ScfrItREy1I/AAAAAAAAA2Y/M0jXjlq-tfY/s800/21032009377.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 435px; height: 326px;" src="http://lh6.ggpht.com/_355f2z9_UBI/ScfrItREy1I/AAAAAAAAA2Y/M0jXjlq-tfY/s800/21032009377.jpg" alt="" border="0" /></a><br /><div style="text-align: center;">After:<br /></div><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/_355f2z9_UBI/ScfrKgVUZWI/AAAAAAAAA2o/NG4QD_oaafs/s800/21032009379.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 503px; height: 378px;" src="http://lh6.ggpht.com/_355f2z9_UBI/ScfrKgVUZWI/AAAAAAAAA2o/NG4QD_oaafs/s800/21032009379.jpg" alt="" border="0" /></a><span style="font-weight: bold;"></span><br /></div>coshttp://www.blogger.com/profile/15241919046329987814noreply@blogger.com0tag:blogger.com,1999:blog-5487136226070975417.post-45051057332988014852009-03-14T15:36:00.001-07:002009-03-14T15:43:01.983-07:00New headwear<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1VZWSG6DUlkLRBdS5oSgdsu7Cw2S2en-FnO12AWx5IZdTRmNYIk_-bF9K0yUoHNf1cnMYnmFzCMCWHovJ8WZLizMkuMaEj7oDTEcNWWTVBPcoxJsmGseifsUoUbunhE4h3-JWAFoPMERR/s1600-h/Photo0016.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1VZWSG6DUlkLRBdS5oSgdsu7Cw2S2en-FnO12AWx5IZdTRmNYIk_-bF9K0yUoHNf1cnMYnmFzCMCWHovJ8WZLizMkuMaEj7oDTEcNWWTVBPcoxJsmGseifsUoUbunhE4h3-JWAFoPMERR/s400/Photo0016.jpg" alt="" id="BLOGGER_PHOTO_ID_5313176328798355202" border="0" /></a><br />It's a US Navy helicopter pilots helmet. The seller told me it was used in Vietnam war on USS Saratoga in an anti-submarine helicopter. I still don't have a clue what i'm going to do with it, but i don't care because it is so cool.coshttp://www.blogger.com/profile/15241919046329987814noreply@blogger.com0tag:blogger.com,1999:blog-5487136226070975417.post-87665974663856405172009-03-14T10:14:00.000-07:002009-03-14T10:30:20.550-07:00Simpit "Ready"!Finally i got the simpit "ready" - meaning i reached the current goals i've set for it.<br /><br />It's now fully functional and ready for flying. I haven't had too much time to fly yet, but i'm happy with the results so far.<br />I have made fullscreen cockpits for ASK-21 glider and 747. More to come later.<br /><br /><div style="text-align: center;">Here's a nice panoramic image made using wonderful "hugin" software. Click to get high resolution version. Panel is ASK-21:<br /></div><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDmkTGZkoqWRSiMvsmhSqdZIWtcaoQhbAqPTjCPyKY1eHPofZU4MTG0BTdKkT2LtVqbadiqbEhJ1A5uRGGlgsTtriZZr8-TVfiDvKhWRJKEPnvSicKjulHMJiRKpZIOuSc6PvupHWDPw5A/s1600-h/simpit_panorama.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 394px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDmkTGZkoqWRSiMvsmhSqdZIWtcaoQhbAqPTjCPyKY1eHPofZU4MTG0BTdKkT2LtVqbadiqbEhJ1A5uRGGlgsTtriZZr8-TVfiDvKhWRJKEPnvSicKjulHMJiRKpZIOuSc6PvupHWDPw5A/s400/simpit_panorama.jpg" alt="" id="BLOGGER_PHOTO_ID_5313093882188933826" border="0" /></a>This has been taken with lights on to show the hardware. Normally i'd fly with dark room.<br /></div><br /><div style="text-align: center;">747 (image is a bit discolored):<br /></div><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZswkSe0rMi7s-cKvZmHBSo1cwES7eWvnSA8TdOK7VYIld-f0nOy61bSVrgMpTaEk8VtWO7N8r529b_x1hR9duOf855c_bc2PuPExfOHS36BW1EPUJ69dqFqLCF2WgiDjZGXhvxi6MOGfy/s1600-h/P1310439.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZswkSe0rMi7s-cKvZmHBSo1cwES7eWvnSA8TdOK7VYIld-f0nOy61bSVrgMpTaEk8VtWO7N8r529b_x1hR9duOf855c_bc2PuPExfOHS36BW1EPUJ69dqFqLCF2WgiDjZGXhvxi6MOGfy/s400/P1310439.JPG" alt="" id="BLOGGER_PHOTO_ID_5313094723865142498" border="0" /></a><br /><div style="text-align: center;">F-18:<br /></div><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgcZms4K5XNM82lasDndMG3aTwRMPwmBx9gdD1PZmCcv7D1mbekb3-jjEyxSmK235hKZOfJhfyIjsgp4rFbm-I7QpCjkgyTaV74r7u-Cc-606WseqXx4_YPhH_Pu0ax2loQhu8-A8eOnfi/s1600-h/P1310445.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgcZms4K5XNM82lasDndMG3aTwRMPwmBx9gdD1PZmCcv7D1mbekb3-jjEyxSmK235hKZOfJhfyIjsgp4rFbm-I7QpCjkgyTaV74r7u-Cc-606WseqXx4_YPhH_Pu0ax2loQhu8-A8eOnfi/s400/P1310445.JPG" alt="" id="BLOGGER_PHOTO_ID_5313094738241050802" border="0" /></a>There's a bug with latest X-Plane beta that causes the F/A 18 Canada add-on aircraft to have maybe 10-100 times normal thrust. It's pretty fun but also fuel runs out in couple of minutes..<br /></div><br />My next plans for the pit are:<br />- Add a customized USB keypad as autopilot panel. Already ordered from dealextreme.<br />- Start planning how to implement force feedback. I've already got the electronics, but mechanics are the difficult part.<br />- Remember to FLY!coshttp://www.blogger.com/profile/15241919046329987814noreply@blogger.com0