Porque el podcast de esta semana se ha tardado.

Si existe un ser humano que esta haciendole seguimiento al proyecto SnowRSS, aqui puede ver los cambios realizados desde anoche.
– Agregamos una tabla para almacenar informacion relacionada a los enclosures de los posts RSS. Es decir, soportaremos videocasts y podcasts.
– Acomodamos de manera radical (refactoring) la forma en que haciamos las conexiones a la BD. Ahora todas las conexiones son simples instancias
de MySQLdb.cursor, como variables que se crean en la pila de cada metodo, se usan, se desconectan y listo. El servidor estaba teniendo problemas con
muchas conexiones abiertas, ahora conexion que no usamos, conexion que desechamos. Este approach nos ha servidor muy bien con nuestra BD de lyrics en PHP
y el overhead de conexion y desconexion parece ser minimo ya que el servidor es local.
– Muchos otros fixes, limpieza, mayor busqueda del uso de OO en el codigo.

Index: sql/snowrss.sql
===================================================================
--- sql/snowrss.sql (revision 20684)
+++ sql/snowrss.sql (revision 20690)
@@ -53,3 +53,15 @@
`BL_fk_lang_code` text,
PRIMARY KEY (`BL_fk_blog_id`,`BL_fk_lang_code` (2))
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
+DROP TABLE IF EXISTS `ENCLOSURES`;
+CREATE TABLE `ENCLOSURES` (
+ `Enc_pk_id` int(11) NOT NULL auto_increment,
+ `Enc_fk_post_id` int(11) NOT NULL,
+ `Enc_url` text NOT NULL,
+ `Enc_creation_timestamp` double default 0,
+ `Enc_update_timestamp` double default 0,
+ `Enc_length` double default 0,
+ `Enc_type` text,
+ PRIMARY KEY (`Enc_pk_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Index: snowrss.py
===================================================================
--- snowrss.py (revision 20684)
+++ snowrss.py (revision 20690)
@@ -1,11 +1,12 @@
import MySQLdb
from MySQLdb import MySQLError
-from snowrss_config import getDBCon
+from snowrss_config import *
import feedparser,sys,os,time
from threading import Thread

class Post:
'''Receives a dictionary with
+ [id]:
blog_id:
post_title:<br /> post_author:<br /> @@ -14,43 +15,58 @@<br /> post_timestamp:<br /> post_tags:[]<br /> '''<br /> - def __init__(self,props,cursor):<br /> + def __init__(self,props):<br /> self.properties = props<br /> - self.cursor = cursor</p> <p> def setBlogId(self,id=None):<br /> self.blog_id = id</p> <p>- def __reconnect(self):<br /> - """Reconnects to the database"""<br /> - self.con.ping() # = getDBCon()<br /> - #self.cursor = self.con.cursor(MySQLdb.cursors.DictCursor)<br /> -<br /> def save(self):<br /> sql = 'insert into BLOG_POSTS '<br /> sql += '(BP_fk_blog_id,BP_title,BP_author,BP_link,BP_summary,BP_timestamp) '<br /> sql += "values (%d,'%s','%s','%s','%s',%d);"</p> <p> sql = sql % (self.properties['blog_id'],<br /> - self.properties['post_title'] .replace("'",""").encode('utf8'),<br /> - self.properties['post_author'].replace("'",""").encode('utf8'),<br /> - self.properties['post_link'].replace("'",""").encode('utf8'),<br /> - self.properties['post_summary'].replace("'",""").encode('utf8'),<br /> + self.properties['post_title'] .replace("'","\'").encode('utf8'),<br /> + self.properties['post_author'].replace("'","\'").encode('utf8'),<br /> + self.properties['post_link'].replace("'","\'").encode('utf8'),<br /> + self.properties['post_summary'].replace("'","\'").encode('utf8'),<br /> self.properties['post_timestamp'])</p> <p> try:<br /> - self.cursor.execute(sql)<br /> + cursor = getDbCursor()<br /> + cursor.execute(sql)<br /> + cursor.connection.close()<br /> except Exception, e:<br /> #MySQL has gone away<br /> - if (e[0] == 2006):<br /> - self._reconnect()<br /> - self.save()<br /> - print 'Post.save(): ' + sql<br /> - print e<br /> - print "RECONNECTING"<br /> - print<br /> + print 'Post.save(): ' + sql<br /> + print e</p> <p>- def wasUpdated(ignoreme,cursor,post_link,post_timestamp):<br /> + self.setIdFromTitle()<br /> +<br /> + def setIdFromTitle(self):<br /> + #we fetch the id of the post.<br /> + sql = "SELECT BP_pk_id FROM BLOG_POSTS WHERE BP_link = '%s'"<br /> + sql = sql % self.properties['post_link']<br /> +<br /> + cursor = None<br /> + try:<br /> + cursor = getDbCursor()<br /> + cursor.execute(sql)<br /> + cursor.connection.close()<br /> + except Exception, e:<br /> + print<br /> + print "Post.setIdFromTitle(): " + sql<br /> + print e<br /> + print<br /> +<br /> + data = cursor.fetchone()<br /> + self.properties['id'] = int(data['BP_pk_id'])<br /> +<br /> + def getId(self):<br /> + return int(self.properties['id'])<br /> +<br /> + def wasUpdated(ignoreme,post_link,post_timestamp):<br /> '''Returns true if the post identified by the post_link has an older timestamp than the given one.'''</p> <p> sql='select BP_timestamp 1:<br /> #If there are many repetitions, delete all but one.<br /> appearances = int(data['posted_before'])<br /> @@ -120,8 +144,9 @@<br /> print detail</p> <p> try:<br /> - cursor.connection.ping()<br /> + cursor = getDbCursor()<br /> cursor.execute(sql)<br /> + cursor.connection.close()<br /> except MySQLdb.Error, e:<br /> print "Post.exists() Error cleaning posts [%s] - %d: %s" % (post_link,<br /> e.args[0],<br /> @@ -130,18 +155,25 @@<br /> sys.exit()<br /> return True</p> <p>-<br /> if int(data['posted_before']) >= 1:<br /> return True<br /> return False<br /> exists = classmethod(exists)</p> <p>- def load(self,id):<br /> - '''Loads all the post data given the post id'''<br /> + def hasEnclosure(self):<br /> + """Tells if there's an enclosure on the database related to this post"""<br /> + #TODO<br /> + return True<br /> +<br /> + def getEnclosure(self):<br /> + """Returns an enclosure if this post has one."""<br /> + #TODO<br /> + if self.hasEnclosure():<br /> + return True</p> <p> class Blog:<br /> - def __init__(self,con,props=None):<br /> + def __init__(self,props=None):<br /> '''Receives a dictionary<br /> id:<br /> blog_name:<br /> @@ -158,32 +190,13 @@</p> <p> if self.props == None:<br /> self.props = {}<br /> -<br /> - self.setConnection(con)<br /> - self.setRunsAsThread(False)</p> <p>- def setConnection(self, con):<br /> - self.con = con<br /> - self.setCursor(self.con.cursor(MySQLdb.cursors.DictCursor))<br /> + def getId(self):<br /> + return self.props['id']</p> <p>- def setRunsAsThread(self, isThread=True):<br /> - '''To determine if this Blog will fetch its posts on a separate thread or not'''<br /> - self.props['is_thread'] = isThread<br /> -<br /> - def runsAsThread(self):<br /> - return self.props['is_thread']<br /> -<br /> - def setCursor(self, cursor):<br /> - self.cursor = cursor<br /> -<br /> def __str__(self):<br /> return str(self.props['id']) + ' - ' + self.props['blog_name']</p> <p>- def __reconnect(self):<br /> - """Reconnects to the database"""<br /> - self.con = getDBCon()<br /> - self.cursor = self.con.cursor(MySQLdb.cursors.DictCursor)<br /> -<br /> def getUrl(self):<br /> return self.props['blog_url']</p> <p>@@ -199,14 +212,14 @@<br /> sql = sql % (self.props['blog_url'], int(self.props['id']))</p> <p> try:<br /> - self.cursor.execute(sql)<br /> + cursor = getDbCursor()<br /> + cursor.execute(sql)<br /> + cursor.connection.close()<br /> except Exception, e:<br /> print<br /> + print 'Blog.updateUrl(): ' + sql<br /> print e<br /> - print 'Blog.updateUrl(): ' + sql<br /> - print "RECONNECTING"<br /> - self.__reconnect()<br /> - self.updateUrl(url)<br /> + print</p> <p> def getRssUrl(self):<br /> return self.props['blog_rss_url']<br /> @@ -223,14 +236,15 @@<br /> sql = sql % (self.props['blog_rss_url'], int(self.props['id']))</p> <p> try:<br /> - self.cursor.execute(sql)<br /> + cursor = getDbCursor()<br /> + cursor.execute(sql)<br /> + cursor.connection.close()<br /> except Exception, e:<br /> print<br /> + print 'Blog.updateRssUrl(): ' + sql<br /> print e<br /> - print 'Blog.updateRssUrl(): ' + sql<br /> - print "RECONNECTING"<br /> - self.__reconnect()<br /> - self.updateRssUrl(rssUrl)<br /> + print<br /> +</p> <p> def hasLanguageCode(self,lang_code,refresh=False):</p> <p>@@ -263,10 +277,14 @@<br /> sql = "INSERT INTO BLOG_LANGUAGES VALUES (%d,'%s');" % (self.props['id'],<br /> lang_code)<br /> try:<br /> - self.cursor.execute(sql)<br /> + cursor = getDbCursor()<br /> + cursor.execute(sql)<br /> + cursor.connection.close()<br /> except MySQLdb.Error, e:<br /> + print<br /> print "Blog.addLanguageCodes() Error: %d: %s" % (e.args[0],e.args[1])<br /> print sql<br /> + print<br /> sys.exit()</p> <p> self.getLanguageCodes(True) #Refresh<br /> @@ -279,10 +297,14 @@<br /> sql = "DELETE FROM BLOG_LANGUAGES WHERE BL_fk_blog_id = %d" % (self.props['id'])</p> <p> try:<br /> - self.cursor.execute(sql)<br /> + cursor = getDbCursor()<br /> + cursor.execute(sql)<br /> + cursor.connection.close()<br /> except MySQLdb.Error, e:<br /> + print<br /> print "Blog.clearLanguageCodes() Error: %d: %s" % (e.args[0],e.args[1])<br /> print sql<br /> + print<br /> sys.exit()</p> <p> return True<br /> @@ -306,10 +328,14 @@<br /> sql = sql % (self.props['id'],lang_code)</p> <p> try:<br /> - self.cursor.execute(sql)<br /> + cursor = getDbCursor()<br /> + cursor.execute(sql)<br /> + cursor.connection.close()<br /> except MySQLdb.Error, e:<br /> + print<br /> print "Blog.removeLanguageCodes() Error: %d: %s" % (e.args[0],e.args[1])<br /> print sql<br /> + print<br /> sys.exit()</p> <p> #clear and reload current languages from the database<br /> @@ -333,13 +359,17 @@<br /> sql += 'WHERE BL_fk_blog_id = ' + str(self.props['id'])</p> <p> try:<br /> - self.cursor.execute(sql)<br /> + cursor = getDbCursor()<br /> + cursor.execute(sql)<br /> + cursor.connection.close()<br /> except MySQLdb.Error, e:<br /> + print<br /> print "Blog.getLanguageCodes() Error: %d: %s" % (e.args[0],e.args[1])<br /> print sql<br /> + print<br /> sys.exit()</p> <p>- result_set = self.cursor.fetchall()<br /> + result_set = cursor.fetchall()</p> <p> if len(result_set) = max_threads:<br /> -# for t in threads:<br /> -# t.join()<br /> -# threads.remove(threads[0])<br /> -# if len(threads) > ((max_threads/2) + 1):<br /> - #print "We can continue without waiting now"<br /> -# break<br /> + if parallel_fetching==False:<br /> + # LINEAL FETCHING<br /> + blog.fetchPosts()<br /> + print blog.getName()<br /> + else:<br /> + #PARALLEL FETCHING<br /> + if (len(threads) = max_threads:<br /> + for t in threads:<br /> + t.join()<br /> + threads.remove(threads[0])<br /> +<br /> + if len(threads) > ((max_threads/2) + 1):<br /> + #print "We can continue without waiting now"<br /> + break<br /> Index: util/check_who_applied.py<br /> ===================================================================<br /> --- util/check_who_applied.py (revision 20684)<br /> +++ util/check_who_applied.py (revision 20690)<br /> @@ -8,10 +8,8 @@<br /> print "Could not import snowrss_config"<br /> sys.exit()</p> <p>-con = snowrss_config.getDBCon()<br /> +cursor = getDbCursor()</p> <p>-cursor = con.cursor()<br /> -<br /> sql = "SELECT * FROM BLOGS WHERE Blog_active != 1;"<br /> cursor.execute(sql)</p> <p>@@ -26,9 +24,7 @@<br /> print "Status: %s" % b['Blog_active']<br /> print "Podcast: %s" % b['Blog_is_podcast']</p> <p>- blog = Blog(con)<br /> + blog = Blog()<br /> blog.load(int(b['Blog_pk_id']))<br /> print "Languages: %s" % str(blog.getLanguageCodes())<br /> print<br /> -<br /> -con.close()<br /> Index: util/fetch_enclosures.py<br /> ===================================================================<br /> --- util/fetch_enclosures.py (revision 0)<br /> +++ util/fetch_enclosures.py (revision 20690)<br /> @@ -0,0 +1,23 @@<br /> +import sys<br /> +sys.path.append('/home/wedoit4y/www/news4you/SnowRSS/')<br /> +<br /> +try:<br /> + import snowrss_config<br /> + from snowrss import *<br /> +except Exception,e:<br /> + print "Could not import snowrss_config [%s]" % e<br /> + sys.exit()<br /> +<br /> +blogs = Blog.getBlogs()<br /> +podcasts = []<br /> +<br /> +for blog in blogs:<br /> + if blog.isPodcast():<br /> + podcasts.append(blog)<br /> +<br /> +print "Let's work with %d podcasts" % len(podcasts)<br /> +<br /> +for podcast in podcasts:<br /> + print "Scanning %s" % podcast.getName()<br /> +<br /> + podcast.updateEnclosures()<br /> Index: util/check_stats.py<br /> ===================================================================<br /> --- util/check_stats.py (revision 20684)<br /> +++ util/check_stats.py (revision 20690)<br /> @@ -7,18 +7,18 @@<br /> print "Could not import snowrss_config"<br /> sys.exit()</p> <p>-con = snowrss_config.getDBCon()<br /> +con = snowrss_config.g</p> <p> cursor = con.cursor()</p> <p>-sql = "select BP_fk_blog_id, COUNT(BP_fk_blog_id) as post_count, SUM(PH_hits) as hits, BLOGS.* FROM BLOG_POSTS JOIN BLOGS ON BP_fk_blog_id = Blog_pk_id JOIN POST_HITS ON BP_pk_id = PH_fk_post_id WHERE Blog_active=1 GROUP BY BP_fk_blog_id ORDER BY hits DESC;"<br /> +sql = "select BP_fk_blog_id, COUNT(BP_fk_blog_id) as post_count, SUM(PH_hits) as hits, Blog_active, BLOGS.* FROM BLOG_POSTS JOIN BLOGS ON BP_fk_blog_id = Blog_pk_id JOIN POST_HITS ON BP_pk_id = PH_fk_post_id GROUP BY BP_fk_blog_id ORDER BY hits DESC;"</p> <p> cursor.execute(sql)</p> <p> rows = cursor.fetchall()<br /> i=1<br /> -print "PlacetHitstPoststBlog"<br /> +print "PlacetHitstPoststBlogtIDtActive"<br /> for b in rows:<br /> - print "%dt%st%st%s" % (i,b['hits'],b['post_count'],b['Blog_name'])<br /> + print "%dt%st%st%st%dt%s" % (i,b['hits'],b['post_count'],b['Blog_name'],b['BP_fk_blog_id'],b['Blog_active'])<br /> i+=1<br /> con.close()<br /> Index: util/blog_is_podcast.py<br /> ===================================================================<br /> --- util/blog_is_podcast.py (revision 20684)<br /> +++ util/blog_is_podcast.py (revision 20690)<br /> @@ -20,7 +20,7 @@<br /> print "The ID of the blog needs to be an int"<br /> sys.exit()</p> <p>-blog = Blog(getDBCon())<br /> +blog = Blog()<br /> blog.load(int(sys.argv[1]))</p> <p> if blog.isPodcast()==False:<br /> Index: util/activate_blog.py<br /> ===================================================================<br /> --- util/activate_blog.py (revision 20684)<br /> +++ util/activate_blog.py (revision 20690)<br /> @@ -8,8 +8,6 @@<br /> print "Could not import snowrss_config [%s]" % e<br /> sys.exit()</p> <p>-<br /> -<br /> if len(sys.argv) </p> <div id='jp-relatedposts' class='jp-relatedposts' > <h3 class="jp-relatedposts-headline"><em>Related</em></h3> </div> </div><!-- .entry-content --> <footer class="entry-footer"> <span class="cat-links"><a href="https://www.gubatron.com/blog/category/code/" rel="category tag">Code</a> <a href="https://www.gubatron.com/blog/category/gubatron/" rel="category tag">Gubatron</a></span> </footer><!-- .entry-footer --> </article><!-- #post-337 --> <nav class="navigation post-navigation" aria-label="Posts"> <h2 class="screen-reader-text">Post navigation</h2> <div class="nav-links"><div class="nav-previous"><a href="https://www.gubatron.com/blog/pamela-anderson-stripping-for-peta/" rel="prev"><span class="nav-title">Pamela Anderson stripping for PETA</span></a></div><div class="nav-next"><a href="https://www.gubatron.com/blog/gubatron-at-the-original-nathans-hot-dogs-coney-island/" rel="next"><span class="nav-title">Gubatron at the original Nathan’s Hot Dogs, Coney Island</span></a></div></div> </nav> <div class="related-posts"> <h2>Related Posts</h2> <div class="row"> <div> <article id="post-913" class="post-913 post type-post status-publish format-standard hentry category-code tag-accesslog tag-filter tag-filter-out tag-lighttpd tag-mod_accesslog"> <div class="post-text"> <header class="entry-header"> <h5 class="entry-title"><a href="https://www.gubatron.com/blog/how-to-filter-logs-in-lighttpd/" rel="bookmark">How to filter logs in lighttpd</a></h5> </header><!-- .entry-header --> <div class="entry-content"> <p>I usually don’t keep lighttpd access logs turned on to avoid writing for every read, but there are times when you need to monitor what’s going on, and you’d like to have a high signal-to-noise ratio so it might be convenient to ignore all requests to .gif, .png, .jpg, .css, .ico and other urls on […]</p> </div><!-- .entry-content --> </div> </article> </div> <div> <article id="post-1928" class="post-1928 post type-post status-publish format-standard hentry category-android category-code category-geeklife tag-android tag-benchmark tag-code"> <div class="post-text"> <header class="entry-header"> <h5 class="entry-title"><a href="https://www.gubatron.com/blog/droid-vs-nexus-1-who-can-calculate-md5-faster/" rel="bookmark">Droid vs Nexus 1: Who can calculate MD5 faster?</a></h5> </header><!-- .entry-header --> <div class="entry-content"> <p>Nexus 1 indeed. 17 files get their MD5 calculated on the Droid and 17 files get their MD5 hash calculated on the Nexus 1 Nexus 1 pwns. Here’s the code in case you’re curious. [java] public void onClick(View v) { _logTextView.setText("MD5 Benchmark on " + Build.DEVICE + "nn"); if (GlobalVariables.APP_CONTEXT == null) GlobalVariables.APP_CONTEXT = getApplicationContext(); […]</p> </div><!-- .entry-content --> </div> </article> </div> <div> <article id="post-2193" class="post-2193 post type-post status-publish format-standard hentry category-code"> <div class="post-text"> <header class="entry-header"> <h5 class="entry-title"><a href="https://www.gubatron.com/blog/get-a-randomly-weighted-key-in-a-mapdictionaryassociative-array/" rel="bookmark">Get a randomly weighted key in a Map/Dictionary/Associative Array</a></h5> </header><!-- .entry-header --> <div class="entry-content"> <p>Here’s a very useful function to retrieve a randomly weighted key from an associative array in PHP. Sometimes you need to fetch random elements from a collection but you need some elements to have a little more chance than others to be fetched (business rules or whatever…) [php] srand(time()); //dont call this inside the function […]</p> </div><!-- .entry-content --> </div> </article> </div> </div> </div> <div id="comments" class="comments-area"> <div id="respond" class="comment-respond"> <h3 id="reply-title" class="comment-reply-title">Leave a Reply <small><a rel="nofollow" id="cancel-comment-reply-link" href="/blog/porque-el-podcast-de-esta-semana-se-ha-tardado/#respond" style="display:none;">Cancel reply</a></small></h3><form action="https://www.gubatron.com/blog/wp-comments-post.php" method="post" id="commentform" class="comment-form" novalidate><p class="comment-notes"><span id="email-notes">Your email address will not be published.</span> <span class="required-field-message">Required fields are marked <span class="required">*</span></span></p><p class="comment-form-comment"><label for="comment">Comment <span class="required">*</span></label> <textarea id="comment" name="comment" cols="45" rows="8" maxlength="65525" required></textarea></p><p class="comment-form-author"><label for="author">Name <span class="required">*</span></label> <input id="author" name="author" type="text" value="" size="30" maxlength="245" autocomplete="name" required /></p> <p class="comment-form-email"><label for="email">Email <span class="required">*</span></label> <input id="email" name="email" type="email" value="" size="30" maxlength="100" aria-describedby="email-notes" autocomplete="email" required /></p> <p class="comment-form-url"><label for="url">Website</label> <input id="url" name="url" type="url" value="" size="30" maxlength="200" autocomplete="url" /></p> <p class="comment-form-cookies-consent"><input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes" /> <label for="wp-comment-cookies-consent">Save my name, email, and website in this browser for the next time I comment.</label></p> <p class="comment-subscription-form"><input type="checkbox" name="subscribe_comments" id="subscribe_comments" value="subscribe" style="width: auto; -moz-appearance: checkbox; -webkit-appearance: checkbox;" /> <label class="subscribe-label" id="subscribe-label" for="subscribe_comments">Notify me of follow-up comments by email.</label></p><p class="comment-subscription-form"><input type="checkbox" name="subscribe_blog" id="subscribe_blog" value="subscribe" style="width: auto; -moz-appearance: checkbox; -webkit-appearance: checkbox;" /> <label class="subscribe-label" id="subscribe-blog-label" for="subscribe_blog">Notify me of new posts by email.</label></p><p class="form-submit"><input name="submit" type="submit" id="submit" class="submit" value="Post Comment" /> <input type='hidden' name='comment_post_ID' value='337' id='comment_post_ID' /> <input type='hidden' name='comment_parent' id='comment_parent' value='0' /> </p><p style="display: none;"><input type="hidden" id="akismet_comment_nonce" name="akismet_comment_nonce" value="6f69cb8660" /></p><p style="display: none !important;" class="akismet-fields-container" data-prefix="ak_"><label>Δ<textarea name="ak_hp_textarea" cols="45" rows="8" maxlength="100"></textarea></label><input type="hidden" id="ak_js_1" name="ak_js" value="25"/><script>document.getElementById( "ak_js_1" ).setAttribute( "value", ( new Date() ).getTime() );</script></p></form> </div><!-- #respond --> <p class="akismet_comment_form_privacy_notice">This site uses Akismet to reduce spam. <a href="https://akismet.com/privacy/" target="_blank" rel="nofollow noopener">Learn how your comment data is processed</a>.</p> </div><!-- #comments --> </main><!-- #main --> <aside id="secondary" class="widget-area"> <section id="search-2" class="widget widget_search"><form role="search" method="get" class="search-form" action="https://www.gubatron.com/blog/"> <label> <span class="screen-reader-text">Search for:</span> <input type="search" class="search-field" placeholder="Search …" value="" name="s" /> </label> <input type="submit" class="search-submit" value="Search" /> </form></section> <section id="recent-posts-2" class="widget widget_recent_entries"> <h2 class="widget-title">Recent Posts</h2> <ul> <li> <a href="https://www.gubatron.com/blog/top-5-weighted-exercises-for-climbers/">Top 5 Weighted Exercises for Climbers</a> </li> <li> <a href="https://www.gubatron.com/blog/10-ways-of-thinking-about-anything/">10 Ways of Thinking About Anything</a> </li> <li> <a href="https://www.gubatron.com/blog/remotely-code-signing-windows-apps-using-aws-virtual-servers-and-a-physical-usb-key/">Remotely Code Signing Windows Apps Using AWS Virtual Servers and a Physical USB Key</a> </li> <li> <a href="https://www.gubatron.com/blog/the-strength-of-positive-masculinity-guiding-our-children-toward-empathy-confidence-and-respect/">The Strength of Positive Masculinity: Guiding Our Children Toward Empathy, Confidence, and Respect so they can avoid a life in mental depression</a> </li> <li> <a href="https://www.gubatron.com/blog/the-climbers-pie-a-triad-of-technique-fitness-and-mind/">The Climber’s Pie: A Triad of Technique, Fitness, and Mind</a> </li> </ul> </section><section id="recent-comments-2" class="widget widget_recent_comments"><h2 class="widget-title">Recent Comments</h2><ul id="recentcomments"><li class="recentcomments"><span class="comment-author-link"><a href="http://skatox.com/blog" class="url" rel="ugc external nofollow">Skatox</a></span> on <a href="https://www.gubatron.com/blog/monero-development-installing-dependencies-on-mac/#comment-385599">[Monero-Development] Installing dependencies on Mac</a></li><li class="recentcomments"><span class="comment-author-link">Hassan</span> on <a href="https://www.gubatron.com/blog/script-to-automatically-detect-and-ban-malicious-ips-that-try-to-brute-force-ssh-accounts/#comment-372563">Script to automatically detect and ban malicious IPs that try to brute force SSH accounts</a></li><li class="recentcomments"><span class="comment-author-link">Vladimir Smogitel</span> on <a href="https://www.gubatron.com/blog/jconsole-connection-failed-retry-solved-java-jmx/#comment-370871">jconsole: “Connection Failed: Retry?” #SOLVED #java #jmx</a></li><li class="recentcomments"><span class="comment-author-link">gubatron</span> on <a href="https://www.gubatron.com/blog/las-mentiras-sobre-la-marihuana/#comment-370210">Las Mentiras sobre la Marihuana</a></li><li class="recentcomments"><span class="comment-author-link">Robin</span> on <a href="https://www.gubatron.com/blog/solved-gradle-how-to-increase-the-java-compilers-available-heap-memory/#comment-364363">[SOLVED] Gradle: How to increase the Java Compiler’s available Heap Memory</a></li></ul></section><section id="archives-2" class="widget widget_archive"><h2 class="widget-title">Archives</h2> <ul> <li><a href='https://www.gubatron.com/blog/2024/06/'>June 2024</a></li> <li><a href='https://www.gubatron.com/blog/2024/05/'>May 2024</a></li> <li><a href='https://www.gubatron.com/blog/2024/04/'>April 2024</a></li> <li><a href='https://www.gubatron.com/blog/2023/07/'>July 2023</a></li> <li><a href='https://www.gubatron.com/blog/2023/06/'>June 2023</a></li> <li><a href='https://www.gubatron.com/blog/2023/04/'>April 2023</a></li> <li><a href='https://www.gubatron.com/blog/2023/02/'>February 2023</a></li> <li><a href='https://www.gubatron.com/blog/2023/01/'>January 2023</a></li> <li><a href='https://www.gubatron.com/blog/2022/12/'>December 2022</a></li> <li><a href='https://www.gubatron.com/blog/2022/11/'>November 2022</a></li> <li><a href='https://www.gubatron.com/blog/2022/09/'>September 2022</a></li> <li><a href='https://www.gubatron.com/blog/2022/03/'>March 2022</a></li> <li><a href='https://www.gubatron.com/blog/2021/11/'>November 2021</a></li> <li><a href='https://www.gubatron.com/blog/2021/05/'>May 2021</a></li> <li><a href='https://www.gubatron.com/blog/2021/01/'>January 2021</a></li> <li><a href='https://www.gubatron.com/blog/2020/08/'>August 2020</a></li> <li><a href='https://www.gubatron.com/blog/2020/02/'>February 2020</a></li> <li><a href='https://www.gubatron.com/blog/2019/12/'>December 2019</a></li> <li><a href='https://www.gubatron.com/blog/2019/11/'>November 2019</a></li> <li><a href='https://www.gubatron.com/blog/2019/09/'>September 2019</a></li> <li><a href='https://www.gubatron.com/blog/2019/06/'>June 2019</a></li> <li><a href='https://www.gubatron.com/blog/2019/05/'>May 2019</a></li> <li><a href='https://www.gubatron.com/blog/2019/04/'>April 2019</a></li> <li><a href='https://www.gubatron.com/blog/2018/05/'>May 2018</a></li> <li><a href='https://www.gubatron.com/blog/2017/12/'>December 2017</a></li> <li><a href='https://www.gubatron.com/blog/2017/07/'>July 2017</a></li> <li><a href='https://www.gubatron.com/blog/2017/06/'>June 2017</a></li> <li><a href='https://www.gubatron.com/blog/2017/03/'>March 2017</a></li> <li><a href='https://www.gubatron.com/blog/2017/01/'>January 2017</a></li> <li><a href='https://www.gubatron.com/blog/2016/12/'>December 2016</a></li> <li><a href='https://www.gubatron.com/blog/2016/11/'>November 2016</a></li> <li><a href='https://www.gubatron.com/blog/2016/09/'>September 2016</a></li> <li><a href='https://www.gubatron.com/blog/2016/07/'>July 2016</a></li> <li><a href='https://www.gubatron.com/blog/2016/06/'>June 2016</a></li> <li><a href='https://www.gubatron.com/blog/2016/05/'>May 2016</a></li> <li><a href='https://www.gubatron.com/blog/2016/04/'>April 2016</a></li> <li><a href='https://www.gubatron.com/blog/2016/01/'>January 2016</a></li> <li><a href='https://www.gubatron.com/blog/2015/12/'>December 2015</a></li> <li><a href='https://www.gubatron.com/blog/2015/04/'>April 2015</a></li> <li><a href='https://www.gubatron.com/blog/2015/03/'>March 2015</a></li> <li><a href='https://www.gubatron.com/blog/2015/02/'>February 2015</a></li> <li><a href='https://www.gubatron.com/blog/2015/01/'>January 2015</a></li> <li><a href='https://www.gubatron.com/blog/2014/12/'>December 2014</a></li> <li><a href='https://www.gubatron.com/blog/2014/10/'>October 2014</a></li> <li><a href='https://www.gubatron.com/blog/2014/09/'>September 2014</a></li> <li><a href='https://www.gubatron.com/blog/2014/08/'>August 2014</a></li> <li><a href='https://www.gubatron.com/blog/2014/07/'>July 2014</a></li> <li><a href='https://www.gubatron.com/blog/2014/06/'>June 2014</a></li> <li><a href='https://www.gubatron.com/blog/2014/05/'>May 2014</a></li> <li><a href='https://www.gubatron.com/blog/2014/04/'>April 2014</a></li> <li><a href='https://www.gubatron.com/blog/2014/02/'>February 2014</a></li> <li><a href='https://www.gubatron.com/blog/2014/01/'>January 2014</a></li> <li><a href='https://www.gubatron.com/blog/2013/12/'>December 2013</a></li> <li><a href='https://www.gubatron.com/blog/2013/11/'>November 2013</a></li> <li><a href='https://www.gubatron.com/blog/2013/10/'>October 2013</a></li> <li><a href='https://www.gubatron.com/blog/2013/09/'>September 2013</a></li> <li><a href='https://www.gubatron.com/blog/2013/08/'>August 2013</a></li> <li><a href='https://www.gubatron.com/blog/2013/07/'>July 2013</a></li> <li><a href='https://www.gubatron.com/blog/2013/06/'>June 2013</a></li> <li><a href='https://www.gubatron.com/blog/2013/05/'>May 2013</a></li> <li><a href='https://www.gubatron.com/blog/2013/04/'>April 2013</a></li> <li><a href='https://www.gubatron.com/blog/2013/03/'>March 2013</a></li> <li><a href='https://www.gubatron.com/blog/2013/02/'>February 2013</a></li> <li><a href='https://www.gubatron.com/blog/2013/01/'>January 2013</a></li> <li><a href='https://www.gubatron.com/blog/2012/12/'>December 2012</a></li> <li><a href='https://www.gubatron.com/blog/2012/11/'>November 2012</a></li> <li><a href='https://www.gubatron.com/blog/2012/10/'>October 2012</a></li> <li><a href='https://www.gubatron.com/blog/2012/09/'>September 2012</a></li> <li><a href='https://www.gubatron.com/blog/2012/07/'>July 2012</a></li> <li><a href='https://www.gubatron.com/blog/2012/06/'>June 2012</a></li> <li><a href='https://www.gubatron.com/blog/2012/05/'>May 2012</a></li> <li><a href='https://www.gubatron.com/blog/2012/04/'>April 2012</a></li> <li><a href='https://www.gubatron.com/blog/2012/03/'>March 2012</a></li> <li><a href='https://www.gubatron.com/blog/2012/02/'>February 2012</a></li> <li><a href='https://www.gubatron.com/blog/2012/01/'>January 2012</a></li> <li><a href='https://www.gubatron.com/blog/2011/12/'>December 2011</a></li> <li><a href='https://www.gubatron.com/blog/2011/11/'>November 2011</a></li> <li><a href='https://www.gubatron.com/blog/2011/10/'>October 2011</a></li> <li><a href='https://www.gubatron.com/blog/2011/09/'>September 2011</a></li> <li><a href='https://www.gubatron.com/blog/2011/08/'>August 2011</a></li> <li><a href='https://www.gubatron.com/blog/2011/06/'>June 2011</a></li> <li><a href='https://www.gubatron.com/blog/2011/05/'>May 2011</a></li> <li><a href='https://www.gubatron.com/blog/2011/04/'>April 2011</a></li> <li><a href='https://www.gubatron.com/blog/2011/03/'>March 2011</a></li> <li><a href='https://www.gubatron.com/blog/2011/02/'>February 2011</a></li> <li><a href='https://www.gubatron.com/blog/2010/12/'>December 2010</a></li> <li><a href='https://www.gubatron.com/blog/2010/11/'>November 2010</a></li> <li><a href='https://www.gubatron.com/blog/2010/10/'>October 2010</a></li> <li><a href='https://www.gubatron.com/blog/2010/09/'>September 2010</a></li> <li><a href='https://www.gubatron.com/blog/2010/08/'>August 2010</a></li> <li><a href='https://www.gubatron.com/blog/2010/07/'>July 2010</a></li> <li><a href='https://www.gubatron.com/blog/2010/06/'>June 2010</a></li> <li><a href='https://www.gubatron.com/blog/2010/05/'>May 2010</a></li> <li><a href='https://www.gubatron.com/blog/2010/04/'>April 2010</a></li> <li><a href='https://www.gubatron.com/blog/2010/03/'>March 2010</a></li> <li><a href='https://www.gubatron.com/blog/2010/02/'>February 2010</a></li> <li><a href='https://www.gubatron.com/blog/2010/01/'>January 2010</a></li> <li><a href='https://www.gubatron.com/blog/2009/12/'>December 2009</a></li> <li><a href='https://www.gubatron.com/blog/2009/10/'>October 2009</a></li> <li><a href='https://www.gubatron.com/blog/2009/09/'>September 2009</a></li> <li><a href='https://www.gubatron.com/blog/2009/07/'>July 2009</a></li> <li><a href='https://www.gubatron.com/blog/2009/05/'>May 2009</a></li> <li><a href='https://www.gubatron.com/blog/2009/04/'>April 2009</a></li> <li><a href='https://www.gubatron.com/blog/2009/03/'>March 2009</a></li> <li><a href='https://www.gubatron.com/blog/2009/02/'>February 2009</a></li> <li><a href='https://www.gubatron.com/blog/2009/01/'>January 2009</a></li> <li><a href='https://www.gubatron.com/blog/2008/12/'>December 2008</a></li> <li><a href='https://www.gubatron.com/blog/2008/11/'>November 2008</a></li> <li><a href='https://www.gubatron.com/blog/2008/10/'>October 2008</a></li> <li><a href='https://www.gubatron.com/blog/2008/09/'>September 2008</a></li> <li><a href='https://www.gubatron.com/blog/2008/08/'>August 2008</a></li> <li><a href='https://www.gubatron.com/blog/2008/07/'>July 2008</a></li> <li><a href='https://www.gubatron.com/blog/2008/06/'>June 2008</a></li> <li><a href='https://www.gubatron.com/blog/2008/05/'>May 2008</a></li> <li><a href='https://www.gubatron.com/blog/2008/04/'>April 2008</a></li> <li><a href='https://www.gubatron.com/blog/2008/03/'>March 2008</a></li> <li><a href='https://www.gubatron.com/blog/2008/02/'>February 2008</a></li> <li><a href='https://www.gubatron.com/blog/2008/01/'>January 2008</a></li> <li><a href='https://www.gubatron.com/blog/2007/12/'>December 2007</a></li> <li><a href='https://www.gubatron.com/blog/2007/11/'>November 2007</a></li> <li><a href='https://www.gubatron.com/blog/2007/10/'>October 2007</a></li> <li><a href='https://www.gubatron.com/blog/2007/09/'>September 2007</a></li> <li><a href='https://www.gubatron.com/blog/2007/08/'>August 2007</a></li> <li><a href='https://www.gubatron.com/blog/2007/07/'>July 2007</a></li> <li><a href='https://www.gubatron.com/blog/2007/06/'>June 2007</a></li> <li><a href='https://www.gubatron.com/blog/2007/05/'>May 2007</a></li> <li><a href='https://www.gubatron.com/blog/2007/04/'>April 2007</a></li> <li><a href='https://www.gubatron.com/blog/2007/03/'>March 2007</a></li> <li><a href='https://www.gubatron.com/blog/2007/02/'>February 2007</a></li> <li><a href='https://www.gubatron.com/blog/2007/01/'>January 2007</a></li> <li><a href='https://www.gubatron.com/blog/2006/12/'>December 2006</a></li> <li><a href='https://www.gubatron.com/blog/2006/11/'>November 2006</a></li> <li><a href='https://www.gubatron.com/blog/2006/10/'>October 2006</a></li> <li><a href='https://www.gubatron.com/blog/2006/09/'>September 2006</a></li> <li><a href='https://www.gubatron.com/blog/2006/08/'>August 2006</a></li> <li><a href='https://www.gubatron.com/blog/2006/07/'>July 2006</a></li> <li><a href='https://www.gubatron.com/blog/2006/06/'>June 2006</a></li> <li><a href='https://www.gubatron.com/blog/2006/05/'>May 2006</a></li> <li><a href='https://www.gubatron.com/blog/2006/04/'>April 2006</a></li> <li><a href='https://www.gubatron.com/blog/2006/03/'>March 2006</a></li> <li><a href='https://www.gubatron.com/blog/2006/02/'>February 2006</a></li> <li><a href='https://www.gubatron.com/blog/2006/01/'>January 2006</a></li> <li><a href='https://www.gubatron.com/blog/2005/12/'>December 2005</a></li> <li><a href='https://www.gubatron.com/blog/2005/11/'>November 2005</a></li> <li><a href='https://www.gubatron.com/blog/2005/10/'>October 2005</a></li> <li><a href='https://www.gubatron.com/blog/2005/09/'>September 2005</a></li> <li><a href='https://www.gubatron.com/blog/2005/08/'>August 2005</a></li> <li><a href='https://www.gubatron.com/blog/2005/07/'>July 2005</a></li> <li><a href='https://www.gubatron.com/blog/2005/06/'>June 2005</a></li> <li><a href='https://www.gubatron.com/blog/2005/05/'>May 2005</a></li> <li><a href='https://www.gubatron.com/blog/2005/04/'>April 2005</a></li> <li><a href='https://www.gubatron.com/blog/2005/03/'>March 2005</a></li> <li><a href='https://www.gubatron.com/blog/2005/02/'>February 2005</a></li> <li><a href='https://www.gubatron.com/blog/2005/01/'>January 2005</a></li> <li><a href='https://www.gubatron.com/blog/2004/12/'>December 2004</a></li> <li><a href='https://www.gubatron.com/blog/2004/11/'>November 2004</a></li> <li><a href='https://www.gubatron.com/blog/2004/10/'>October 2004</a></li> </ul> </section><section id="categories-2" class="widget widget_categories"><h2 class="widget-title">Categories</h2> <ul> <li class="cat-item cat-item-3"><a href="https://www.gubatron.com/blog/category/127001/">!127.0.0.1</a> </li> <li class="cat-item cat-item-4"><a href="https://www.gubatron.com/blog/category/ajax/">AJAX</a> </li> <li class="cat-item cat-item-5"><a href="https://www.gubatron.com/blog/category/android/">Android</a> </li> <li class="cat-item cat-item-6"><a href="https://www.gubatron.com/blog/category/articulos-publicados/">Articulos Publicados</a> </li> <li class="cat-item cat-item-7"><a href="https://www.gubatron.com/blog/category/ateismo/">ateismo</a> </li> <li class="cat-item cat-item-8"><a href="https://www.gubatron.com/blog/category/atheism/">atheism</a> </li> <li class="cat-item cat-item-9"><a href="https://www.gubatron.com/blog/category/ayer-hoy-y-manana/">Ayer Hoy y Mañana</a> </li> <li class="cat-item cat-item-10"><a href="https://www.gubatron.com/blog/category/babes/">Babes</a> </li> <li class="cat-item cat-item-11"><a href="https://www.gubatron.com/blog/category/bets/">Bets</a> </li> <li class="cat-item cat-item-1361"><a href="https://www.gubatron.com/blog/category/bitcoin-2/">BitCoin</a> </li> <li class="cat-item cat-item-1475"><a href="https://www.gubatron.com/blog/category/bittorrent/">Bittorrent</a> </li> <li class="cat-item cat-item-12"><a href="https://www.gubatron.com/blog/category/bloopcast/">Bloopcast</a> </li> <li class="cat-item cat-item-1587"><a href="https://www.gubatron.com/blog/category/bouldering-climbing/">Bouldering/Climbing</a> </li> <li class="cat-item cat-item-13"><a href="https://www.gubatron.com/blog/category/capoeira/">Capoeira</a> </li> <li class="cat-item cat-item-14"><a href="https://www.gubatron.com/blog/category/caracas-city-life/">Caracas City Life</a> </li> <li class="cat-item cat-item-15"><a href="https://www.gubatron.com/blog/category/code/">Code</a> </li> <li class="cat-item cat-item-16"><a href="https://www.gubatron.com/blog/category/conspiracy-theories/">conspiracy theories</a> </li> <li class="cat-item cat-item-1319"><a href="https://www.gubatron.com/blog/category/cooking-2/">Cooking</a> </li> <li class="cat-item cat-item-17"><a href="https://www.gubatron.com/blog/category/creative-commons/">Creative Commons</a> </li> <li class="cat-item cat-item-18"><a href="https://www.gubatron.com/blog/category/de-paseo/">De paseo</a> </li> <li class="cat-item cat-item-19"><a href="https://www.gubatron.com/blog/category/diary/">Diary</a> </li> <li class="cat-item cat-item-20"><a href="https://www.gubatron.com/blog/category/dreams/">Dreams</a> </li> <li class="cat-item cat-item-21"><a href="https://www.gubatron.com/blog/category/en-la-cocina/">En la cocina</a> </li> <li class="cat-item cat-item-22"><a href="https://www.gubatron.com/blog/category/energy/">Energy</a> </li> <li class="cat-item cat-item-23"><a href="https://www.gubatron.com/blog/category/ensayos/">Ensayos</a> </li> <li class="cat-item cat-item-25"><a href="https://www.gubatron.com/blog/category/episodios/">Episodios</a> </li> <li class="cat-item cat-item-1665"><a href="https://www.gubatron.com/blog/category/fitness/">Fitness</a> </li> <li class="cat-item cat-item-26"><a href="https://www.gubatron.com/blog/category/free-software/">Free Software</a> </li> <li class="cat-item cat-item-27"><a href="https://www.gubatron.com/blog/category/frostwire/">FrostWire</a> </li> <li class="cat-item cat-item-28"><a href="https://www.gubatron.com/blog/category/funny/">Funny</a> </li> <li class="cat-item cat-item-1208"><a href="https://www.gubatron.com/blog/category/gadgets-2/">Gadgets</a> </li> <li class="cat-item cat-item-29"><a href="https://www.gubatron.com/blog/category/gear-grinders/">Gear Grinders</a> </li> <li class="cat-item cat-item-30"><a href="https://www.gubatron.com/blog/category/geeklife/">Geeklife</a> </li> <li class="cat-item cat-item-31"><a href="https://www.gubatron.com/blog/category/geekshirts/">GeekShirts</a> </li> <li class="cat-item cat-item-32"><a href="https://www.gubatron.com/blog/category/google/">google</a> </li> <li class="cat-item cat-item-33"><a href="https://www.gubatron.com/blog/category/gubatron/">Gubatron</a> </li> <li class="cat-item cat-item-34"><a href="https://www.gubatron.com/blog/category/guitar/">Guitar</a> </li> <li class="cat-item cat-item-1640"><a href="https://www.gubatron.com/blog/category/haskell/">Haskell</a> </li> <li class="cat-item cat-item-35"><a href="https://www.gubatron.com/blog/category/historias/">Historias</a> </li> <li class="cat-item cat-item-36"><a href="https://www.gubatron.com/blog/category/howto-2/">Howto</a> </li> <li class="cat-item cat-item-37"><a href="https://www.gubatron.com/blog/category/hulu/">hulu</a> </li> <li class="cat-item cat-item-38"><a href="https://www.gubatron.com/blog/category/ideas/">Ideas</a> </li> <li class="cat-item cat-item-39"><a href="https://www.gubatron.com/blog/category/internet/">Internet</a> </li> <li class="cat-item cat-item-40"><a href="https://www.gubatron.com/blog/category/jobs/">Jobs</a> </li> <li class="cat-item cat-item-41"><a href="https://www.gubatron.com/blog/category/joost/">Joost</a> </li> <li class="cat-item cat-item-42"><a href="https://www.gubatron.com/blog/category/ley-de-shadow/">Ley de Shadow</a> </li> <li class="cat-item cat-item-43"><a href="https://www.gubatron.com/blog/category/linux/">Linux</a> </li> <li class="cat-item cat-item-45"><a href="https://www.gubatron.com/blog/category/mac-osx/">Mac OSX</a> </li> <li class="cat-item cat-item-46"><a href="https://www.gubatron.com/blog/category/musica/">Música</a> </li> <li class="cat-item cat-item-48"><a href="https://www.gubatron.com/blog/category/memorias/">Memorias</a> </li> <li class="cat-item cat-item-49"><a href="https://www.gubatron.com/blog/category/mentors/">Mentors</a> </li> <li class="cat-item cat-item-50"><a href="https://www.gubatron.com/blog/category/metafologia/">Metafologia</a> </li> <li class="cat-item cat-item-51"><a href="https://www.gubatron.com/blog/category/miami/">miami</a> </li> <li class="cat-item cat-item-52"><a href="https://www.gubatron.com/blog/category/miami-beach/">Miami Beach</a> </li> <li class="cat-item cat-item-1573"><a href="https://www.gubatron.com/blog/category/monero/">Monero</a> </li> <li class="cat-item cat-item-53"><a href="https://www.gubatron.com/blog/category/movie-trailers/">Movie Trailers</a> </li> <li class="cat-item cat-item-54"><a href="https://www.gubatron.com/blog/category/movies/">Movies</a> </li> <li class="cat-item cat-item-55"><a href="https://www.gubatron.com/blog/category/music/">music</a> </li> <li class="cat-item cat-item-82"><a href="https://www.gubatron.com/blog/category/videos/music-videos/">Music Videos</a> </li> <li class="cat-item cat-item-56"><a href="https://www.gubatron.com/blog/category/mybloopcom/">MyBloop.com</a> </li> <li class="cat-item cat-item-57"><a href="https://www.gubatron.com/blog/category/nanotechnology/">Nanotechnology</a> </li> <li class="cat-item cat-item-58"><a href="https://www.gubatron.com/blog/category/new-york-city-life/">New York City Life</a> </li> <li class="cat-item cat-item-59"><a href="https://www.gubatron.com/blog/category/opinions/">Opinions</a> </li> <li class="cat-item cat-item-60"><a href="https://www.gubatron.com/blog/category/p2p/">P2P</a> </li> <li class="cat-item cat-item-61"><a href="https://www.gubatron.com/blog/category/pablo/">Pablo</a> </li> <li class="cat-item cat-item-1306"><a href="https://www.gubatron.com/blog/category/paleo/">Paleo</a> </li> <li class="cat-item cat-item-1204"><a href="https://www.gubatron.com/blog/category/philosophy-2/">Philosophy</a> </li> <li class="cat-item cat-item-62"><a href="https://www.gubatron.com/blog/category/pictures/">Pictures</a> </li> <li class="cat-item cat-item-63"><a href="https://www.gubatron.com/blog/category/podcast/">Podcast</a> </li> <li class="cat-item cat-item-64"><a href="https://www.gubatron.com/blog/category/poemas/">Poemas</a> </li> <li class="cat-item cat-item-65"><a href="https://www.gubatron.com/blog/category/python/">Python</a> </li> <li class="cat-item cat-item-66"><a href="https://www.gubatron.com/blog/category/qt4/">Qt4</a> </li> <li class="cat-item cat-item-67"><a href="https://www.gubatron.com/blog/category/quotes-citas/">Quotes / Citas</a> </li> <li class="cat-item cat-item-68"><a href="https://www.gubatron.com/blog/category/random-stuff/">Random Stuff</a> </li> <li class="cat-item cat-item-1248"><a href="https://www.gubatron.com/blog/category/raspberry-pi-2/">Raspberry PI</a> </li> <li class="cat-item cat-item-1175"><a href="https://www.gubatron.com/blog/category/review-2/">Review</a> </li> <li class="cat-item cat-item-69"><a href="https://www.gubatron.com/blog/category/robotics/">Robotics</a> </li> <li class="cat-item cat-item-70"><a href="https://www.gubatron.com/blog/category/running/">Running</a> </li> <li class="cat-item cat-item-1277"><a href="https://www.gubatron.com/blog/category/scala/">scala</a> </li> <li class="cat-item cat-item-71"><a href="https://www.gubatron.com/blog/category/screencasts/">Screencasts</a> </li> <li class="cat-item cat-item-72"><a href="https://www.gubatron.com/blog/category/singularity/">Singularity</a> </li> <li class="cat-item cat-item-73"><a href="https://www.gubatron.com/blog/category/smartphones/">Smartphones</a> </li> <li class="cat-item cat-item-74"><a href="https://www.gubatron.com/blog/category/software-development/">Software Development</a> </li> <li class="cat-item cat-item-1178"><a href="https://www.gubatron.com/blog/category/streetart/">streetart</a> </li> <li class="cat-item cat-item-75"><a href="https://www.gubatron.com/blog/category/tamy/">Tamy</a> </li> <li class="cat-item cat-item-1261"><a href="https://www.gubatron.com/blog/category/tesla/">Tesla</a> </li> <li class="cat-item cat-item-76"><a href="https://www.gubatron.com/blog/category/twitter/">Twitter</a> </li> <li class="cat-item cat-item-1174"><a href="https://www.gubatron.com/blog/category/unboxing-2/">Unboxing</a> </li> <li class="cat-item cat-item-1"><a href="https://www.gubatron.com/blog/category/uncategorized/">Uncategorized</a> </li> <li class="cat-item cat-item-77"><a href="https://www.gubatron.com/blog/category/video-games/">Video Games</a> </li> <li class="cat-item cat-item-78"><a href="https://www.gubatron.com/blog/category/videocast/">VideoCast</a> </li> <li class="cat-item cat-item-79"><a href="https://www.gubatron.com/blog/category/videos/">Videos</a> </li> <li class="cat-item cat-item-1482"><a href="https://www.gubatron.com/blog/category/vlog/">VLOG</a> </li> <li class="cat-item cat-item-80"><a href="https://www.gubatron.com/blog/category/wtf/">WTF</a> </li> <li class="cat-item cat-item-81"><a href="https://www.gubatron.com/blog/category/xbox/">xbox</a> </li> </ul> </section><section id="meta-2" class="widget widget_meta"><h2 class="widget-title">Meta</h2> <ul> <li><a href="https://www.gubatron.com/blog/wp-login.php">Log in</a></li> <li><a href="https://www.gubatron.com/blog/feed/">Entries feed</a></li> <li><a href="https://www.gubatron.com/blog/comments/feed/">Comments feed</a></li> <li><a href="https://wordpress.org/">WordPress.org</a></li> </ul> </section></aside><!-- #secondary --> </div> </div> </div> <!-- start of footer --> <footer class="site-footer"> <div class="section-wrapper"> <div class="elite-blog-bottom-footer"> <div class="bottom-footer-content no-social-menu"> <p>Copyright © 2024 <a href="https://www.gubatron.com/blog/">Gubatron.com</a> | Marvel Blog by <a target="_blank" href="https://ascendoor.com/">Ascendoor</a> | Powered by <a href="https://wordpress.org/" target="_blank">WordPress</a>. </p> <div class="header-social-icon"> <div class="header-social-icon-container"> </div> </div> </div> </div> </div> </footer> <!-- end of brand footer --> <a href="#" class="scroll-to-top"></a> </div><!-- #page --> <script src="https://www.gubatron.com/blog/wp-content/themes/marvel-blog/assets/js/custom.min.js?ver=1.0.0" id="marvel-blog-script-js"></script> <script src="https://www.gubatron.com/blog/wp-content/themes/elite-blog/assets/js/navigation.min.js?ver=1.2.0" id="elite-blog-navigation-js"></script> <script src="https://www.gubatron.com/blog/wp-content/themes/elite-blog/assets/js/slick.min.js?ver=1.8.0" id="elite-blog-slick-js-js"></script> <script src="https://www.gubatron.com/blog/wp-includes/js/comment-reply.min.js?ver=6.5.4" id="comment-reply-js" async data-wp-strategy="async"></script> <script src="https://stats.wp.com/e-202438.js" id="jetpack-stats-js" data-wp-strategy="defer"></script> <script id="jetpack-stats-js-after"> _stq = window._stq || []; _stq.push([ "view", JSON.parse("{\"v\":\"ext\",\"blog\":\"87318645\",\"post\":\"337\",\"tz\":\"0\",\"srv\":\"www.gubatron.com\",\"j\":\"1:13.5\"}") ]); _stq.push([ "clickTrackerInit", "87318645", "337" ]); </script> <script defer src="https://www.gubatron.com/blog/wp-content/plugins/akismet/_inc/akismet-frontend.js?ver=1713981988" id="akismet-frontend-js"></script> </body> </html>