refactor: moved to hugo

This commit is contained in:
Felipe M 2024-06-16 20:39:53 +02:00
parent 4c6912edd0
commit e77e5583c2
Signed by: fmartingr
GPG key ID: CCFBC5637D4000A8
604 changed files with 1675 additions and 2279 deletions

View file

@ -0,0 +1,112 @@
+++
title = "Weekly project status: Dropping projects is hard"
date = 2013-01-12
+++
![](weekly-project-status-banner.jpg)
Since I wrote [the last post of
2012](http://fmartingr.com/blog/2012/12/31/2013/) I have been wondering if I
could finish -or at least, work- on all the projects or experiments I wanted
to. The answer was easy: **no**. I just don't have enough time for all the
stuff I want to do, so I have made some decisions about my projects.
## Project _herobrine_ **_…dropped!_**
!["Early draft of Project
Herobrine"](minecraft-database.png)
The first time I did something about this project was like 2010, as some of
you have guessed by the name of the project, its minecraft related. It was
intended to be a _wowhead-like_ minecraft database but not only on PC.
Some features I wanted:
* Developed with django, returning json objects to the client.
* Client MVC based with BackboneJS
* Responsive design -so you can check with your tablet while play on your computer-
* "no refresh" -backbone-
* WebGL/Canvas block rendering
* JS Redstone circuit maker
* JS Dye maker
* Homepage with random background featuring user's screenshots (above)
* Interactive crafting/brewing/…
Finally I have to say goodbye to this _jewel_ -and it's really hard because I
love minecraft and I wanted this to happen- because of various reasons:
[minecraftwiki](http://minecraftwiki.net/) already contains a lot of
information -and it's really crowded-, the barrier of contents -I have to type
in all the minecraft items, blocks, biomes, etc- and that this wasn't really a
technical challenge -actually, some things are, but most of it are just
database relations and stuff-.
I want to prepare a future post with all the work I made on this project.
There's not much code but a lot of drafts and ideas that could help someone.
## Project _Serenity_ **_…dropped!_**
This was intended to be a way to simplify my jenkins business. Since I need a
lot of tasks like: compile, minify, copy, deploy, upload, test… I wanted an
app so I just define everything I need on a _YAML_ file and call the app with
`serenity <task>`.
I have some drafts built, a base YAML file, and some features planned like
integrated tasks, custom tasks in the YAML file, configuration…
Haven't coded for this one yet, but fortunately I heard about
[grunt](http://gruntjs.com/) who may be something very close at what I wanted
this one to be.
## ZombiePress ([github](http://github.com/fmartingr/zombiepress/))
**_…dropped!_**
It's obvious. I was making my own blog software but since now I'm a proud
octopress user this is no longer needed. I will keep the repo online just for
making me feel nostalgic in the future.
## BlueBird **_…dropped!_**
For all the iPad users… remember when Twitter changed the UI of the app? Did
you remember the old one? I do. The new interface is **total crap**, the other
was simply brilliant, and for me it was near the best one for an iOS app. I
was hoping to get a clone working in javascript, but my knowledge of touch
screens is not that good, I need to study more on the matter and then**maybe**
I will try again, but I'm pretty sure some javascript guru will do something
before that happens.
## Project _Amaranth_
The bigger brother. Recently I started a Vampire: Dark Age game with some
friends and it remembered me to when I played rolegames over IRC. I started
thinking that a online interface for roleplaying will be nice to have, because
you can also use it in a live session to whisper, draw, etc. The brainstorm
started quick enough for me to consider making it.
## Project _RTC_
Just born! -yesterday :P-. I want to make some kind of webRTC site to have
conversations without the need of register, just create a conversation, get a
link and you are set. It's more an experiment than a project itself.
## Uvepe8 ([github](http://github.com/fmartingr/uvepe8/))
I'm very proud -in a useful way- of this one and of course I'm maintaining it.
For the ones who don't know, its sort of _video-to-html5-canvas_, a mix
between apple's and sublime text's, but mines support transparency -I needed
it-.
There are some features I want to implement shown on the README file and a
full code review.
## Dharma ([github](http://github.com/fmartingr/dharma/))
An application to check for 404 links on websites, a lot of things could be
added to this, but for now is for playing around with threading, gevent and
that kind of things.
I have some _other things_ in mind I want to try, but that deserves another
post -which is already in the works-.
Stay tuned for more updates, and as always, anything you want to say: comment,
tweet, mail or shout at me!

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View file

@ -0,0 +1,60 @@
+++
title = "Tweeria: The MMORPG people without time can play"
date = 2013-01-14
+++
!["Tweeria
summary"](header.png)
Many of us -or maybe not, but let's assume that- have played at least one
_MMORPG_ game in our life and we know that it could be _very_ time consuming.
Level up, going to instances, getting better year… and if you was _hardcore_
enough: scheduled raids.
As we grow up we notice that the time for this kind of things fade away, but
you still want to party with friends and get some_purples_. Until I found
**Tweeria**, that **brilliant idea** of using your twitter posts to interact
with your _alter-ego_ on a MMORPG world.
!["My
profile"](profile.png)
It shares some of the features of common MMORPGs but the good part is that
**we don't need to do anything else that _tweet_**for many of them, so your
character makes an action for every tweet you post -I think it's not every
tweet, just a few in a period of time, haven't checked it-. You can defeat
_NPCs_, loot an item, going onto a dungeon alone… you can even save -or kill
:P- your friends if you mention or _retweet_ them in your tweets.
!["Upcoming and in-progress
raids"](events.png)
However, there are some things that needs user interaction: the raids. You can
have up to five scheduled raids at the same time but you need to join for it
manually. However, it's fast and easy: you just need to get into the events
page and join the event you want. For gear swapping, selling items and buying
spells you need to interact on the site too. According to the posts you can
craft items and spells but that part of the game does not work for me, so I
don't know how it works.
!["Some tweeria stats
windows"](stats.png)
Another thing you can do to interact with your character is using spells. For
that, you need to buy on the market first, and when you have them equipped,
you can cast one by tweeting `!<spell shortcut>` on a given tweet, the game
will use it_automagically_.
Oh, did I mention that also have **achievements**?
!["The beautiful
map"](map.png)
As I've said, it surprised me how the most basic idea can be developed into a
very enjoyable game. Unlike _ogame_, _travian_, and its brothers, you don't
need to check the site every minute.
But to be honest… I tweet more often since I play _Tweeria_.
If you want to check it out [follow this link and join the world of
tweeria](http://tweeria.com/registration?fmartingr). You'll help me getting an
achievement! :D

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

View file

@ -0,0 +1,27 @@
+++
title = "Manga Recommendation: Kamisama no Iutoori (Fujimura Akeji)"
date = 2013-01-20
+++
!["Kamisama no Iutoori \(FUJIMURA
Akeji\)"](kamisama-no-
iutoori.jpg)
### Summary
Takahata Shun's day at high school begins just as normal and boring as ever,
but it doesn't end that way. After his teacher's head explodes, he and his
classmates find themselves forced to play children's games, such as Daruma ga
Koronda (a game like Red Light/Green Light), with deadly stakes. With no idea
who is behind this mysterious deadly game session, and no way of knowing when
it will finally end, the only thing Shun and other students can do is keep
trying to win…
**Volumes**: 5
**Chapters**: 21 (finished)
**Genre**: Action, Horror, School, Shonen, Supernatural
**Story**: Muneyuki Kaneshiro
**Art**: Akeji Fujimura
Thanks to [@rsanchezbalo](http://twitter.com/rsanchezbalo) for his
recommendation!

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

View file

@ -0,0 +1,19 @@
+++
title = "Manga recommendation: Psyren"
date = 2013-02-23
+++
!["Psyren"](psyren-cover.png)
### Summary
Psyren follows the adventures of Ageha Yoshina, a high school student who is
chosen by Nemesis Q as a participant in the Psyren games. The games take place
in a world known initially as Psyren, which is revealed to be the real world a
decade in the future. Ageha and his friends attempt to alter the future and
save the world from becoming Psyren.
**Volumes**: 16
**Chapters**: 145 (finished)
**Genre**: Action, Adventure, Game, Romance, Sci-Fi, Shounen, Super Power, Supernatural, Psychological
**Story/Art**: Tokashi Iwashiro

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 KiB

View file

@ -0,0 +1,298 @@
+++
title = "Where to buy Warcraft books ordered by storyline"
date = 2013-02-23
+++
I've reunited a list with all the warcraft books sorted by the storyline of
the lore. Some of 'em occur at the same time so if you see the same book twice
that's the reason.
More info on [WowWiki](http://www.wowwiki.com/Story_guide).
<table cellpadding="0" cellspacing="0">
<thead>
<tr>
<th>Book name</th>
<th>Amazon COM</th>
<th>Amazon UK</th>
<th>Kindle</th>
<th>BookDepository</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Pre-game timeline events</strong></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>The war of the ancients Trilogy</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>- The Well of Eternity</td>
<td><a href="http://www.amazon.com/The-Well-Eternity-WarCraft-Ancients/dp/0743471199/">Amazon.com</a></td>
<td><a href="http://www.amazon.co.uk/Warcraft-Well-Eternity-Bk-Ancients/dp/0743471199/">Amazon.co.uk</a></td>
<td><a href="http://www.amazon.com/Warcraft-Ancients-Well-Eternity-ebook/dp/B000FC1LP6/">Kindle</a></td>
<td><a href="http://www.bookdepository.co.uk/Warcraft-Well-Eternity-Bk-1-Richard-Knaak/9780743471190">BookDepository</a></td>
</tr>
<tr>
<td>- The Demon Soul</td>
<td><a href="http://www.amazon.com/Demon-Soul-Warcraft-Ancients-Book/dp/0743471202/">Amazon.com</a></td>
<td><a href="http://www.amazon.co.uk/Warcraft-Demon-Soul-Bk-Ancients/dp/0743471202/">Amazon.co.uk</a></td>
<td><a href="http://www.amazon.com/Warcraft-Ancients-Demon-Soul-ebook/dp/B000QBYENC/">Kindle</a></td>
<td><a href="http://www.bookdepository.co.uk/Warcraft-Demon-Soul-Bk-2-Richard-Knaak/9780743471206">BookDepository</a></td>
</tr>
<tr>
<td>- The Sundering</td>
<td><a href="http://www.amazon.com/Sundering-Warcraft-Ancients-Trilogy-Book/dp/0743471210/">Amazon.com</a></td>
<td><a href="http://www.amazon.co.uk/gp/product/0743471210/">Amazon.co.uk</a></td>
<td><a href="http://www.amazon.co.uk/Warcraft-Sundering-Bk-War-Ancients/dp/0743471210/">Kindle</a></td>
<td><a href="http://www.bookdepository.co.uk/Warcraft-Sundering-Bk-3-Richard-Knaak/9780743471213">BookDepository</a></td>
</tr>
<tr>
<td>War of the Shifting Sands [<em>Short story</em>]</td>
<td><a href="http://us.battle.net/wow/en/game/lore/short-story/shifting-sands/1">Battle.net</a></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Rise of the Horde</td>
<td><a href="http://www.amazon.com/World-Warcraft-Rise-Horde-No/dp/0743471385/">Amazon.com</a></td>
<td><a href="http://www.amazon.co.uk/Rise-Horde-No-World-Warcraft/dp/0743471385/">Amazon.co.uk</a></td>
<td><a href="http://www.amazon.com/World-Warcraft-Rise-Horde-ebook/dp/B000QCTN50/">Kindle</a></td>
<td><a href="http://www.bookdepository.co.uk/Rise-Horde-Rise-Horde-No-4-Christie-Golden/9780743471381">BookDepository</a></td>
</tr>
<tr>
<td>Unbroken [<em>Short story</em>]</td>
<td><a href="http://us.battle.net/wow/en/game/lore/short-story/unbroken/1">Battle.net</a></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td><strong>Warcraft: Orcs and Humans</strong></td>
<td><em>The first war</em></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Last Guardian</td>
<td><a href="http://www.amazon.com/Last-Guardian-Warcraft-Book-No-3/dp/0671041517/">Amazon.com</a></td>
<td><a href="http://www.amazon.co.uk/Warcraft-Last-Guardian-No-3/dp/0671041517/">Amazon.co.uk</a></td>
<td><a href="http://www.amazon.com/The-Warcraft-Last-Guardian-ebook/dp/B000FC0QTS/">Kindle</a></td>
<td><a href="http://www.bookdepository.co.uk/Warcraft-Last-Guardian-No3-Jeff-Grubb/9780671041519">BookDepository</a></td>
</tr>
<tr>
<td><strong>Warcraft II</strong></td>
<td><em>The second war</em></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Tides of Darkness</td>
<td><a href="http://www.amazon.com/Tide-Darkness-Warcraft-Aaron-Rosenberg/dp/1416539905/">Amazon.com</a></td>
<td><a href="http://www.amazon.co.uk/Tides-Darkness-World-Warcraft-Rosenberg/dp/1416539905/">Amazon.co.uk</a></td>
<td><a href="http://www.amazon.com/World-Warcraft-Tides-Darkness-ebook/dp/B000UZQJIC/">Kindle</a></td>
<td><a href="http://www.bookdepository.co.uk/Tides-Darkness-Aaron-Rosenberg/9781416539902">BookDepository</a></td>
</tr>
<tr>
<td>Beyond the Dark Portal</td>
<td><a href="http://www.amazon.com/Beyond-Dark-Portal-World-Warcraft/dp/1416550860/">Amazon.com</a></td>
<td><a href="http://www.amazon.co.uk/Beyond-Dark-Portal-World-Warcraft/dp/1416550860/">Amazon.co.uk</a></td>
<td><a href="http://www.amazon.com/World-Warcraft-Beyond-Portal-ebook/dp/B0013TX8YC/">Kindle</a></td>
<td><a href="http://www.bookdepository.co.uk/Beyond-Dark-Portal-Aaron-Rosenberg/9781416550860">BookDepository</a></td>
</tr>
<tr>
<td><strong>Post-Warcraft II</strong> &amp; <strong>Pre-Warcraft III</strong></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Day of the Dragon</td>
<td><a href="http://www.amazon.com/Day-Dragon-WarCraft-Book-No-1/dp/0671041525/">Amazon.com</a></td>
<td><a href="http://www.amazon.co.uk/Warcraft-Day-Dragon-No-1/dp/0671041525/">Amazon.co.uk</a></td>
<td><a href="http://www.amazon.com/Warcraft-Day-Dragon-No-1-ebook/dp/B000FBJHTY/">Kindle</a></td>
<td><a href="http://www.bookdepository.co.uk/Warcraft-Day-Dragon-No1-Richard-Knaak/9780671041526">BookDepository</a></td>
</tr>
<tr>
<td>Lord of the Clans</td>
<td><a href="http://www.amazon.com/Lord-Clans-Warcraft-Book-2/dp/0743426908/">Amazon.com</a></td>
<td><a href="http://www.amazon.co.uk/Warcraft-Lord-Clans-No/dp/0743426908/">Amazon.co.uk</a></td>
<td><a href="http://www.amazon.com/Warcraft-Lord-Clans-2-ebook/dp/B000FC0RC4/">Kindle</a></td>
<td><a href="http://www.bookdepository.co.uk/Warcraft-Lord-Clans-No-2-Christie-Golden/9780743426909">BookDepository</a></td>
</tr>
<tr>
<td>Of Blood and Honor</td>
<td><a href="http://www.amazon.com/Warcraft-Blood-Honor-ebook/dp/B000FC0WII/">Amazon.com</a></td>
<td><a href="http://www.amazon.co.uk/Warcraft-Blood-Honor-ebook/dp/B003ZDOVGI/">Amazon.co.uk</a></td>
<td><a href="http://www.amazon.com/Warcraft-Of-Blood-Honor-ebook/dp/B000FC0WII/">Kindle</a></td>
<td>&ndash;</td>
</tr>
<tr>
<td>Road to Damnation [<em>Short story</em>]</td>
<td><a href="http://us.battle.net/wow/en/game/lore/short-story/damnation/1">Battle.net</a></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td><strong>Warcraft III: Reign of Chaos</strong></td>
<td><em>The third war</em></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Arthas: Rise of the Lich King</td>
<td><a href="http://www.amazon.com/World-Warcraft-Arthas-Rise-Lich/dp/143915760X/">Amazon.com</a></td>
<td><a href="http://www.amazon.co.uk/Arthas-Rise-Lich-World-Warcraft/dp/143915760X/">Amazon.co.uk</a></td>
<td><a href="http://www.amazon.com/World-of-Warcraft-Arthas-ebook/dp/B001NLL6LM/">Kindle</a></td>
<td><a href="http://www.bookdepository.co.uk/World-Warcraft-Arthas-Christie-Golden/9781416550778">BookDepository</a></td>
</tr>
<tr>
<td><strong>Warcraft III: The Frozen Throne</strong></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>The war of the ancients Trilogy</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>- The Well of Eternity</td>
<td><a href="http://www.amazon.com/The-Well-Eternity-WarCraft-Ancients/dp/0743471199/">Amazon.com</a></td>
<td><a href="http://www.amazon.co.uk/Warcraft-Well-Eternity-Bk-Ancients/dp/0743471199/">Amazon.co.uk</a></td>
<td><a href="http://www.amazon.com/Warcraft-Ancients-Well-Eternity-ebook/dp/B000FC1LP6/">Kindle</a></td>
<td><a href="http://www.bookdepository.co.uk/Warcraft-Well-Eternity-Bk-1-Richard-Knaak/9780743471190">BookDepository</a></td>
</tr>
<tr>
<td>- The Demon Soul</td>
<td><a href="http://www.amazon.com/Demon-Soul-Warcraft-Ancients-Book/dp/0743471202/">Amazon.com</a></td>
<td><a href="http://www.amazon.co.uk/Warcraft-Demon-Soul-Bk-Ancients/dp/0743471202/">Amazon.co.uk</a></td>
<td><a href="http://www.amazon.com/Warcraft-Ancients-Demon-Soul-ebook/dp/B000QBYENC/">Kindle</a></td>
<td><a href="http://www.bookdepository.co.uk/Warcraft-Demon-Soul-Bk-2-Richard-Knaak/9780743471206">BookDepository</a></td>
</tr>
<tr>
<td>- The Sundering</td>
<td><a href="http://www.amazon.com/Sundering-Warcraft-Ancients-Trilogy-Book/dp/0743471210/">Amazon.com</a></td>
<td><a href="http://www.amazon.co.uk/gp/product/0743471210/">Amazon.co.uk</a></td>
<td><a href="http://www.amazon.co.uk/Warcraft-Sundering-Bk-War-Ancients/dp/0743471210/">Kindle</a></td>
<td><a href="http://www.bookdepository.co.uk/Warcraft-Sundering-Bk-3-Richard-Knaak/9780743471213">BookDepository</a></td>
</tr>
<tr>
<td>Cycle of Hatred</td>
<td><a href="http://www.amazon.com/Cycle-Hatred-World-Warcraft-Bk/dp/0743471369/">Amazon.com</a></td>
<td><a href="http://www.amazon.co.uk/Cycle-Hatred-World-Warcraft-Paperback/dp/0743471369/">Amazon.co.uk</a></td>
<td><a href="http://www.amazon.com/World-Warcraft-Cycle-Hatred-ebook/dp/B000GCFXKY/">Kindle</a></td>
<td><a href="http://www.bookdepository.co.uk/Warcraft-Cycle-Hatred-Bk-4-Keith-DeCandido/9780743471367">BookDepository</a></td>
</tr>
<tr>
<td><strong>World of Warcraft</strong></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>War of the Shifting Sands [<em>Short story</em>]</td>
<td><a href="http://us.battle.net/wow/en/game/lore/short-story/shifting-sands/1">Battle.net</a></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td><strong>WoW: The Burning Crusade</strong></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Night of the Dragon</td>
<td><a href="http://www.amazon.com/World-Warcraft-Dragon-Richard-Knaak/dp/0743471377/">Amazon.com</a></td>
<td><a href="http://www.amazon.co.uk/Night-Dragon-World-Warcraft-Richard/dp/0743471377/">Amazon.co.uk</a></td>
<td><a href="http://www.amazon.com/World-Warcraft-Night-Dragon-ebook/dp/B001FA0I2Y/">Kindle</a></td>
<td><a href="http://www.bookdepository.co.uk/Night-Dragon-Richard-Knaak/9780743471374">BookDepository</a></td>
</tr>
<tr>
<td><strong>WoW: Wrath of the Lich King</strong></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Stormrage</td>
<td><a href="http://www.amazon.com/World-Warcraft-Stormrage-Richard-Knaak/dp/1439189463/">Amazon.com</a></td>
<td><a href="http://www.amazon.co.uk/Stormrage-World-Warcraft-Richard-Knaak/dp/1439189463/">Amazon.co.uk</a></td>
<td><a href="http://www.amazon.com/World-of-Warcraft-Stormrage-ebook/dp/B0037714S0/">Kindle</a></td>
<td><a href="http://www.bookdepository.co.uk/Stormrage-Richard-Knaak/9781439189467">BookDepository</a></td>
</tr>
<tr>
<td>The Shattering: Prelude to Cataclysm</td>
<td><a href="http://www.amazon.com/World-Warcraft-Shattering-Prelude-Cataclysm/dp/1416550747/">Amazon.com</a></td>
<td><a href="http://www.amazon.co.uk/World-Warcraft-Shattering-Prelude-Cataclysm/dp/1416550747/">Amazon.co.uk</a></td>
<td><a href="http://www.amazon.com/World-Warcraft-The-Shattering-ebook/dp/B003L785VK/">Kindle</a></td>
<td><a href="http://www.bookdepository.co.uk/Shattering-Christie-Golden/9781439172742">BookDepository</a></td>
</tr>
<tr>
<td><strong>WoW: Cataclysm</strong></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Wolfheart</td>
<td><a href="http://www.amazon.com/World-Warcraft-Wolfheart-Richard-Knaak/dp/1451605765/">Amazon.com</a></td>
<td><a href="http://www.amazon.co.uk/Wolfheart-World-Warcraft-Cataclysm-Richard/dp/1451605765/">Amazon.co.uk</a></td>
<td><a href="http://www.amazon.com/World-of-Warcraft-Wolfheart-ebook/dp/B004T4KXLE/">Kindle</a></td>
<td><a href="http://www.bookdepository.co.uk/Wolfheart-Richard-Knaak/9781451605761">BookDepository</a></td>
</tr>
<tr>
<td>Thrall: Twilight of the Aspects</td>
<td><a href="http://www.amazon.com/World-Warcraft-Twilight-Aspects-Gallery/dp/B005X4985G/">Amazon.com</a></td>
<td><a href="http://www.amazon.co.uk/Thrall-Twilight-Aspects-Warcraft-Cataclysm/dp/143919663X/">Amazon.co.uk</a></td>
<td><a href="http://www.amazon.com/World-Warcraft-Twilight-Aspects-ebook/dp/B004G8QNGC/">Kindle</a></td>
<td><a href="http://www.bookdepository.co.uk/Thrall-Christie-Golden/9781416550884">BookDepository</a></td>
</tr>
<tr>
<td>Jaina Proudmore: Tides of War</td>
<td><a href="http://www.amazon.com/World-Warcraft-Jaina-Proudmoore-Tides/dp/1416550763/">Amazon.com</a></td>
<td><a href="http://www.amazon.co.uk/Jaina-Proudmore-Tides-Warcraft-Pandaria/dp/1416550763/">Amazon.co.uk</a></td>
<td><a href="http://www.amazon.com/World-Warcraft-Jaina-Proudmoore-ebook/dp/B0061NXDO0/">Kindle</a></td>
<td><a href="http://www.bookdepository.co.uk/Jaina-Proudmore-Tides-War-Christie-Golden/9781416550761">BookDepository</a></td>
</tr>
<tr>
<td><strong>WoW: Mists of Pandaria</strong></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&ndash;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 KiB

View file

@ -0,0 +1,69 @@
+++
title = "Fringe series finale: My oppinion"
date = 2013-02-24
+++
![](fringe.png)
> Attention: This entry contains huge spoilers about the series finale of
Fringe. Also, lots of negative opinions, if you like the series or don't
understand how sarcasm works, leave.
I've spent the last weeks watching the show from where I dropped it -the third
season- and I can say that the final season is the worst of all. I don't know
if the show was losing audicence, if they only wanted to finish it, because I
don't know another reason to kill the show this way.
From now on I'm talking only about the fifth season, as should be the more
important and the one all of you -and myself- have fresh.
* The most stupid thing I remember: The tapes with the plan to get rid of the observers.
Walter had a plan to defeat the observers, a plan that he never tell anyone
until is destroyed from his mind by an observer. But, hey! He must have
recorded the plan or something. I mean, he is a very smart one. He did. He
recorded that he have a plan on a tape, but for knowing what it is you have to
swim accross a sea of _amber_ to find another eight tapes with the details. OH
HOW SMART IS THAT! Just a stupid reason to keep characters busy. Without this
the entire fifth season is done in two-three chapters.
* The observers powers.
So, I can read minds and predict -in some way- the future. How can SOMEONE
DEFEAT YOU IF YOU CAN PREDICT WHAT ARE THEY GOING TO DO. And more, you SAW in
Walter's mind what the plan was. The observers boss is just… asshole.
* The plan.
Tons of VHS tapes with a specific plan of how to build a machine to generate a
wormhole, but in the last moment, hey! But the observers generate wormholes
for their supplies, let's use that! Let's put humanity's hope on a last moment
change! :D
* Olivia's powers.
You used your last _cortexiphan_ -or however it's written- on revive yourself
from a headshot (LOL), then you get injected fours times, each for every
dimension swap you have to do. Despite the fact that just this sucks, there's
more: William Bell needed a lot of time just to unleash her powers, and now,
is not that she have the powers _active_, but also she knows how to swap
dimensions on her own will. Fascinating. Also, from this point Olivia don't
need fear to use her powers.
* The observers chip.
Peter removes a chip from a observer and the observer die. Removes it from
himself and nothing happen. And I'm not talking about how deep the chip was
jumping insinde the brain when Walter did the tests… just WTF, die already.
* Gun's agains the observers.
This is just a little thing: in _our_ universe, Bell design some improved guns
-that apparently only the rebels have 21 years in the future…\- that shoots
faster to deal with the observers. When Olivia travels to the alternative
universe, they don't have that guns but can kill observers without a problem.
* Time travel:
Apparently there's only one shot for a single one to time-travel: September
takes it. But when he's killed nothing prevents Walter for time traveling.
* Olivia vs. Observer Boss.
Apparently the energy needed to move a truck with the cortexiphan powers is
the electricity of the entire New York. That's efficient use of energy.
There's more things, I'm sure, but I don't remember just now. Besides, there's
more than enough here.

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

View file

@ -0,0 +1,19 @@
+++
title = "Manga recommendation: Enigma"
date = 2013-02-27
+++
!["Enigma"](enigma-cover.jpg)
### Summary
Haiba Sumio is a student at a Tokyo High School with an interesting ability…
He occasionally falls asleep and wakes up with premonitions of the future
written out on his "Dream Diary". With this ability, Sumio helps out people in
trouble before anything bad happens, until one day when his peaceful life
completely changes.
**Volumes**: 7
**Chapters**: 56 (finished)
**Genre**: Adventure, Mystery, School, Shounen, Supernatural
**Story/Art**: Sakaki, Kenji

View file

@ -0,0 +1,28 @@
+++
title = "Server going slow after IPTables configuration? Try this"
date = 2013-02-27
+++
Recently I've started the migration of my company's servers to a new provider.
After checking that the OS installed on the -now- old servers was Ubuntu 8.04
(holy shit), I decided to make a fresh install of CentOS 6.3, cleaning up all
the servers contents and setting up everything from scratch.
After setting my iptables rules (INPUT whitelisted, OUTPUT accept all) I
noticed a big delay on every connection made to my server. After checking a
lot of things, these two solved the issue:
## Enable unilimited traffic on your loopback interface
``` text
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
```
## Enable traffic for connections started by your server
``` text
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
```
Hope this solves your issue as it did with mine.

View file

@ -0,0 +1,15 @@
+++
title = "Zombiepress is here"
date = 2013-06-24
+++
It finally happened. I got tired of octopress and decided to finish what I
started: my own blogging CMS.
It's a really modest thing built with django. I've added some thing to make it
easy to use (in my oppinion):
* settings.py main preferences (required for running the app) are set on environment variables instead of environment dependant settings files or the not so cool local_settings.py.
* A a key-&gt;value preferences config in the admin ([a simple django model with 3 fields](https://github.com/fmartingr/zombiepress/blob/master/zombiepress/apps/config/models.py#L5)) for settings that may be needed to modify in a live environment and would be a shame if it were on the _settings.py_ file. In example, I use it to [set some RSS preferences](https://github.com/fmartingr/zombiepress-fmartingr-theme/blob/master/blog/rss.jinja2#L4-L6) and the [Disqus shortname for the blog comments](https://github.com/fmartingr/zombiepress-fmartingr-theme/blob/master/blog/entry.jinja2#L62-L65). To disable blog comments I just need to uncheck the "pass to template" option on the required variable.
* Theming: Not an absolute state of the art, but it's function works: a themes folder and a variable to select one on the settings.py, I just need to create the basic theme.
* **(experimental)** Multilanguage support. A friend asked for a easy to use CMS with multilingual support, so I want to give it a shot. Since I never used django with managed multilingual content, it may be easy or it may be not. The code is there, someone has to try it.

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

View file

@ -0,0 +1,41 @@
+++
title = "django-stampu: Static sites with django"
date = 2013-07-01
+++
![](django-stampu.png)
> After finishing zombiepress a friend of mine wanted to use it but asked for
some kind of conversion to static since he uploads its current blog to github.
That's how this project was born.
Django as a static site? Of course, it's possible, only if your project it's
using a simple backend infrastructure, it doesn't let users modify the
database, and also doesn't have contact forms or that kind of stuff. The
conversion of a blog into static content was really easy, in about 30 minutes
I had an alpha working -which is the 0.1.2 version uploaded in github/pypi-.
django-stampu is basically a crawler. Some people led me to solutions much
more complicated. (Ex. Running a command and let the computer work.) And I
didn't like that. I wanted a conversion of the site as I see it when running
the `runserver` command, for that purpose you have to follow all the internal
links of the site and save the items as *.html if the content-type matches. It
also saves the static files in the site, but I need to look further into that,
because it can't save files needed by css files yet, it only checks for
src/href attributes on all tags in html files.
Want to try it?
1. Install django-stampu: `pip install django-stampu`
2. Add it to your `INSTALLED_APPS`
3. Execute the command: `python manage.py stamp`
4. Check the `_static` folder.
Easy, right? That's what I want to hear!
Keep in mind that this is a proof of concept, I need to improve lots of things
and add some configuration variables for people that want to customize their
sites.
If you want to contribute in any way, you can [check the source code at
github](https://github.com/fmartingr/django-stampu).

Binary file not shown.

After

Width:  |  Height:  |  Size: 437 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

View file

@ -0,0 +1,207 @@
+++
title = "Extracting data from obfuscated java code"
date = 2013-07-04
+++
![](header.png)
For those who don't know, I started a site a while ago minecraft related (yes,
[the one I dropped](/blog/2013/1/12/weekly-project-status-dropping-projects-
hard/)). If you don't know what minecraft is (really?!), you can check [the
official site](http://minecraft.net/), since this game can be a little
difficult to explain.
The project (which is online at
[minecraftcodex.com](http://www.minecraftcodex.com)) is just a database of
items, blocks, entities, etc. related to the game, but as in any other site of
this kind, entering all this information can lead to an absolute _boredom_. So
I thought... what if I can extract some of the data from the game
_classfiles_? That would be awesome! *Spoiler alert* I did it.
> Think this as my personal approach to all steps below: it doesn't mean that they're the best solutions.
## Unpackaging the jarfile and decompiling the classes
First of all, you have a _minecraft.jar_ file that it's just a packaged set of
java compiled files, you can just `tar -xf` or `unzip` it into a folder:
``` text
unzip -qq minecraft.jar -d ./jarfile
```
With this we now have a folder called _jarfile__ _filled with all the jar
contents. We now need to use a tool to decompile all the compiled files into
.java files, because the data we're looking for it's hard-coded into the
source. For this purpose we're going to use [JAD](http://varaneckas.com/jad/),
a java decompiler. With a single line of _bash_ we can look for all the .class
files and decompile them into .java source code:
``` text
ls ./jarfile/*.class | xargs -n1 jad -sjava -dclasses &> /dev/null
```
All the class files have been converted and for ease of use, we've moved them
into a separate directory. But there's a lot of files! And also, when we open
one...
``` java
public class aea extends aeb
{
public aea()
{
}
protected void a(long l, int i, int j, byte abyte0[], double d,
double d1, double d2)
{
a(l, i, j, abyte0, d, d1, d2, 1.0F + b.nextFloat() * 6F, 0.0F, 0.0F, -1, -1, 0.5D);
}
// ...
}
```
Look at that beautiful obfuscated piece of code! This is getting more
interesting at every step: almost 1.600 java files with obfuscated source
code.
## Searching for the data
I took the following approach: Since I know what I'm looking for (blocks,
items, etc) and I also know that the information is hard-coded into the
source, there must be some kind of string I can use to search all the files
and get only the ones that contains the pieces of information I look for. For
this test, I used the string "diamond":
``` text
$ grep diamond ./classes/*
./classes/bfp.java: "cloth", "chain", "iron", "diamond", "gold"
./classes/bge.java: "cloth", "chain", "iron", "diamond", "gold"
./classes/kd.java: w = (new kc(17, "diamonds", -1, 5, xn.p, k)).c();
./classes/rf.java: null, "mob/horse/armor_metal.png", "mob/horse/armor_gold.png", "mob/horse/armor_diamond.png"
./classes/xn.java: p = (new xn(8)).b("diamond").a(wh.l);
./classes/xn.java: cg = (new xn(163)).b("horsearmordiamond").d(1).a(wh.f);
```
As you can see, with a simple word we've filtered down to five files (from
1.521 in this test). Is proof that we can get some information from the source
code and we now to filter even more, looking around some files I selected
another keyword: _flintAndSteel_, works great here, but in a real example you
will need to use more than one keyword to look for data.
``` text
$ grep flintAndSteel ./classes/*
./classes/xn.java: public static xn k = (new xh(3)).b("flintAndSteel");
```
Only one file now, we're going to assume that all the items are listed there
and proceed to extract the information.
## Parsing the items
This was the more complicated thing to do. I started doing some regular
expressions to matchs the values I wanted to extract, but soon that became
inneficient due to:
- The obfuscated code varies with every released version/snapshot -or it should.
- The use of OOP difficulted method searching with RegEx matching, since the names could change from version to version, making the tool unusable on updates.
- The need to modify the RegEx if something in the code changes, or if we want to extract some other value.
After some tests, I decided to _convert_ the java code into python. For that,
I used simple find and match to get the lines that had the definitions I
wanted, something line this:
``` java
// As a first simple filter, we only use a code line if a double quote is found on it.
// Then, regex: /new (?P<code>[a-z]{2}\((?P<id>[1-9]{1,3}).*\"(?P<name>\w+)\"\))/
// ...
T = (new xm(38, xo.e)).b("hoeGold");
U = (new yi(39, aqh.aD.cE, aqh.aE.cE)).b("seeds");
V = (new xn(40)).b("wheat").a(wh.l);
X = (vr)(new vr(42, vt.a, 0, 0)).b("helmetCloth");
Y = (vr)(new vr(43, vt.a, 0, 1)).b("chestplateCloth");
// ...
```
Since that java code is not python evaluable, just convert it:
- Remove unmatched parenthesis and double definitions
- Remove semicolons
- Remove variable definitios
- Converted arguments to string. This can be improved a lot, leaving decimals, converting floats to python notation, detecting words for string conversion, etc. Since for now I am not using any of the extra parameters this works for me.
- Be careful with reserved python names! (`and`, `all`, `abs`, ...)
``` python
// Java: U = (new yi(39, aqh.aD.cE, aqh.aE.cE)).b("seeds");
yi("39", "aqh.ad.cE", "aqh.aE.cE").b("seeds")
// Java: bm = (new xi(109, 2, 0.3F, true)).a(mv.s.H, 30, 0, 0.3F).b("chickenRaw");
xi("109", "2", "0.3F", "true").a("mv.s.H", "30", "0", "0.3F").b("chickenRaw")
```
Now I defined an object to match with the java code definitions when
evaluating:
``` python
class GameItem(object):
def __init__(self, game_id, *args):
self.id = int(game_id)
def __str__(self, *args):
return "<Item(%d: '%s')>" % (
self.id,
self.name
)
def method(self, *args):
if len(args) == 1 and isinstance(args[0], str):
"Sets the name"
self.name = args[0]
return self
def __getattr__(self, *args):
return self.method
```
As you can see, this class have a global "catch-all" method, since we don't
know the obsfuscated java names, that function will handle every call. In that
concrete class, we now that an object method with only one string parameter is
the one that define the item's name, and we do so in our model.
Now, we will evaluate a line of code that will raise and exception saying that
the class name _&lt;insert obfuscated class name here&gt;_ is not defined.
With that, we will declare that name as an instance of the GameItem class, so
re-evaluating the code again will return a GameItem object:
``` python
try:
# Tries to evaluate the piece of code that we converted
obj = eval(item['code'])
except NameError as error:
# Class name do not exist! We need to define it.
# Extract class name from the error message
# Defined somewhere else: class_error_regex = re.compile('name \'(?P<name>\w+)\' is not defined')
class_name = class_error_regex.search(error.__str__()).group('name')
# Define class name as instance of GameItem
setattr(sys.modules[__name__], class_name, type(class_name, (GameItem,), {}))
# Evaluate again to get the object
obj = eval(item['code'])
```
And with this, getting data from source code was possible and really helpful.
A lot of things could be improved from this to get even more information from
the classes, since after spending lot's of time looking for certain patterns
on the code I can say what some/most of the parameters mean, and that means
more automation on new releases!
## Real use case
Apart from getting the base data for the site (all the data shown on minecraft
codex is directly mined from the source code), I made up a tool that shows
changes from the last comparision -if any. This way I can easily discover what
the awesome mojang team added to the game every snapshot they release:
![](diff.png)
This is the main tool I use for minecraft codex, is currently bound to the
site itself but I'm refactoring it to made it standalone and publish it on
github.

View file

@ -0,0 +1,104 @@
+++
title = "How to install and configure the yubikey-pam module on archlinux"
date = 2013-07-09
+++
![](yubico.jpg)
Not so long ago I've been gifted with a Yubikey. It's a two-auth hardware
solution with multiple auth methods (OTP, Challenge-response, OATH-HOTP and
static password). It easily scaled to one of my favourite and most useful
gadgets.
I've been a google authenticator user for a while, but the yubikey is just
much easier to work with: when configured, you only need to tap a button on
the usb stick to generate your key. You can use this in many ways, but in this
post I'm focusing on ssh authentication and how to install the yubico-pam
module into an Arch installation.
## Installing the required packages
Thanks to the awesome arch community we already have the needed packages on
the AUR, these are: [yubico-pam-
git](https://aur.archlinux.org/packages/yubico-pam-git/), [yubico-c-client-
git](https://aur.archlinux.org/packages/yubico-c-client-git/), [yubikey-
personalization-git](https://aur.archlinux.org/packages/yubikey-
personalization-git/) and
[libyubikey](https://aur.archlinux.org/packages/libyubikey/). Keep in mind
that you _may_ need to install more packages depending on your system
installation.
You can install that with your favourite AUR helper or using `makepkg`:
``` text
$ curl -O https://aur.archlinux.org/packages/li/libyubikey/libyubikey.tar.gz
$ tar xvzf libyubikey.tar.gz
$ cd libyubikey
$ makepkg PKGBUILD
# ...
$ sudo pacman -U libyubikey-1.10-2-x86_64.pkg.tar.xz
```
Repeat that step for all the packages, in order: _libyubikey_, _yubico-c-
client_, _yubikey-personalization_ and _yubico-pam_. If you have trouble
installing from the AUR [refer to the appropiate wiki
page](https://wiki.archlinux.org/index.php/AUR#Installing_packages).
## Configure the PAM module
Edit `/etc/pam.d/sshd` and add on top on the rest of the auth modules:
``` text
auth sufficient pam_yubico.so id=XXXX key=XXXX
```
You can obtain an ID/key conbination by registering your yubikey [at this
page](https://upgrade.yubico.com/getapikey/).
## Authorization methods
### Individual authorization mapping
If your server have multiple users this is the easiest method to let them
configure their yubikeys. You just need to create the file
`$HOME/.yubico/authorized_yubikeys` with the following contents:
``` text
<username>:<Yubikey token ID 1>[:<Yubikey token ID 2][:...]
```
The yubikey token identifier can be obtained by removing the last 32
characters of any OTP value, and you can add more than one ID to the file.
Restart your ssh server to apply the changes.
### Central authorization mapping
Create a file on `/etc/yubikey_mappings` that will contain all your users and
their respective yubikey token identifiers, like this:
``` text
<first username>:<Yubikey token ID 1>[:<Yubikey token ID 2][:...]
<second username>:<Yubikey token ID 3>[:<Yubikey token ID 4][:...]
```
For this to work, you need to specify this file to the pam module `authfile`
parameter:
``` text
auth sufficient pam_yubico.so id=XXXX key=XXXX authfile=/etc/yubikey_mappings
```
After that estart your ssh server to apply the changes.
## Logging in
The next time you're asked for a password on you ssh login you can use a
yubikey OTP instead of your current password -if you have any-.
This method works pretty well with authorized ssh keys as well, since you will
log-in automatically from a computer with a configured ssh key but an OTP -or
password- will be required for logging in from anywhere else.
**Yubico-pam module |** [Github](https://github.com/Yubico/yubico-pam)
**Yubico |** [Home page](http://www.yubico.com/)

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 KiB

View file

@ -0,0 +1,75 @@
+++
title = "Warcraft 3 on MAC with wineskin"
date = 2013-08-10
+++
A few days ago, I bought Warcraft III. I never finished it before, since I
didn't own the game, and lately I had this inner urge to play a game on the
Warcraft series. Since going back to World of Warcraft isn't an option, I
decided to rollback to the part of the Warcraft lore that is unknown to me.
Sadly after buying the game I discovered that they dropped support for the
game when Apple did the conversion of their hardware from powerpc to intel.
There was no way of running the mac version of the game on newer hardware, and
I even contacted Blizzard support about the matter, but the answer was the one
I feared: I had to use wine. This reminded me of the old days when I was a
linux user and this was needed in order to play anything on linux.
![](wineskin.png)
## Installing the needed software
First of all, you will need to download
[Wineskin](http://wineskin.urgesoftware.com/tiki-
index.php?page=Wineskin%2C+Play+your+favorite+Windows+games+on+Mac+OS+X+without+needing+Microsoft+Windows),
as we're going to use this to "emulate" our windows environment. Also,
download the windows warcraft downloaders from your battle.net account.
Execute it and download the last engine (clicking on the plus symbol) and also
update the wrapper.
You should see your wineskin window similar to the one on the left.
Now you need to create a clean wrapper for your Warcraft III installation.
## Creating the wrapper
Just click on the "Create New Blank Wrapper" button and give it a name. I will
go with "Warcraft III.app". It will ask you to install some mono/gecko
libraries needed for the wrapper. Just go with it and wait until all the
process finishes.
You will be prompted if you want to open the containing folder, do it since
now we need to configure our wrapper.
Now, right click the app you created and select "Show package contents".
Execute Wineskin.app, and select "Install software", on the next panel select
"Select setup executable" and go to the path of your warcraft 3 downloader,
that will prompt the installation menu when it finishes.
Install your warcraft as you would in a windows machine, and when you exit the
installer wineskin will ask for the main executable file, select "Warcraft
III.exe". After that, repeat the process with the Frozen Throne executable.
## Configuration
We need to tweak some things before we can play, here's what I did:
* Go to set screen options and set windowed. Since I have a 16:9 screen and the game runs at 4:3, everything is streched. Maybe there's a 16:9 patch around the net.
* I customized the icon with [this one](http://icons.iconarchive.com/icons/3xhumed/mega-games-pack-36/256/Warcraft-3-Reign-of-Chaos-5-icon.png). You need to convert it to ICNS for using it with wineskin (you can use [this online tool](http://iconverticons.com/online/)). Copy it into the package and select on the advanced options in the wineskin executable.
* If you want to play with the frozen throne expansion, change the Windows EXE on the advanced settings panel to "Frozen Throne.exe".
* Since wine can't play the cinematics, you can safely remove/rename the movies folder under the warcraft installation folder. (Default: `drive_c/Program Files/Warcraft III`)
* Delete the game installers if you stored them into the wineskin package to keep the .app file size to a minimum.
## Enjoy!
![](game.png)
It's done! Store the Warcraft III.app somewhere if you don't want to repeat
the process if you delete the game.
### Updates:
* Using the -opengl EXE flag will get you a smoother framerate. (thanks to **Sylvain Prevost** in the comments)
* Suggested engine: WS9Wine1.7.2. (by **Sylvain Prevost** in the comments)

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View file

@ -0,0 +1,205 @@
+++
title = "Reading data from iOS backups: Manifest.mbdb"
date = 2013-11-29
+++
<p>Recently, I&#39;ve been working on a tool to extract data from iOS backups, and one of the files that a backup have is the Manifest.mbdb (or mbdx for old versions).</p>
<p>The Manifest.mbdb is a binary file that contains records for the hashed files that the backup includes, the hashed files can be anything that a certain application requires or saved, from a image thumbnail to a sqlite3 database file.</p>
<p>Reading the file can be tricky, since the record itself have a variable length, so you can just split the file based on a delimiter, you need to read it byte to byte. I&#39;m going to expose here the data structures this file contains:</p>
<table border="0" cellpadding="0" cellspacing="0" id="string_entity" style="width:100%">
<tbody>
<tr>
<th colspan="4"><strong>String entity</strong></th>
</tr>
<tr>
<th><strong>Type</strong></th>
<th><strong>Name</strong></th>
<th><strong>Description</strong></th>
<th><strong>Null value</strong></th>
</tr>
<tr>
<td>uint16</td>
<td>Lenght</td>
<td>Length of the string</td>
<td>0x0000</td>
</tr>
<tr>
<td>ASCII data</td>
<td>Data</td>
<td>Actual string of (length) size. Don&#39;t need to read this if length is null.</td>
<td><em>nothing</em></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" id="property_entity" style="width:100%">
<tbody>
<tr>
<th colspan="3"><strong>Property entity</strong></th>
</tr>
<tr>
<th><strong>Type</strong></th>
<th><strong>Name</strong></th>
<th><strong>Description</strong></th>
</tr>
<tr>
<td><a href="#string_entity">string</a></td>
<td>Key</td>
<td>Key of the property</td>
</tr>
<tr>
<td><a href="#string_entity">string</a></td>
<td>value</td>
<td>Property value</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" style="width:100%">
<tbody>
<tr>
<th colspan="4"><strong>Record entity</strong></th>
</tr>
<tr>
<th><strong>Type</strong></th>
<th><strong>Field name</strong></th>
<th><strong>Description</strong></th>
<th><strong>Null value</strong></th>
</tr>
<tr>
<td><a href="#string_entity">string</a></td>
<td>Domain</td>
<td>App domain</td>
<td>&nbsp;</td>
</tr>
<tr>
<td><a href="#string_entity">string</a></td>
<td>Path</td>
<td>Path to file</td>
<td>0x0000</td>
</tr>
<tr>
<td><a href="#string_entity">string</a></td>
<td>Target</td>
<td>&nbsp;</td>
<td>0xFFFF</td>
</tr>
<tr>
<td><a href="#string_entity">string</a></td>
<td>Hash</td>
<td>SHA-1 hash of the file</td>
<td>0xFFFF</td>
</tr>
<tr>
<td><a href="#string_entity">string</a></td>
<td>Encription key</td>
<td>Encryption key -if any-</td>
<td>0xFFFF</td>
</tr>
<tr>
<td>uint16</td>
<td>Mode</td>
<td>File mode:
<ul>
<li>0xAXXX: Symlink</li>
<li>0x4000: Directory</li>
<li>0x8000: File</li>
</ul>
</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>uint64</td>
<td>inode number</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>uint32</td>
<td>User ID</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>uint32</td>
<td>Group ID</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>uint32</td>
<td>Last modified time</td>
<td>EPOCH</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>uint32</td>
<td>Last accesed time</td>
<td>EPOCH</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>uint32</td>
<td>Created time</td>
<td>EPOCH</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>uint64</td>
<td>File size</td>
<td>&nbsp;</td>
<td>0x0...0</td>
</tr>
<tr>
<td>uint8</td>
<td>Flag</td>
<td>0x1 to 0xB</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>uint8</td>
<td>Properties number</td>
<td>Number of properties to follow with this record</td>
<td>0x00</td>
</tr>
<tr>
<td><a href="#property_entity">property</a>[0...n]</td>
<td>Property objects</td>
<td>Each property object -if any-</td>
<td><em>nothing</em></td>
</tr>
<tr>
<td>--</td>
<td>File name</td>
<td>SHA1(domain + path)</td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
<p><strong>More info:&nbsp;</strong> <a href="http://theiphonewiki.com/wiki/ITunes_Backup#Manifest.mbdb">The iPhone Wiki</a> | <a href="http://nagareshwar.securityxploded.com/wp-content/uploads/2012/09/mbdb-record.jpg">This image I found</a></p>
uint16 | Mode | File mode:
* 0xAXXX: Symlink
* 0x4000: Directory
* 0x8000: File
|
uint64 | inode number | |
uint32 | User ID | |
uint32 | Group ID | |
uint32 | Last modified time | EPOCH |
uint32 | Last accesed time | EPOCH |
uint32 | Created time | EPOCH |
uint64 | File size | | 0x0...0
uint8 | Flag | 0x1 to 0xB |
uint8 | Properties number | Number of properties to follow with this record |
0x00
property[0...n] | Property objects | Each property object -if any- | _nothing_
\-- | File name | SHA1(domain + path) |
**More info: ** [The iPhone Wiki](http://theiphonewiki.com/wiki/ITunes_Backup#Manifest.mbdb) | [This image I found](http://nagareshwar.securityxploded.com/wp-content/uploads/2012/09/mbdb-record.jpg)

View file

@ -0,0 +1,61 @@
+++
title = "How to: Starbound dedicated server on a linux machine"
date = 2013-12-05
+++
![Starbound logo](starbound-
logo.jpg)
The day it's here! Starbound beta is finally here, and what could be better
than having a dedicated server to play with your friends? Let's get this done.
## Install SteamCMD
Official documentation: <https://developer.valvesoftware.com/wiki/SteamCMD>
Basically you need to download it's shell script to manage steam apps, take
special attention to the lib32 section if you're running the server in a 64bit
machine.
``` text
wget http://media.steampowered.com/client/steamcmd_linux.tar.gz
tar xzf steamcmd_linux.tar.gz
```
## Install Starbound on the server
You will need to login with your steam username here to download/update
starbound. Your account** is not needed** to keep the server running.
``` text
./steamcmd.sh
# Steam updating and validating stuff
Steam> login your_username_here
# Your password WILL BE VISIBLE. But after a first login
# your credentials will be cached so you don't need to
# expose them everytime you need to use the steamcmd.
Steam> app_update 211820
# This will install starbound, it will take a while
# depending on the server bandwidth.
Steam> app_update 211820 validate
# Validate installation, just in case.
# I do this in two separate steps because -at least for me-
# validating on a fresh install take a lot longer that
# just installing and validating afterwards. Don't sure why.
Steam> quit
# Finished!
```
## Start the server
Go to `Steam/SteamApps/common/Starbound/linuxXX/` (where XX is 32 or 64 based
on your server architecture).
Launch `launch_starbound_client.sh`
If you want to use the universe you played on your computer, just upload the
universe folder found on your computer to the same folder where the server
script is.
Happy gaming!

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB