tag:blogger.com,1999:blog-86257106980933234692024-03-12T19:27:52.878-07:00Svetlin Ankov's BlogSvetlin Ankovhttp://www.blogger.com/profile/03385549086936450194noreply@blogger.comBlogger35125tag:blogger.com,1999:blog-8625710698093323469.post-36302471613320731742016-12-26T07:50:00.001-08:002016-12-26T07:52:19.350-08:00My First NuGet package: A serializer for C#I've written a simple <em>serializer</em> for <em>C#</em>. There are no native dependencies, so that it can run on <em>any architecture</em>. And, as it is based on <a href="https://docs.microsoft.com/en-us/dotnet/articles/standard/library">.NET Standard 1.1</a> it is also fairly <em>portable</em>.<br />
<a name='more'></a><br />
<h4>
Getting the sources</h4>
The sources are as usual available at <a href="https://github.com/dumbledore/Albite.Serialization">GitHub</a> (though but one should clone the <a href="https://github.com/dumbledore/Albite.Serialization.Solution">solution repo</a> if they want to build it).<br />
<br />
<h4>
Installing it as a NuGet package</h4>
One can install it as the NuGet package <a href="https://www.nuget.org/packages/Albite.Serialization">Albite.Serialization</a>.<br />
<br />
<h4>
What can it serialiaze?</h4>
<ul>
<li>Primitives</li>
<li>Arrays</li>
<li>Standard collections</li>
<li>Classes</li>
</ul>
<br />
<h4>
How can I use it?</h4>
Simply throw something at <span style="font-family: "courier new" , "courier" , monospace;"><strong>ObjectWriter.WriteObject()</strong></span> and than get it back using <span style="font-family: "courier new" , "courier" , monospace;"><strong>ObjectReader.ReadObject()</strong></span> .<br />
<br />
For example, serializing:<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;"><strong>using (ObjectWriter writer = new ObjectWriter(stream))<br />{<br /> writer.WriteObject(10);<br /> writer.WriteObject(MyEnum.X);<br /> writer.WriteObject("hello");<br /> writer.WriteObject(new int[] { 10, 20 });<br /> writer.WriteObject(new Stack<int>(new int[] { 100, 200 }));<br /> writer.WriteObject(null);<br /> writer.WriteObject(typeof(string));<br />}</strong></span><br />
<br />
Then, reading it back:<br />
<br />
<strong><span style="font-family: "courier new" , "courier" , monospace;">using (ObjectReader reader = new ObjectReader(stream))<br />{<br /> int i = (int)reader.ReadObject();<br /> MyEnum e = (MyEnum)reader.ReadObject();<br /> string s = (string)reader.ReadObject();<br /> int[] arr = (int[])reader.ReadObject();<br /> Stack<int> st = (Stack<int>)reader.ReadObject();<br /> object o = reader.ReadObject();<br /> Type t = (Type)reader.ReadObject();<br />}</span></strong><br />
<br />
<h4>
How is it licensed?</h4>
It is licensed under Apache 2.0.Svetlin Ankovhttp://www.blogger.com/profile/03385549086936450194noreply@blogger.com0tag:blogger.com,1999:blog-8625710698093323469.post-25639044253231040662016-10-17T12:16:00.002-07:002016-11-07T13:27:31.372-08:00Albite READER for Windows Phone<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/tZoOaxL9MLo/0.jpg" frameborder="0" height="350" src="https://www.youtube.com/embed/tZoOaxL9MLo?feature=player_embedded" width="450"></iframe></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: left;">
Here comes the good ol' <em>Albite</em>, this time for <em>Windows Phone</em>.</div>
<div class="separator" style="clear: both; text-align: left;">
It's still a free and open-source ePub reader, that packs a nice bunch of features.</div>
<a name='more'></a><br />
<h3>
Features</h3>
<li>high-quality layout using <i>HTML5</i> rendering</li>
<li>narration in all installed languages</li>
<li>color themes and font settings</li>
<li>search with voice recognition</li>
<li>internal and external links</li>
<li>table of contents</li>
<li>bookmarks</li>
<li>various book sources: SD card, <em>OneDrive</em>, <em>Project Gutenberg</em>, etc.</li>
<br />
<h3>
System Requirements</h3>
<em>Windows Phone</em> 8.0 and higher.<br />
<br />
<h3>
Installation</h3>
Download the app directly from the <a href="https://www.microsoft.com/store/productid/9NBLGGH4XZ08" target="_blank">Windows Phone Store</a>.<br />
<br />
<h3>
Official Website</h3>
The official webpage is still <a href="http://albite.org/reader">albite.org/reader</a><br />
<br />
<h3>
Help</h3>
For more detailed information, on using the app, check the <a href="https://www.youtube.com/playlist?list=PLHZHS_1xDlfBmQnry20BsYfqixvxmaZav">tutorial</a> on the various features on youtube. <br />
<br />
<h3>
Sources</h3>
The source code is available at <a href="http://github.com/dumbledore/AlbiteREADER-WindowsPhone" target="_blank">GitHub</a>. <br />
<br />
<h3>
License</h3>
It is released under the <em>Apache</em> 2.0 License.Svetlin Ankovhttp://www.blogger.com/profile/03385549086936450194noreply@blogger.com1tag:blogger.com,1999:blog-8625710698093323469.post-49633354884057025182016-06-01T15:23:00.004-07:002016-11-19T12:28:50.614-08:00How to Install Ubuntu on an External Drive and boot it on a Surface Pro 3<div class="separator" style="clear: both; text-align: left;">
I've been trying to get a full Ubuntu install on an external USB3 SSD, but I could never make it boot. It turns out the files on the EFI partition have to be renamed. If one knows how to do that, the rest is quite simple.</div>
<a name='more'></a><br />
<h2>
Installation instructions</h2>
<ol>
<li>Get the latest ISO image from <a href="http://www.ubuntu.com/download/desktop" target="_blank">ubuntu.com</a></li>
<li>Install Virtual Box + VM Extensions (this are needed for USB 2.0/3.0 support). This will be used to install the </li>
<li>Create a virtual machine based on Windows 10 (or 8.1). Make sure Enable EFI is enabled in System.</li>
<li>Go to USB and select USB 3.0. Add your drive there.</li>
<li>Select the linux iso for the optical storage. You might want to select the option, named "Live CD", so that it is not ejected after the installation.</li>
<li>Start the machine, select "Install Ubuntu" and follow the instructions. You might want to select the partitions manually (and add the EFI partition yourself), or leave it as it is. </li>
</ol>
Now the important part! The install is generally done, but it would not boot. The EFI partition needs to be fixed. Original idea comes from <a href="http://askubuntu.com/a/740482/11397" target="_blank">this post at Stack Overflow</a>.<br />
<ol>
<li>Reboot the virtual machine, choose "Try Ubuntu".</li>
<li>Start a terminal and mount the EFI partition. Because, there's only one storage device and the EFI partition is the first there, you can bet it will be sda1: <blockquote class="tr_bq">
sudo mount /dev/sda1 /mnt</blockquote>
</li>
<li> Copy the bootloader files to the <em>right</em> place:<blockquote class="tr_bq">
sudo cp -r /mnt/EFI/ubuntu /mnt/EFI/BOOT</blockquote>
</li>
<li> And rename the shim to a generic name: <blockquote class="tr_bq">
sudo mv /mnt/EFI/BOOT/shimx64.efi /mnt/EFI/BOOT/bootx64.efi</blockquote>
</li>
<li>Finally umount it: <blockquote class="tr_bq">
sudo umount /mnt</blockquote>
</li>
</ol>
You are done.<br />
<br />
To get the keyboard + touchpad working see <a href="https://www.reddit.com/r/SurfaceLinux/comments/4l8iv1/surface_book_1604_install_step_by_step/">this comment</a>. Either attach a Bluetooth keyboard and execute the next steps from within the installation, or boot the installation in virtual box using a VMDK <a href="http://www.serverwatch.com/server-tutorials/using-a-physical-hard-drive-with-a-virtualbox-vm.html">raw image of the external drive</a>:<br />
<blockquote class="tr_bq">
sudo apt-get update </blockquote>
<blockquote class="tr_bq">
sudo apt-get upgrade </blockquote>
<blockquote class="tr_bq">
sudo echo "deb <a href="http://ppa.launchpad.net/tigerite/kernel/ubuntu">http://ppa.launchpad.net/tigerite/kernel/ubuntu</a> trusty main" > /etc/apt/sources.list.d/tigerite-kernel-trusty.list </blockquote>
<blockquote class="tr_bq">
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 984AE706D31B333A </blockquote>
<blockquote class="tr_bq">
sudo apt-get update </blockquote>
<blockquote class="tr_bq">
sudo apt-get install linux-surface</blockquote>
And reboot.<br />
<br />
<h2>
A few notes</h2>
<ul>
<li><em>Surface Pro 4 keyboard and touchpad </em>does not appear to work on <em>Ubuntu 16.04</em>, though the touchscreen works. A nice trick is to log in using the <em>on-screen keyboard</em> and then add a pair of <em>Bluetooth</em> keyboard and mouse. On the other </li>
<li>One might want to modify the boot order to USB -> SSD so that any time the system is booted with the external SSD in, one would get directly to Ubuntu.</li>
<li>On my machine, a custom installation of 16.04 would not work, because of <a href="https://bugs.launchpad.net/ubuntu/+source/ubiquity/+bug/1418706" target="_blank">this bug</a>. What I do is, do a <em>recommended install</em> and then resize the partitions through the live cd. If you want to encrypt the home folder afterwards, you might want to follow <a href="http://www.howtogeek.com/116032/how-to-encrypt-your-home-folder-after-installing-ubuntu/" target="_blank">this guide</a>. Note however, that in order to enable encryption for the swap partition, you need to <em>install the </em><strong>lvm2</strong><em> package as well</em>! Otherwise, /dev/mapper/cryptswap1 would not show after restarting cryptdisks.</li>
<li><div style="text-align: left;">
I haven't tried updating the boot image fearing it might accidentally trash my windows boot as the drive is present on Linux. I don't think it would, but still...</div>
</li>
</ul>
Svetlin Ankovhttp://www.blogger.com/profile/03385549086936450194noreply@blogger.com4tag:blogger.com,1999:blog-8625710698093323469.post-56886908551552062262013-09-11T15:13:00.000-07:002013-09-11T15:13:35.992-07:00Internet Explorer on Windows RT<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY35svSC5qPuOKRR8NeKVpt_-ZLu8PDnlmDE1NnmHMDBw7sjru2478ktubciw40e_4nQJH4xuCT0lKnD4ePOKA5i9qdFzbFke8619rZxfDqn5nt4gwy8XWznvzd3qEmqeXjF-2TF8ptaCv/s1600/ie.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="223" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY35svSC5qPuOKRR8NeKVpt_-ZLu8PDnlmDE1NnmHMDBw7sjru2478ktubciw40e_4nQJH4xuCT0lKnD4ePOKA5i9qdFzbFke8619rZxfDqn5nt4gwy8XWznvzd3qEmqeXjF-2TF8ptaCv/s400/ie.png" width="400" /></a></div>
<br />
<br />
I got my Surface a fortnight ago and I'm extremely happy with it - no complaints at all!<br />
<br />
Understandably I use the Metro version of IE. At first I found it a bit limited compared to using Chrome (as that's what I've been using on my laptop) but found out that it's quite powerful.<br />
<br />
The <em>desktop version </em>is the key to tweaking the Metro app. Here are a few things I changed that made my experience with the Metro app totally awesome.<br />
<a name='more'></a><br />
<h3>
Changing the search provider</h3>
The first thing I wanted to do was to use Google as the search engine. I was OK at start with Bing, but Google is just the best so far.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwj4pKqE2DqepuYOmztFQKEfljOh4BfIzry-RJvIbUykZcwTtfYNBjKJxheUlJpeQnCP2QXH4nDnr8KVGvViE6ri5H0-xD9ijSc2I1TiEvUPoJshGJPYtq4pZVHb47_zZ6i88zp858YbFk/s1600/tabs.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijX58T6-hpk4l08ymg4tkMyeqRl7tw1QL76yaXyoatpvd8BkF8QU_ausldNLWhrwCVN4lOCl60UgLHpK80PrFbGO4XHE1EVX-wRqcS-iaH0DdBakcWv-2Ksa4ZS_eTAMRZDDHdpokVWz-b/s1600/search.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="216" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijX58T6-hpk4l08ymg4tkMyeqRl7tw1QL76yaXyoatpvd8BkF8QU_ausldNLWhrwCVN4lOCl60UgLHpK80PrFbGO4XHE1EVX-wRqcS-iaH0DdBakcWv-2Ksa4ZS_eTAMRZDDHdpokVWz-b/s400/search.PNG" width="400" /></a></div>
<br />
I just changed the search provider of the desktop app, restarted the metro app (you need to close it and open it again, i.e. really close it, or the new changes won't apply), and it was using Google.<br />
<br />
<h3>
Tab sessions and the home page</h3>
I found out that if I closed the Metro IE and opened it again all previous tabs were gone and it was showing the MSN page. Very counterintuitive in the context of the Metro UI, at least to me.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9k_nD_Gal3Xcoycp83quzyQ28NGk2foeRNgbLZY_SNRj96Jim0RcoTA2o4M48dy2sPkduWxiic6TFQA5IoitCty8J9ZruMBlll9UPBtZ67SQZNFCjBkF7mkYoYwBVAWZ7hASlgZiLkElb/s1600/tabs.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9k_nD_Gal3Xcoycp83quzyQ28NGk2foeRNgbLZY_SNRj96Jim0RcoTA2o4M48dy2sPkduWxiic6TFQA5IoitCty8J9ZruMBlll9UPBtZ67SQZNFCjBkF7mkYoYwBVAWZ7hASlgZiLkElb/s400/tabs.PNG" width="311" /></a></div>
<br />
I opened <em>Internet Options</em> in desktop IE and changed my homepage to 'use new tab' and the startup option to 'start with tabs from last session'. Restarted Metro IE, and - behold!<br />
<br />
<h3>
Less adds</h3>
Ads on some sites are really annoying and could have an impact on performance somewhat. But, IE on RT doesn't support add-ons, so AdBlock is not an option, so what?<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisq2Z9snzMi-cHZVHK7WkEqKpz5BgmokOvGKF58h3urNqn6K-LH_bKrLbPRj6kBx5207dv0q9lEDW2ptjCmp-RQtY4ONuAPSFhnWSEd51JsRH2Pms5tHvCJlZ3Ql_ofGlHSNaEtAg3Ol0Y/s1600/easy-list.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="193" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisq2Z9snzMi-cHZVHK7WkEqKpz5BgmokOvGKF58h3urNqn6K-LH_bKrLbPRj6kBx5207dv0q9lEDW2ptjCmp-RQtY4ONuAPSFhnWSEd51JsRH2Pms5tHvCJlZ3Ql_ofGlHSNaEtAg3Ol0Y/s320/easy-list.png" width="320" /></a></div>
<br />
Well, we can use the EasyList TPL. Just add the EasyList TPL from 'Tracking Protection' and you're ready to go.<br />
<br />
<h3>
Let's not forget security...</h3>
One site required certificate authentication.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnPIrza3EhUtLXrq2x-PRhSACwkLVYiJA1tP6wT3ZSes2W5RIrikSf_s66EhjWnFxMIXGoR8ufdTZew5DFXhzHVTOaNesCo9LJwptl2RfOBJz0Klje9-wYAlaGNjCAh6lSmtlwQEHoR5ij/s1600/certificates.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnPIrza3EhUtLXrq2x-PRhSACwkLVYiJA1tP6wT3ZSes2W5RIrikSf_s66EhjWnFxMIXGoR8ufdTZew5DFXhzHVTOaNesCo9LJwptl2RfOBJz0Klje9-wYAlaGNjCAh6lSmtlwQEHoR5ij/s320/certificates.PNG" width="249" /></a></div>
<br />
So I added the certificate in the desktop app, restarted Metro IE and it worked. Really nifty.<br />
<br />
<h3>
Booklets are powerful</h3>
I love Diigo and use it a lot as there is just too much information in my profession. So, how to use it on my Surface?<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhhm61uinwh_F58gJ0mOr_HHFq-mYywO3LMy2eQtDrXavmKRbHbpJz6rjy-Tg2sUDD-ITUdq3MFn-b_9N-B-6qFS-JYe_zO7SIF5QqtwAI8UL2g2vfntQ-C_MoO2nLlsXZbCrLV1ZbLGZf/s1600/diigo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwPRRFhwtxSSZCrh_YunXnPoyElHEwbRUc0bx76AwKY5-od2s9pgMb91MAyDCKUcY7aWoo6tH5JUyKhfHElzpAOEC9qwhejDx6CHAdTMKiSE0NV42OtUKcYuOG7-9ms40oVoVPzZrBdQQw/s1600/diigo-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="179" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwPRRFhwtxSSZCrh_YunXnPoyElHEwbRUc0bx76AwKY5-od2s9pgMb91MAyDCKUcY7aWoo6tH5JUyKhfHElzpAOEC9qwhejDx6CHAdTMKiSE0NV42OtUKcYuOG7-9ms40oVoVPzZrBdQQw/s320/diigo-2.png" width="320" /></a> </div>
<br />
Just added the bookmarklet to favourites and when I want to highlight I tap on the search bar and then tap on the item in favourites. Don't underestimate the power of bookmarklets.<br />
<br />
I <3 my Surface. :-)<br />
<br />
<h3 class="separator" style="clear: both; text-align: center;">
</h3>
Svetlin Ankovhttp://www.blogger.com/profile/03385549086936450194noreply@blogger.com0tag:blogger.com,1999:blog-8625710698093323469.post-50206205222389447822012-06-06T13:06:00.001-07:002016-11-07T13:25:46.415-08:00New Book Renderer in Albite 3<div class="posterous_autopost">
I've been experimenting with a new renderer which would look a bit more realistic. Also, I'm planning to have a different kind of night mode: instead of having a black background, the overal contrast will be decreased and a few light effects will be added so as to simulate reading under the light of a night lamp.<br />
<br />
Of course, there will be an option to switch back to the classic renderer as well.<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="350" src="https://www.youtube.com/embed/jUR2ZtkMCLg?wmode=transparent" width="450"></iframe><br /></div>
Svetlin Ankovhttp://www.blogger.com/profile/03385549086936450194noreply@blogger.com2tag:blogger.com,1999:blog-8625710698093323469.post-90275032459421683662012-06-06T12:46:00.001-07:002016-11-07T13:21:36.451-08:00Albite 3 UII've been working on a custom GUI for Albite 3 which would be a lot slicker, faster and far more useable than what <em>Java Mobile </em>provides by default. The graphics content mainly comes from <em>Android 2.x</em>, though there are some thematic touches from <em>ICS</em>.<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="292" src="https://www.youtube.com/embed/dbcvBWeWOQ0" width="480"></iframe>
<br />
<a name='more'></a><br />
The source code is available at <a href="https://github.com/dumbledore/Albite-UI">GitHub</a>.Svetlin Ankovhttp://www.blogger.com/profile/03385549086936450194noreply@blogger.com0tag:blogger.com,1999:blog-8625710698093323469.post-5588349905794177782011-12-20T14:36:00.001-08:002016-11-07T13:07:59.320-08:00Visualisation of my implementation of a multi-level pseudo-LRU cache<div class="posterous_autopost">
I've just finished my Java implementation of a multi-level pseudo-LRU cache.<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="292" src="https://www.youtube.com/embed/UqplvMV8N0w" width="480"></iframe>
<a name='more'></a><br />
<br />
The abstract code is just 10KB, and a simple direct implementation of the abstract classes is a kilobyte and a half.<br />
Initially, I though of implementing a LFU cache, but then I realised that for caches that are large enough, the pseudo-LRU algorithm would work nicely.<br />
The four main actions on a cache are:<br />
<ul>
<li>adding an item to the cache</li>
<li>getting an item from the cache</li>
<li>invalidating an item in the cache</li>
<li>trashing the whole cache</li>
</ul>
The added items should implement the Cacheable inteface, which requires the implementations to have the `getPhysicalSize()` method, which should return the expected physical size of the item in bytes. Such approach has, of course, it's liabilities but I think it would be good enough for some practical use-cases.<br />
<br />
What's special about my cache is that:<br />
<ul>
<li>It can chain multiple caches, so that removed items from a front cache are not immediately lost, but moved to a back cache.</li>
</ul>
This is useful in situations when the back-cache is slower, but considerably large than the front cache (like a file-based cache), but using it is still faster than recreating the cached item.<br />
On the other hand, one can have multiple smaller specific front caches, all backed-up by a single larger back cache. This would help if there's a tendency to have items from the same type at a given time, effectively expanding their local caches.<br />
<ul>
<li>When there's not enough space in the cache, items need to be removed. Often, only a few items need to be removed at a time. Removing a very small amount of items would mean that the next time one needs to add an item there might again be not enough space in the cache. To remedy this inefficiency, one can choose a minimum limit for the amount space to be freed when trash cleaning is triggered.</li>
</ul>
The code is available at <a href="https://github.com/dumbledore/AlbiteCache" target="_blank">GitHub</a> as usual.</div>
Svetlin Ankovhttp://www.blogger.com/profile/03385549086936450194noreply@blogger.com0tag:blogger.com,1999:blog-8625710698093323469.post-33706359159840972082011-01-08T13:15:00.001-08:002016-11-07T13:02:15.160-08:00AnkSteer (formerly Flypad)Wanted to use your phone as a driving wheel? Finally, a fully working beta of <i>Flypad</i>!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="360" src="https://www.youtube.com/embed/aACtDLwPnVM" width="480"></iframe>
</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<a name='more'></a><br />
<b>Implemented Functionality</b><br />
<ul>
<li>The accelerometer is used to control the Rotation-X analog component of the virtual joystick</li>
<li>Two bars (in green) for the Axis-X & Axis-Y analog components.</li>
<li>Four buttons (in blue) corresponding to buttons 13–16 of the joystick</li>
</ul>
<b>Requirements</b>
<br />
<ul>
<li>32-bit editon of <em>Windows</em></li>
<li><em>Bluetooth</em> receiver, that works with drivers from <em>Bluesoleil</em> or <em>Microsoft</em></li>
<li><a href="http://ppjoy.blogspot.com/2009/11/finally-new-version.html">PPJoy</a></li>
<li>A touchscreen device that runs <em>Java Mobile </em>with an accelerometer and Bluetooth, i.e. <strong>CLDC 1.1, MIDP 2.0, JSR-82, JSR-256</strong></li>
</ul>
<b>Installation</b>
<br />
<ul>
<li>Install <a href="http://ppjoy.blogspot.com/2009/11/finally-new-version.html">PPJoy</a></li>
<li>Insert your <em>Bluetooth</em> dongle</li>
<li>Enable <em>Bluetooth</em> on your phone</li>
<li>Install <span style="font-family: "courier new" , "courier" , monospace;">FlypadPhone-0.9.0.jar</span> on your phone and run it</li>
<li>Grant necessary permissions if asked to</li>
<li>You should see the app showing 'Awaiting client connection'. If it's showing something in red, then you may need to restart your phone and run it again. <em>Bluetooth</em> seems to be buggy on my <em>Samsung Star</em>.</li>
<li>Start<em> Flypad HOST</em> on your PC using <span style="font-family: "courier new" , "courier" , monospace;">start.bat</span>. It should find the device and show its URL. To stop it, press CTRL + C. Due to a certain bug (possibly in my code) it's important the you start <em>Flypad HOST</em> after <em>Flypad PHONE</em> is ready and indicating that it's waiting for client connections.</li>
<li>Open the joystick settings in the Control Panel and check if it's working fine.</li>
<li>You can stop FlypadPhone using the Red key on your device.</li>
</ul>
<b>Notes</b>
<br />
<ul>
<li>May not work well on <em>Nokia</em> phones for the moment because of their autorotate feature.</li>
<li><em>NFSU2</em> doesn't seem to work well with PPJoy.</li>
<li>Doesn't support multitouch so one can't press two buttons at once. It wasn't a problem for me, but it may need some getting used to.</li>
</ul>
The source code is available at GitHub:<br />
<ul>
<li><a href="https://github.com/dumbledore/FlypadHOST">FlypadHOST</a></li>
<li><a href="https://github.com/dumbledore/FlypadPHONE">FlypadPHONE</a></li>
<li>
<a href="https://github.com/dumbledore/FlypadBluetooth">FlypadBluetooth</a></li>
<li><a href="https://github.com/dumbledore/FlypadJoystick">FlypadJoystick</a></li>
<li><a href="https://github.com/dumbledore/FlypadLogger">FlypadLogger</a></li>
</ul>
Svetlin Ankovhttp://www.blogger.com/profile/03385549086936450194noreply@blogger.com0tag:blogger.com,1999:blog-8625710698093323469.post-42022941939870923792010-12-18T14:30:00.001-08:002013-05-06T04:47:08.625-07:00Next project: Flypad!Ever wanted to use that mobile as a <i>driving wheel</i>? Or a <i>keyboard</i>? <i>Touchpad</i>? Well, why <i>not</i>?
<br />
<br />
There you are. <b>Flypad</b>. Using your <i>touchscreen</i> and <i>bluetooth </i>connection, it would be possible to use your <i>Java Mobile</i> phone as:
<br />
<ol>
<li>Wireless mini keyboard</li>
<li>Wireless mini touchpad</li>
<li>Wireless driving wheel (if the phone's got an accelerometer)</li>
</ol>
Have a look at those prototype images of the 'keyboard' and 'touchpad' modes. The code for the 'driving wheel' is also almost ready, though there's nothing to show at the moment.
<br />
<br />
The driving wheel will be available only for Windows through a virtual joystick driver: <a href="http://ppjoy.bossstation.dnsalias.org/">PPJoy</a>. I've tried that and the driver was working just perfectly (even under Vista).
<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaAaby28JvRyFE7QNrJsYvO_ZeTBuU6ST9UAVbLbqDJJNa9vC0wSI-uBQnHXSMtTuTmkIPBXhke17LO_lIYGSQvm-AXet9I5TTw3N0KhWFZahUW8BAKnYxDwjNdNhe38jt_uE3I1NNEV3i/s1600/18831069-alb-kbd-shift-released.png" imageanchor="1" style="float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="120" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaAaby28JvRyFE7QNrJsYvO_ZeTBuU6ST9UAVbLbqDJJNa9vC0wSI-uBQnHXSMtTuTmkIPBXhke17LO_lIYGSQvm-AXet9I5TTw3N0KhWFZahUW8BAKnYxDwjNdNhe38jt_uE3I1NNEV3i/s200/18831069-alb-kbd-shift-released.png" width="200" /></a>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEozi1OMpUe3IV42emkSS8gdCqZREbyfc3zfnUhyphenhypheneuEEkd6OMLvj1WNYJPxspsUWENYCEwFWibJwxbTDdCLA6DlWLyFm22VqU8KG3VawcEfwYSSWlg4yj3I75lT1SgRYVlWNSWUM9vBAj4/s1600/18831070-mousepad.png" imageanchor="1" style="float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="120" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEozi1OMpUe3IV42emkSS8gdCqZREbyfc3zfnUhyphenhypheneuEEkd6OMLvj1WNYJPxspsUWENYCEwFWibJwxbTDdCLA6DlWLyFm22VqU8KG3VawcEfwYSSWlg4yj3I75lT1SgRYVlWNSWUM9vBAj4/s200/18831070-mousepad.png" width="200" /></a>Svetlin Ankovhttp://www.blogger.com/profile/03385549086936450194noreply@blogger.com0tag:blogger.com,1999:blog-8625710698093323469.post-21021457127222595312010-12-18T14:14:00.001-08:002016-11-07T13:28:49.622-08:00Albite READER for Java MobileThe <em>Albite Project </em>is finally ready! <br />
<br />
<a href="http://albite.org/reader_j2me">Albite READER</a> is an ebook reader for <em>Java Mobile</em> that supports <em>ePub</em> e-books and more. <br />
<br />
<a href="http://albite.org/">Albite BOOKS</a> is the home of the reader where one could also find more than <em>2000</em> free ebooks from the public domain that have been specially processed to be read on mobile devices. It's got a <a href="http://m.albite.org/">mobile-friendly version</a>, too.<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="417" src="https://www.youtube.com/embed/yk0naflL6l4" width="500"></iframe>
Svetlin Ankovhttp://www.blogger.com/profile/03385549086936450194noreply@blogger.com0tag:blogger.com,1999:blog-8625710698093323469.post-55769594210079612582010-12-14T05:23:00.001-08:002013-05-06T11:09:05.280-07:00CAE<div class="posterous_autopost">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlQTKPU1VhOxIslhnCtenU7uezYnEDLE5SOjuD6hhHl3JEVtija8yJrvlFzSjaKxem9zgvY3vWcmtjT5A65gPc1hQf87r9X8zE3UZwWk8fwyk-CXdF-WOQfJGsZdXSJOjo7p6rbNvs0Y52/s1600/18650251-CAE-results.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="195" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlQTKPU1VhOxIslhnCtenU7uezYnEDLE5SOjuD6hhHl3JEVtija8yJrvlFzSjaKxem9zgvY3vWcmtjT5A65gPc1hQf87r9X8zE3UZwWk8fwyk-CXdF-WOQfJGsZdXSJOjo7p6rbNvs0Y52/s400/18650251-CAE-results.gif" width="400" /></a></div>
<br />
<br />
Here are my results from the CAE exam I took in 2007. Put here for public reference.</div>
Svetlin Ankovhttp://www.blogger.com/profile/03385549086936450194noreply@blogger.com0tag:blogger.com,1999:blog-8625710698093323469.post-8943851530292366632010-12-14T02:48:00.001-08:002016-11-07T12:46:16.557-08:00Statistics<div class="posterous_autopost">
This is the project I made for my exam on statistics. It is about the financial result of some Bulgarian businesses. The work consists of two parts:<br />
<ol>
<li>Regression analysis by which I try to find a dependency for the financial result.</li>
<li>Factor analysis by which I try to find which factors contribute most to the financial result, i.e. I am trying to group the previously found dependencies into sensible groups.</li>
</ol>
<a name='more'></a><br />
<ol>
</ol>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieYSBk66CakIhkiURiVzMxgsHa12KOiO2HKEwR9PQArY8WBB6JP41PNAoaIgBMGFSDtoIhudv5heQJdl5Zjhqx-uL3AwYUE8YiVyQTOkJazH0AHifpJIFBuOpYiwEtLhKGvjp6abqiG2N9/s1600/18646095-model.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="286" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieYSBk66CakIhkiURiVzMxgsHa12KOiO2HKEwR9PQArY8WBB6JP41PNAoaIgBMGFSDtoIhudv5heQJdl5Zjhqx-uL3AwYUE8YiVyQTOkJazH0AHifpJIFBuOpYiwEtLhKGvjp6abqiG2N9/s400/18646095-model.png" width="400" /></a></div>
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAV9ft0HyiZe6nCdICMctXN0Ey0MkJTL6HfxEBo9f-a5JPcufSEEcOVNxsjZeZEGqPyCE8DCTMDr70zU2XLSi96IQZdkeXd0-7MEmOfI0FMgv0cuAY4iUVXaGZWQ-fvDBnADDrEuY53Vy-/s1600/18646096-normal.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="217" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAV9ft0HyiZe6nCdICMctXN0Ey0MkJTL6HfxEBo9f-a5JPcufSEEcOVNxsjZeZEGqPyCE8DCTMDr70zU2XLSi96IQZdkeXd0-7MEmOfI0FMgv0cuAY4iUVXaGZWQ-fvDBnADDrEuY53Vy-/s400/18646096-normal.png" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0jVhNip_bNbdtaQqCPoNMQyAvYR14C2wY3MhotioShcqb3kWLzE-6xCBLATAJc4Nr3Z2zFX8IVGg34t8avrl3-dofM5gctmCNhAkrVpZPdZNGu2v3Bo-8PXBy15NLCiFPhUdZfk-iQgsB/s1600/18646097-scatter.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="253" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0jVhNip_bNbdtaQqCPoNMQyAvYR14C2wY3MhotioShcqb3kWLzE-6xCBLATAJc4Nr3Z2zFX8IVGg34t8avrl3-dofM5gctmCNhAkrVpZPdZNGu2v3Bo-8PXBy15NLCiFPhUdZfk-iQgsB/s400/18646097-scatter.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<iframe height="360" src="https://docs.google.com/file/d/0BxcC2fJwg4_ia3lkM3ZObVdaN0E/preview" width="480"></iframe><br />
<br />
<br />
And here go the files:<br />
<ul>
<li><a href="https://docs.google.com/file/d/0BxcC2fJwg4_ia3lkM3ZObVdaN0E/edit?usp=sharing">project.pdf</a></li>
<li><a href="https://docs.google.com/file/d/0BxcC2fJwg4_ibXJBSmpVZmtCVFU/edit?usp=sharing">Companies.sav</a></li>
<li><a href="https://docs.google.com/file/d/0BxcC2fJwg4_iNEtfVnc2SnRXRTg/edit?usp=sharing">corell.xls</a></li>
<li><a href="https://docs.google.com/file/d/0BxcC2fJwg4_iUUd0QndoM3FfZ0E/edit?usp=sharing">rep_res.xls</a></li>
</ul>
</div>
Svetlin Ankovhttp://www.blogger.com/profile/03385549086936450194noreply@blogger.com0tag:blogger.com,1999:blog-8625710698093323469.post-67638502850731703922010-12-14T02:20:00.001-08:002016-11-07T12:45:01.121-08:00Numerical Methods for Differential Equations<div class="posterous_autopost">
Here are two of my projects that I made as homework for the <i>Numerical Methods for Differential Equations</i> classes at the university.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1jPSoqY-wMqRNPER46C9tpOsxKAWwIVvv3iktxnrLSH4HnEdF_DvBLARTrfBeVU78u5XQC8kH6bllQfThQI29g93pvuI5kR0VNdNmeGJxKxN2RnBjhc2lJQUtzsDzhHwobYSx4N1iMifu/s1600/18645248-rg4it.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1jPSoqY-wMqRNPER46C9tpOsxKAWwIVvv3iktxnrLSH4HnEdF_DvBLARTrfBeVU78u5XQC8kH6bllQfThQI29g93pvuI5kR0VNdNmeGJxKxN2RnBjhc2lJQUtzsDzhHwobYSx4N1iMifu/s1600/18645248-rg4it.png" /></a></div>
<a name='more'></a><br />
Downloads:<br />
<ul>
<li><a href="https://docs.google.com/file/d/0BxcC2fJwg4_iazExQTBpVHhHX2M/edit?usp=sharing">03_predcorr_done.nb</a></li>
<li><a href="https://docs.google.com/file/d/0BxcC2fJwg4_ickpnRVFSZVlCblk/edit?usp=sharing">03-predcorr.pdf</a></li>
<li><a href="https://docs.google.com/file/d/0BxcC2fJwg4_iSGVYd3E0djRwNmc/edit?usp=sharing">04-diffsch.nb</a></li>
<li><a href="https://docs.google.com/file/d/0BxcC2fJwg4_iR3NQQUF5OEJMYW8/edit?usp=sharing">04-diffsch.pdf</a></li>
</ul>
</div>
Svetlin Ankovhttp://www.blogger.com/profile/03385549086936450194noreply@blogger.com0tag:blogger.com,1999:blog-8625710698093323469.post-72551875124726779662010-12-12T06:27:00.001-08:002016-11-07T12:44:14.982-08:00Planetarium<div class="posterous_autopost">
<span style="color: #444444; font-family: "helvetica" , "arial" , "freesans" , "clean" , sans-serif; font-size: 12px; line-height: 16px;"><iframe allowfullscreen="" frameborder="0" height="288" src="https://www.youtube.com/embed/kwo3_zpP3Dw" width="480"></iframe>
</span></div>
<br />
<br />
<div class="posterous_autopost">
As a task for my course on <em>Programming with Java </em>at the university (back in 2007), I wrote a simple simulation of the Solar system using <em>Java</em>'s <em>Graphics2D</em>. I am not proud of the implementation, but that was first serious <em>Java</em> project at the university.<br /><br />The sources are available at <a href="https://github.com/dumbledore/Planetarium">GitHub</a>.</div>
Svetlin Ankovhttp://www.blogger.com/profile/03385549086936450194noreply@blogger.com0tag:blogger.com,1999:blog-8625710698093323469.post-52651494631566293762010-12-12T04:04:00.001-08:002016-11-07T12:34:28.494-08:00Hellos PCs!<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhphM57kmRY9VWom-TdYLnu1zaYim_oiP1AcidcXbmcYXW-TXuhzaoxJPfOlppG21FiDd6khSaooumPddN4Z6MIjaS8PMsF-mEzrjUcKhPgIzK2cjVxzF6TeTvwx8Ovt157IQjZmIgEExf4/s1600/18557193-bits.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhphM57kmRY9VWom-TdYLnu1zaYim_oiP1AcidcXbmcYXW-TXuhzaoxJPfOlppG21FiDd6khSaooumPddN4Z6MIjaS8PMsF-mEzrjUcKhPgIzK2cjVxzF6TeTvwx8Ovt157IQjZmIgEExf4/s400/18557193-bits.png" width="400" /></a></div>
<div>
<br /></div>
This is a series of lessons that I made with the intention of integrating non-computer users to the computer world. In other words, it's not about learning <i>how </i>to use the pc, but about getting familiar with the world of PCs <i>in general</i>.
<br />
<a name='more'></a><br />
<iframe height="480" src="https://docs.google.com/file/d/0BxcC2fJwg4_iZmNSMEdPRTVxaDA/preview" style="height: 321px; width: 418px;" width="640"></iframe><br />
<br />
<iframe height="480" src="https://docs.google.com/file/d/0BxcC2fJwg4_iaWphT0Zpa0xWcU0/preview" style="height: 380px; width: 416px;" width="640"></iframe><br />
<br />
<iframe height="480" src="https://docs.google.com/file/d/0BxcC2fJwg4_iTDA4ZVVyX2x1OWs/preview" style="height: 352px; width: 416px;" width="640"></iframe><br />
<br />
<iframe height="480" src="https://docs.google.com/file/d/0BxcC2fJwg4_iZVpmZ3NPZVIxaWM/preview" style="height: 478px; width: 416px;" width="640"></iframe><br />
Svetlin Ankovhttp://www.blogger.com/profile/03385549086936450194noreply@blogger.com0tag:blogger.com,1999:blog-8625710698093323469.post-70679976354318209682010-12-12T02:36:00.001-08:002016-11-07T12:32:00.830-08:00Kimura's model of DNA replicationThat's my first biomath project. It is based on <a href="http://mathworld.wolfram.com/LinearOperator.html">linear operators</a>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXwF_FkTV33WM_rn3bFtDJVkLo8f6TwiFCNq23qwGXmVAdxUQf9hNUsL4jH35cxKiA9nTGcgXnadEMiYy1qH4NiRDvuKiOlN_FOorXbpkbn-j3J4QLZLd-iX70sWHuO2cgL2YArDF5dYI6/s1600/18554402-eye-view.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXwF_FkTV33WM_rn3bFtDJVkLo8f6TwiFCNq23qwGXmVAdxUQf9hNUsL4jH35cxKiA9nTGcgXnadEMiYy1qH4NiRDvuKiOlN_FOorXbpkbn-j3J4QLZLd-iX70sWHuO2cgL2YArDF5dYI6/s400/18554402-eye-view.png" width="350" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<a name='more'></a><br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<iframe height="360" src="https://docs.google.com/file/d/0BxcC2fJwg4_iS3RfRXBkc3VtLUk/preview" style="height: 360px; width: 381px;" width="480"></iframe><br />Svetlin Ankovhttp://www.blogger.com/profile/03385549086936450194noreply@blogger.com0tag:blogger.com,1999:blog-8625710698093323469.post-84379353757429103142010-12-11T14:20:00.001-08:002016-11-07T12:29:03.104-08:00Bounding Rectangle with Matlab<div class="posterous_autopost">
Around summer 2009 I fiddled with the <a href="https://en.wikipedia.org/wiki/Minimum_bounding_box_algorithms">minimum bounding box</a> problem and I made a Matlab script for demonstrative purposes.<br />
<br />
The source code is available at <a href="https://github.com/dumbledore/Bounding-Rectangle-with-Matlab">GitHub</a>.</div>
Svetlin Ankovhttp://www.blogger.com/profile/03385549086936450194noreply@blogger.com0tag:blogger.com,1999:blog-8625710698093323469.post-61523835560279855522010-12-11T14:17:00.001-08:002016-11-07T12:26:51.106-08:00LZW Compressor in Python<div class="posterous_autopost">
While studying <em>Python </em>at the university, I was given a task to implement a <em>LZW </em>compressor in <em>Python</em>. It's not very efficient, but it work fine.<br />
<br />
The source code is available at <a href="https://github.com/dumbledore/Python-LZW-Compressor">GitHub</a>.</div>
Svetlin Ankovhttp://www.blogger.com/profile/03385549086936450194noreply@blogger.com0tag:blogger.com,1999:blog-8625710698093323469.post-92045300202636498872010-12-11T14:13:00.001-08:002016-11-07T12:32:44.753-08:00Python Projects from School<div class="posterous_autopost">
I studied Python at the university and we had some simple tasks for homework.<br />
<br />
My solutions are available at <a href="https://github.com/dumbledore/Python-Projects-from-School">GitHub</a>.<br />
</div>
Svetlin Ankovhttp://www.blogger.com/profile/03385549086936450194noreply@blogger.com0tag:blogger.com,1999:blog-8625710698093323469.post-40019008704733493482010-12-11T14:06:00.001-08:002016-11-07T12:32:48.768-08:00ArchiforgeI made <a href="http://archiforge.com/">ARCHIFORGE.com</a> around 2006. It's been modified since that time as there are some visual glitches, but for most of its part it is true to my original idea. Built using <em>PHP</em>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_LLoyV_Z-MFD-ELSlLSpCA_xpdI6U8CZFtkRwjyWSj9tGxVCn6-jtXUNcAGPxcikq3eALaxgs4bBZz8nn5JGU7HqoF9-GbnHXgYml8UYh5BAqmH37_emeqX60CJkzQ7EMOslSKoX2-rP5/s1600/18538781-archiforgelogo.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_LLoyV_Z-MFD-ELSlLSpCA_xpdI6U8CZFtkRwjyWSj9tGxVCn6-jtXUNcAGPxcikq3eALaxgs4bBZz8nn5JGU7HqoF9-GbnHXgYml8UYh5BAqmH37_emeqX60CJkzQ7EMOslSKoX2-rP5/s200/18538781-archiforgelogo.png" width="200" /></a></div>
<br />
<img border="0" height="155" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY8MFq5kBv36mO3TYNHDB9lJUt1ALxeBlKnGODV36oiZhi0oZkEzeyURue4SV76MPZmprWp01v2EnKBzdT2_PnMhU6iMey-hdeznY263X54CzzLsuGCEkL2xe_f2c26jEFefmVAOMnUmur/s200/18538782-archiforgesite.png" width="200" />
Svetlin Ankovhttp://www.blogger.com/profile/03385549086936450194noreply@blogger.com0tag:blogger.com,1999:blog-8625710698093323469.post-9832622532925942442010-12-11T04:03:00.001-08:002016-11-07T12:17:59.511-08:00Biomathematics I taughtI had the wonderful opportunity to assist in a biomathematics class.<br />
<br />
Most of the Mathematica notebooks are interactive.<br />
<br />
It features:
<br />
<ul>
<li>A simple linear model of the blood cell lifecycle</li>
<li>Linear models for describing population growth: models of Lesli and Levkovitz</li>
<li>Linear regression along with an example</li>
<li>Simple DNA mutation models: models of Kimura and Jack-Cantor</li>
</ul>
<div>
<a name='more'></a><br />
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbkVsABThHrHehk2x8NMIgwZSriS87E19lWnj8lsdlyZM57enZX4f3z0nXkAPjExtyLDIhK2Qtvn3HfX_X7Cw7NPJURFf8n-lbVdRWXdgvrJ-iM_qaIk4swQOqB3cuCmHqYqYZ12gJxsTK/s1600/18645454-rbc.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="209" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbkVsABThHrHehk2x8NMIgwZSriS87E19lWnj8lsdlyZM57enZX4f3z0nXkAPjExtyLDIhK2Qtvn3HfX_X7Cw7NPJURFf8n-lbVdRWXdgvrJ-iM_qaIk4swQOqB3cuCmHqYqYZ12gJxsTK/s320/18645454-rbc.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkypwtkWjFk0-q9i8WrkPwBrE28W59zgTzORqTiX2ltMMOdFw35CNgjl-bDQqKWug1Fl7Qw1VOMBPKkk81z7VNwuLMk3Bd0Hjkoy3LMrEsUIkDZWIny3svcCK1CakutukGsH2AkeqkFzyX/s1600/18645475-phase.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkypwtkWjFk0-q9i8WrkPwBrE28W59zgTzORqTiX2ltMMOdFw35CNgjl-bDQqKWug1Fl7Qw1VOMBPKkk81z7VNwuLMk3Bd0Hjkoy3LMrEsUIkDZWIny3svcCK1CakutukGsH2AkeqkFzyX/s320/18645475-phase.png" width="242" /></a></div>
<br />
One can download the full suit <a href="https://drive.google.com/folderview?id=0BxcC2fJwg4_iRXByc3VrVVduM3c&usp=sharing">here</a>.<br />
<br />
One also download the content from <a href="http://debian.fmi.uni-sofia.bg/~boev/">the official site</a>. It uses my own <em>CMS </em>system written in <em>PHP</em>. The source code is available at <a href="https://github.com/dumbledore/Boev">GitHub</a>.
<br />
<br />
<br />Svetlin Ankovhttp://www.blogger.com/profile/03385549086936450194noreply@blogger.com0tag:blogger.com,1999:blog-8625710698093323469.post-55549256964427019982010-12-11T03:02:00.001-08:002013-11-28T11:48:08.437-08:00Rendering Fractal Flames with MathematicaHere is a project of mine from last summer. It's about rendering <a href="http://en.wikipedia.org/wiki/Fractal_flame">Fractal Flames</a> using <a href="http://www.wolfram.com/mathematica/">Mathematica</a>. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_nCyrgz2niUdVt4Xp6U1o3rwz8M6LFoFK44I4LZC_2-5NrJWXLJFwhmA3tr6Nr1VP180fWNb0Nc3hPX9oExtyhrQiHOa9tCUL-GqIiz4tWjYVYwQodb9VgSjTcUrBfIews-Pg8if5h9FG/s1600/18522916-fractals.20100707.075004.rendered.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><br /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_nCyrgz2niUdVt4Xp6U1o3rwz8M6LFoFK44I4LZC_2-5NrJWXLJFwhmA3tr6Nr1VP180fWNb0Nc3hPX9oExtyhrQiHOa9tCUL-GqIiz4tWjYVYwQodb9VgSjTcUrBfIews-Pg8if5h9FG/s1600/18522916-fractals.20100707.075004.rendered.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><br /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_nCyrgz2niUdVt4Xp6U1o3rwz8M6LFoFK44I4LZC_2-5NrJWXLJFwhmA3tr6Nr1VP180fWNb0Nc3hPX9oExtyhrQiHOa9tCUL-GqIiz4tWjYVYwQodb9VgSjTcUrBfIews-Pg8if5h9FG/s1600/18522916-fractals.20100707.075004.rendered.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_nCyrgz2niUdVt4Xp6U1o3rwz8M6LFoFK44I4LZC_2-5NrJWXLJFwhmA3tr6Nr1VP180fWNb0Nc3hPX9oExtyhrQiHOa9tCUL-GqIiz4tWjYVYwQodb9VgSjTcUrBfIews-Pg8if5h9FG/s320/18522916-fractals.20100707.075004.rendered.png" width="319" /></a></div>
<a name='more'></a><br />
<br />
<iframe height="360" src="https://docs.google.com/file/d/0BxcC2fJwg4_iRmZxWlJXMFBLZ28/preview" width="480"></iframe><br />
Here's the <a href="https://docs.google.com/file/d/0BxcC2fJwg4_iZTl0Zjg0MnBxekU/edit?usp=sharing">Mathematica notebook</a>.Svetlin Ankovhttp://www.blogger.com/profile/03385549086936450194noreply@blogger.com0tag:blogger.com,1999:blog-8625710698093323469.post-86253119451796316812010-11-13T07:14:00.001-08:002010-11-13T07:14:42.200-08:00Comparison of e-book formats<div class='posterous_autopost'>I am deeply interested in ebook formats and their natural diversity. Thus, I really liked <a href="http://en.wikipedia.org/wiki/Comparison_of_e-book_formats">this article at wikipedia</a>, which discusses quite a few formats in some adequate detail.</div>Svetlin Ankovhttp://www.blogger.com/profile/03385549086936450194noreply@blogger.com0tag:blogger.com,1999:blog-8625710698093323469.post-65278087954723534982010-11-13T07:11:00.001-08:002010-11-13T07:11:04.926-08:00Evolution of mobile web standards<div class='posterous_autopost'>I find <a href="http://upload.wikimedia.org/wikipedia/commons/thumb/b/bb/Mobile_Web_Standards_Evolution_Vector.svg/500px-Mobile_Web_Standards_Evolution_Vector.svg.png">this image at wikipedia</a> on the evolution of mobile web standards really instructive.</div>Svetlin Ankovhttp://www.blogger.com/profile/03385549086936450194noreply@blogger.com0tag:blogger.com,1999:blog-8625710698093323469.post-55842551011609663362010-11-11T12:50:00.001-08:002010-11-11T12:50:13.766-08:00Html_escape, a.k.a h doesn't escape single quotes<div class='posterous_autopost'>One should always use double quotes for specifying html attributes, if the attribute content comes from outside, as the <i>html_escape </i>helper escapes only double quotes. In other words:<p /><div><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex;"> <b>HTML_ESCAPE </b>= { '&' => '&', '>' => '>', '<' => '<', '"' => '"' }</blockquote> <p /></div></div>Svetlin Ankovhttp://www.blogger.com/profile/03385549086936450194noreply@blogger.com0