refactor: moved to hugo
|
@ -0,0 +1,112 @@
|
|||
+++
|
||||
title = "Weekly project status: Dropping projects is hard"
|
||||
date = 2013-01-12
|
||||
+++
|
||||
|
||||

|
||||
|
||||
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!_**
|
||||
|
||||

|
||||
|
||||
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!
|
After Width: | Height: | Size: 196 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 32 KiB |
After Width: | Height: | Size: 31 KiB |
|
@ -0,0 +1,60 @@
|
|||
+++
|
||||
title = "Tweeria: The MMORPG people without time can play"
|
||||
date = 2013-01-14
|
||||
+++
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
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**?
|
||||
|
||||

|
||||
|
||||
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
|
After Width: | Height: | Size: 166 KiB |
After Width: | Height: | Size: 61 KiB |
After Width: | Height: | Size: 29 KiB |
|
@ -0,0 +1,27 @@
|
|||
+++
|
||||
title = "Manga Recommendation: Kamisama no Iutoori (Fujimura Akeji)"
|
||||
date = 2013-01-20
|
||||
+++
|
||||
|
||||

|
||||
|
||||
### 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!
|
After Width: | Height: | Size: 69 KiB |
19
content/blog/2013/02/23/manga-recommendation-psyren/index.md
Normal file
|
@ -0,0 +1,19 @@
|
|||
+++
|
||||
title = "Manga recommendation: Psyren"
|
||||
date = 2013-02-23
|
||||
+++
|
||||
|
||||

|
||||
|
||||
### 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
|
After Width: | Height: | Size: 198 KiB |
|
@ -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> </td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The war of the ancients Trilogy</td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
<td> </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> </td>
|
||||
<td> </td>
|
||||
<td> </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> </td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Warcraft: Orcs and Humans</strong></td>
|
||||
<td><em>The first war</em></td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
<td> </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> </td>
|
||||
<td> </td>
|
||||
<td> </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> & <strong>Pre-Warcraft III</strong></td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
<td> </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>–</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> </td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Warcraft III: Reign of Chaos</strong></td>
|
||||
<td><em>The third war</em></td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
<td> </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> </td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The war of the ancients Trilogy</td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
<td> </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> </td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
<td> </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> </td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>WoW: The Burning Crusade</strong></td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
<td> </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> </td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
<td> </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> </td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
<td> </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> </td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>–</td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
After Width: | Height: | Size: 175 KiB |
|
@ -0,0 +1,69 @@
|
|||
+++
|
||||
title = "Fringe series finale: My oppinion"
|
||||
date = 2013-02-24
|
||||
+++
|
||||
|
||||

|
||||
|
||||
> 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.
|
After Width: | Height: | Size: 90 KiB |
19
content/blog/2013/02/27/manga-recommendation-enigma/index.md
Normal file
|
@ -0,0 +1,19 @@
|
|||
+++
|
||||
title = "Manga recommendation: Enigma"
|
||||
date = 2013-02-27
|
||||
+++
|
||||
|
||||

|
||||
|
||||
### 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
|
|
@ -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.
|
15
content/blog/2013/06/24/zombiepress-is-here/index.md
Normal 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->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.
|
After Width: | Height: | Size: 70 KiB |
|
@ -0,0 +1,41 @@
|
|||
+++
|
||||
title = "django-stampu: Static sites with django"
|
||||
date = 2013-07-01
|
||||
+++
|
||||
|
||||

|
||||
|
||||
> 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).
|
After Width: | Height: | Size: 437 KiB |
After Width: | Height: | Size: 55 KiB |
|
@ -0,0 +1,207 @@
|
|||
+++
|
||||
title = "Extracting data from obfuscated java code"
|
||||
date = 2013-07-04
|
||||
+++
|
||||
|
||||

|
||||
|
||||
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 _<insert obfuscated class name here>_ 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:
|
||||
|
||||

|
||||
|
||||
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.
|
|
@ -0,0 +1,104 @@
|
|||
+++
|
||||
title = "How to install and configure the yubikey-pam module on archlinux"
|
||||
date = 2013-07-09
|
||||
+++
|
||||
|
||||

|
||||
|
||||
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/)
|
After Width: | Height: | Size: 47 KiB |
BIN
content/blog/2013/08/10/warcraft-3-mac-wineskin/game.png
Normal file
After Width: | Height: | Size: 255 KiB |
75
content/blog/2013/08/10/warcraft-3-mac-wineskin/index.md
Normal 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.
|
||||
|
||||

|
||||
|
||||
## 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!
|
||||
|
||||

|
||||
|
||||
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)
|
BIN
content/blog/2013/08/10/warcraft-3-mac-wineskin/wineskin.png
Normal file
After Width: | Height: | Size: 11 KiB |
|
@ -0,0 +1,205 @@
|
|||
+++
|
||||
title = "Reading data from iOS backups: Manifest.mbdb"
|
||||
date = 2013-11-29
|
||||
+++
|
||||
|
||||
<p>Recently, I'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'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'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> </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> </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> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>uint64</td>
|
||||
<td>inode number</td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>uint32</td>
|
||||
<td>User ID</td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>uint32</td>
|
||||
<td>Group ID</td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>uint32</td>
|
||||
<td>Last modified time</td>
|
||||
<td>EPOCH</td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>uint32</td>
|
||||
<td>Last accesed time</td>
|
||||
<td>EPOCH</td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>uint32</td>
|
||||
<td>Created time</td>
|
||||
<td>EPOCH</td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>uint64</td>
|
||||
<td>File size</td>
|
||||
<td> </td>
|
||||
<td>0x0...0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>uint8</td>
|
||||
<td>Flag</td>
|
||||
<td>0x1 to 0xB</td>
|
||||
<td> </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> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<p><strong>More info: </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)
|
|
@ -0,0 +1,61 @@
|
|||
+++
|
||||
title = "How to: Starbound dedicated server on a linux machine"
|
||||
date = 2013-12-05
|
||||
+++
|
||||
|
||||

|
||||
|
||||
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!
|
After Width: | Height: | Size: 15 KiB |