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-3679" class="post-3679 post type-post status-publish format-standard hentry category-code category-monero"> <div class="post-text"> <header class="entry-header"> <h5 class="entry-title"><a href="https://www.gubatron.com/blog/monero-development-installing-dependencies-on-mac/" rel="bookmark">[Monero-Development] Installing dependencies on Mac</a></h5> </header><!-- .entry-header --> <div class="entry-content"> <p>March 12th 2017. In order to build Monero on MacOSX with cmake, I had to install the following dependencies via homebrew brew install libunwind-headers –force brew link libunwind-headers –force brew install miniupnpc brew install ldns brew link ldns –force brew install expat brew link expat –force brew install doxygen</p> </div><!-- .entry-content --> </div> </article> </div> <div> <article id="post-446" class="post-446 post type-post status-publish format-standard hentry category-code category-geeklife category-linux"> <div class="post-text"> <header class="entry-header"> <h5 class="entry-title"><a href="https://www.gubatron.com/blog/como-es-que-convierto-de-decimal-a-binario/" rel="bookmark">Como es que convierto de decimal a binario?</a></h5> </header><!-- .entry-header --> <div class="entry-content"> <p>Recuerdo que esto fue uno de los primeros ejercicios de programacion que me pusieron a hacer en Haskell, convertir de decimal a binario. Aqui una simple implementacion propia en python mientras estaba practicando pal google code jam (que la hice por gusto pq python tiene modulos para convertir de cualquier base a otra) Juguemos a […]</p> </div><!-- .entry-content --> </div> </article> </div> <div> <article id="post-510" class="post-510 post type-post status-publish format-standard hentry category-code category-geeklife category-linux category-python"> <div class="post-text"> <header class="entry-header"> <h5 class="entry-title"><a href="https://www.gubatron.com/blog/fuck-the-python-borg-i-like-singleton-better/" rel="bookmark">Fuck the Python Borg, I like Singleton Better</a></h5> </header><!-- .entry-header --> <div class="entry-content"> <p>I’ve read in parts of the web (and on the Martinelli’s Python Cookbok) that it’s better to do the Borg pattern over singletons, they say something alongs the lines of: “who cares about identity, care about shared state” Coming from the Java world, I just can’t understand that, why waste memory and cpu to address […]</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></form> </div><!-- #respond --> </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-202447.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> </body> </html>