<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5756575318353700712</id><updated>2012-02-16T18:33:54.416-06:00</updated><category term='CodeSOD'/><title type='text'>Impending Failure</title><subtitle type='html'>Ingeniería de Software y otras plagas sobre la faz de la tierra</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://impendingfailure.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5756575318353700712/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://impendingfailure.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Rafael Martinez - Slayer SA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5756575318353700712.post-4799991643548821631</id><published>2011-08-26T14:46:00.001-05:00</published><updated>2011-08-26T14:46:56.287-05:00</updated><title type='text'>Random SQL from hell ¬¬</title><content type='html'>SELECT &lt;br&gt;     Table1.XXX as YYY,&lt;br&gt;     Table3.XXX as YYY,&lt;br&gt;     Table3.XXX as YYY,&lt;br&gt;     Table2.XXX as YYY,&lt;br&gt;     Table2.XXX as YYY,&lt;br&gt;     Table2.XXX as YYY,&lt;br&gt;     Table2.XXX as YYY,&lt;br&gt;     CASE WHEN Table7.XXX IS NULL THEN &amp;#39; &amp;#39; ELSE Table7.XXX END ZZZ,&lt;br&gt;      CASE WHEN Table1.XXX IS NULL THEN 0 ELSE Table1.XXX END ZZZ,&lt;br&gt;     CASE WHEN Table1.XXX  IS NULL THEN &amp;#39; &amp;#39; ELSE Table1.XXX END ZZZ,&lt;br&gt;     CASE WHEN Table1.XXX IS NULL THEN SYSDATE ELSE Table1.XXX END ZZZ,     &lt;br&gt;      CASE WHEN Table1.XXX IS NULL THEN 0 ELSE Table1.XXX END ZZZ,&lt;br&gt;     CASE WHEN Table1.XXX IS NULL THEN 0 ELSE Table1.XXX END ZZZ,     &lt;br&gt;     CASE WHEN Table1.XXX IS NULL THEN 0 ELSE Table1.XXX END ZZZ,&lt;br&gt;     CASE WHEN Table1.XXX IS NULL THEN 0 ELSE XXX END ZZZ,&lt;br&gt;      CASE WHEN Table8.XXX IS NULL THEN &amp;#39; &amp;#39; ELSE Table8.XXX END ZZZ,     &lt;br&gt;     CASE WHEN Table2.XXX IS NULL THEN 0 ELSE Table2.XXX END ZZZ,&lt;br&gt;     Table5.XXX as YYY, &lt;br&gt;     CASE WHEN Table2.XXX IS NULL THEN 0 ELSE Table2.XXX END ZZZ,&lt;br&gt;      CASE WHEN Table2.XXX IS NULL THEN &amp;#39; &amp;#39; ELSE Table2.XXX END ZZZ,&lt;br&gt;     CASE WHEN Table10.XXX IS NULL THEN &amp;#39; &amp;#39; ELSE Table10.XXX END ZZZ,          &lt;br&gt;     CASE WHEN Table2.XXX IS NULL THEN &amp;#39; &amp;#39; ELSE Table2.XXX END ZZZ,&lt;br&gt;      CASE WHEN Table2.XXX IS NULL THEN &amp;#39; &amp;#39; ELSE Table2.XXX END ZZZ,&lt;br&gt;     CASE WHEN Table2.XXX IS NULL THEN &amp;#39; &amp;#39; ELSE Table2.XXX END ZZZ,&lt;br&gt;     Table2.XXX as YYY,&lt;br&gt;     CASE WHEN Table2.XXX IS NULL THEN SYSDATE ELSE Table2.XXX END ZZZ,&lt;br&gt;      CASE WHEN Table2.XXX IS NULL THEN 0 ELSE Table2.XXX END ZZZ,&lt;br&gt;     (SELECT COUNT (*) FROM TABLE_21 Table21 WHERE Table21.XXX = Table2.XXX ) XXX,&lt;br&gt;     CASE WHEN Table1.XXX IS NULL THEN &amp;#39; &amp;#39; ELSE Table1.XXX END ZZZ,&lt;br&gt;      CASE WHEN Table2.XXX IS NULL THEN 0 ELSE Table2.XXX END ZZZ,&lt;br&gt;     CASE WHEN Table21.XXX IS NULL THEN 0 ELSE Table21.XXX END ZZZ,&lt;br&gt;     CASE WHEN Table10.XXX IS NULL THEN 0 ELSE Table10.XXX END ZZZ,   &lt;br&gt;     CASE WHEN Table2.XXX IS NULL THEN &amp;#39; &amp;#39; ELSE Table2.XXX END ZZZ,&lt;br&gt;      CASE WHEN Table2.XXX IS NULL THEN &amp;#39; &amp;#39; ELSE Table2.XXX END ZZZ,&lt;br&gt;     CASE WHEN Table1.XXX IS NULL THEN 0 ELSE Table1.XXX END ZZZ,&lt;br&gt;     CASE WHEN Table1.XXX IS NULL THEN SYSDATE ELSE Table1.XXX END ZZZ,&lt;br&gt;      CASE WHEN Table2.XXX IS NULL THEN 0 ELSE Table2.XXX END ZZZ,&lt;br&gt;     CASE WHEN Table2.XXX IS NULL THEN 0 ELSE Table2.XXX END ZZZ,&lt;br&gt;     CASE WHEN &lt;br&gt;         (SELECT XXX FROM TABLE_16  WHERE XXX = XXX)     &lt;br&gt;     IS NULL THEN &amp;#39; &amp;#39; ELSE&lt;br&gt;          (SELECT XXX FROM TABLE_16  WHERE XXX = XXX) END ZZZ,     &lt;br&gt;     CASE WHEN Table1.XXX IS NULL THEN 0 ELSE Table1.XXX END ZZZ,&lt;br&gt;     CASE WHEN Table1.XXX IS NULL THEN 0 ELSE Table1.XXX END ZZZ,&lt;br&gt;     CASE WHEN Table1.XXX IS NULL THEN SYSDATE ELSE Table1.XXX END ZZZ,&lt;br&gt;      Table11.XXX as YYY, &lt;br&gt;     Table11.XXX as YYY, &lt;br&gt;     Table11.XXX as YYY, &lt;br&gt;     Table11.XXX as YYY,&lt;br&gt;     CASE WHEN T.XXX IS NULL THEN &amp;#39; &amp;#39; ELSE T.XXX END ZZZ,&lt;br&gt;     CASE WHEN T.XXX IS NULL THEN &amp;#39; &amp;#39; ELSE T.XXX END ZZZ,&lt;br&gt;      CASE WHEN T.XXX IS NULL THEN &amp;#39; &amp;#39; ELSE T.XXX END ZZZ,&lt;br&gt;     CASE WHEN V.XXX IS NULL THEN &amp;#39; &amp;#39; ELSE V.XXX END ZZZ,&lt;br&gt;     CASE WHEN V.XXX IS NULL THEN &amp;#39; &amp;#39; ELSE V.XXX END ZZZ,&lt;br&gt;     CASE WHEN V.XXX IS NULL THEN &amp;#39; &amp;#39; ELSE V.XXX END ZZZ,&lt;br&gt;      CASE WHEN &lt;br&gt;         (SELECT XXX FROM TABLE_17 Table17 WHERE Table17.XXX AND Table17.XXX  )&lt;br&gt;     IS NULL THEN 0 ELSE &lt;br&gt;         (SELECT XXX FROM TABLE_17 Table17 WHERE Table17.XXX AND Table17.XXX ) END ZZZ,  &lt;br&gt;      CASE WHEN      &lt;br&gt;         (SELECT XXX FROM TABLE_18 Table18 WHERE Table18.XXX AND Table18.XXX )&lt;br&gt;     IS NULL THEN 0 ELSE          &lt;br&gt;         (SELECT XXX FROM TABLE_18 Table18 WHERE Table18.XXX AND Table18.XXX ) END ZZZ,&lt;br&gt;      CASE WHEN      &lt;br&gt;         (SELECT XXX FROM TABLE_18 Table18 WHERE Table18.XXX AND Table18.XXX )&lt;br&gt;     IS NULL THEN 0 ELSE         &lt;br&gt;         (SELECT XXX FROM TABLE_18 Table18 WHERE Table18.XXX AND Table18.XXX ) END ZZZ&lt;br&gt; FROM&lt;br&gt;     TABLE_2 Table2,&lt;br&gt;     TABLE_1 Table1,&lt;br&gt;     TABLE_3 Table3,&lt;br&gt;     TABLE_4 Table4,&lt;br&gt;     TABLE_5 Table5,&lt;br&gt;     TABLE_6 Table6,&lt;br&gt;     TABLE_7 Table7,     &lt;br&gt;     TABLE_8 Table8,     &lt;br&gt;     TABLE_9 Table9,&lt;br&gt;      TABLE_10 Table10,&lt;br&gt;     TABLE_11 Table11,&lt;br&gt;     TABLE_12 Table12,&lt;br&gt;     (SELECT&lt;br&gt;          Table12.XXX as YYY,Table13.XXX as YYY, Table19.XXX as YYY, &lt;br&gt;          (SELECT a.XXX FROM TABLE_14 a, TABLE_15 b &lt;br&gt;                WHERE a.XXX = b.XXX AND b.XXX = Table19.XXX ) AS XXX&lt;br&gt;      FROM &lt;br&gt;          TABLE_12 Table12, &lt;br&gt;          TABLE_13 Table13, &lt;br&gt;          TABLE_19 Table19&lt;br&gt;      WHERE &lt;br&gt;          Table12.XXX = Table13.XXX&lt;br&gt;           AND Table19.XXX = Table13.XXX&lt;br&gt;      union &lt;br&gt;      SELECT&lt;br&gt;          Table12.XXX as YYY, null as XXX, null as XXX, null AS XXX&lt;br&gt;      FROM &lt;br&gt;          TABLE_12 Table12&lt;br&gt;      WHERE &lt;br&gt;          Table12.XXX is null) T,      &lt;br&gt;       (SELECT&lt;br&gt;          Table12.XXX as YYY,Table13.XXX as YYY, Table19.XXX as YYY, &lt;br&gt;          (SELECT a.descripcion FROM TABLE_14 a, TABLE_15 b &lt;br&gt;               WHERE a.XXX = b.XXX AND b.XXX = Table19.XXX ) AS XXX&lt;br&gt;       FROM &lt;br&gt;          TABLE_12 Table12, &lt;br&gt;          TABLE_13 Table13, &lt;br&gt;          TABLE_19 Table19&lt;br&gt;      WHERE &lt;br&gt;          Table12.XXX = Table13.XXX&lt;br&gt;          AND Table19.XXX = Table13.XXX&lt;br&gt;      union &lt;br&gt;       SELECT&lt;br&gt;          Table12.XXX as YYY, null as XXX, null as XXX, null AS XXX&lt;br&gt;      FROM &lt;br&gt;          TABLE_12 Table12&lt;br&gt;      WHERE &lt;br&gt;          Table12.XXX is null) V&lt;br&gt;WHERE&lt;br&gt;     Table2.XXX = Table1.XXX&lt;br&gt;      AND XXX.XXX = XXX.XXX&lt;br&gt;     AND Table2.XXX = Table10.XXX (+)&lt;br&gt;     AND Table4.XXX = Table1.XXX&lt;br&gt;     AND XXX.XXX = Table4.XXX&lt;br&gt;     AND XXX.XXX = Table6.XXX&lt;br&gt;     AND Table1.XXX = XXX.XXX     &lt;br&gt;     AND XXX.XXX = Table9.XXX&lt;br&gt;      AND Table12.XXX = Table11.XXX&lt;br&gt;     AND Table1.XXX = Table7.XXX (+)&lt;br&gt;     AND Table1.XXX = Table8.XXX (+)  &lt;br&gt;     AND T.XXX = Table2.XXX &lt;br&gt;     AND V.XXX = Table2.XXX    &lt;br&gt;     AND (Table2.XXX  IS NULL OR Table2.XXX NOT IN (&amp;#39;N&amp;#39;))&lt;br&gt;      AND Table1.XXX = 1                                              &lt;br&gt;order by XXX, XXX, XXX&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5756575318353700712-4799991643548821631?l=impendingfailure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://impendingfailure.blogspot.com/feeds/4799991643548821631/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5756575318353700712&amp;postID=4799991643548821631' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5756575318353700712/posts/default/4799991643548821631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5756575318353700712/posts/default/4799991643548821631'/><link rel='alternate' type='text/html' href='http://impendingfailure.blogspot.com/2011/08/random-sql-from-hell.html' title='Random SQL from hell ¬¬'/><author><name>Rafael Martinez - Slayer SA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5756575318353700712.post-856016251767287736</id><published>2011-04-18T16:19:00.001-05:00</published><updated>2011-04-18T16:19:26.727-05:00</updated><title type='text'>Bad english. Impending failure edition ¬¬</title><content type='html'>Blank stare&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5756575318353700712-856016251767287736?l=impendingfailure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://impendingfailure.blogspot.com/feeds/856016251767287736/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5756575318353700712&amp;postID=856016251767287736' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5756575318353700712/posts/default/856016251767287736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5756575318353700712/posts/default/856016251767287736'/><link rel='alternate' type='text/html' href='http://impendingfailure.blogspot.com/2011/04/bad-english-impending-failure-edition.html' title='Bad english. Impending failure edition ¬¬'/><author><name>Rafael Martinez - Slayer SA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5756575318353700712.post-2061942510357975489</id><published>2011-04-18T16:14:00.000-05:00</published><updated>2011-04-18T16:15:04.705-05:00</updated><title type='text'>Sigh</title><content type='html'>Sometimes it really boggles me how can someone misunderstand simple things. Perhaps I&amp;#39;ve read obscure IT books just to know what means to:&lt;br&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;Introduce an abstract parent and pull up a method.&lt;/li&gt;&lt;/ul&gt;&lt;br&gt; This guy just stared blank at me ¬¬... &lt;br&gt;&lt;br&gt;Have I mentioned that the same recipe was used at least 3 times on the same project and this particular dev did one of them?&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5756575318353700712-2061942510357975489?l=impendingfailure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://impendingfailure.blogspot.com/feeds/2061942510357975489/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5756575318353700712&amp;postID=2061942510357975489' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5756575318353700712/posts/default/2061942510357975489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5756575318353700712/posts/default/2061942510357975489'/><link rel='alternate' type='text/html' href='http://impendingfailure.blogspot.com/2011/04/sigh.html' title='Sigh'/><author><name>Rafael Martinez - Slayer SA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5756575318353700712.post-4901994230947746881</id><published>2011-04-13T18:04:00.001-05:00</published><updated>2011-04-13T18:04:16.983-05:00</updated><title type='text'>If something fails...</title><content type='html'>&lt;div&gt;In case you are wondering, yes, all this code is on the same method.&lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;/div&gt;&lt;blockquote style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;" class="gmail_quote"&gt;try {&lt;br&gt;             Class.forName(&amp;quot;DriverClass&amp;quot;);&lt;br&gt;            Connection conn = DriverManager.getConnection(&lt;br&gt;                    &amp;quot;jdbc:___&amp;quot;,&lt;br&gt;                    &amp;quot;myUser&amp;quot;, &amp;quot;myPass&amp;quot;);&lt;br&gt;             try {&lt;br&gt;                Statement stmt = conn.createStatement(&lt;br&gt;                        ResultSet.TYPE_SCROLL_SENSITIVE,&lt;br&gt;                        ResultSet.CONCUR_READ_ONLY);&lt;br&gt;                try {&lt;br&gt;                    ResultSet rset = stmt.executeQuery(getQuery(true, filter));&lt;br&gt;                     if (rset.last()) {&lt;br&gt;                        counter = rset.getRow();&lt;br&gt;                    } else {&lt;br&gt;                        return;&lt;br&gt;                    }&lt;br&gt;             //CODE    &lt;br&gt;                    rset = stmt.executeQuery(getQuery(false, filter));&lt;br&gt;                     &lt;br&gt;                    try {&lt;br&gt;                        while (rset.next()) {&lt;br&gt;&lt;br&gt;// CODE&lt;br&gt;&lt;br&gt;                            if (rset.getString(&amp;quot;ID_BLA&amp;quot;) != null) {&lt;br&gt;                                String currentTC = rset&lt;br&gt;                                         .getString(&amp;quot;ID_BLA&amp;quot;);&lt;br&gt;                                if (!newTC.equals(currentTC)) {&lt;br&gt;                                    if (rset.getString(&amp;quot;BLA&amp;quot;).equals(&lt;br&gt;                                             &amp;quot;bla&amp;quot;)) {&lt;br&gt; //CODE&lt;br&gt;                                        try {&lt;br&gt;                                           // CODE&lt;br&gt;                                        } catch (SQLException ex) {&lt;br&gt;                                             System.err&lt;br&gt;                                                    .println(&amp;quot;Error &amp;quot;&lt;br&gt;                                                            + ex.getMessage());&lt;br&gt;                                         }&lt;br&gt;                                    } else {&lt;br&gt;                                        // CODE&lt;br&gt;                                        try {&lt;br&gt;                                           // CODE&lt;br&gt;                                         } catch (SQLException ex) {&lt;br&gt;                                            System.err&lt;br&gt;                                                    .println(&amp;quot;Error&amp;quot; &lt;br&gt;                                                            + ex.getMessage());&lt;br&gt;                                         }&lt;br&gt;                                    }&lt;br&gt;                                }&lt;br&gt;           &lt;br&gt;                            }&lt;br&gt;                        }&lt;br&gt;&lt;br&gt;//CODE&lt;br&gt;&lt;br&gt;                    } finally {&lt;br&gt;                         try {&lt;br&gt;                            rset.close();&lt;br&gt;                        } catch (Exception ignore) {&lt;br&gt;                            System.err.println(ignore.getMessage());&lt;br&gt;                        }&lt;br&gt;                     }&lt;br&gt;                } finally {&lt;br&gt;                    try {&lt;br&gt;                        stmt.close();&lt;br&gt;                    } catch (Exception ignore) {&lt;br&gt;                        System.err.println(ignore.getMessage());&lt;br&gt;                     }&lt;br&gt;                }&lt;br&gt;            } finally {&lt;br&gt;                try {&lt;br&gt;                    conn.close();&lt;br&gt;                } catch (Exception ignore) {&lt;br&gt;                    System.err.println(ignore.getMessage());&lt;br&gt;                 }&lt;br&gt;            }&lt;br&gt;&lt;br&gt;        } catch (Exception x) {&lt;br&gt;            x.printStackTrace();&lt;br&gt;            System.err.println(&amp;quot;Error&amp;quot;)&lt;br&gt;        }&lt;br&gt;&lt;/blockquote&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5756575318353700712-4901994230947746881?l=impendingfailure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://impendingfailure.blogspot.com/feeds/4901994230947746881/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5756575318353700712&amp;postID=4901994230947746881' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5756575318353700712/posts/default/4901994230947746881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5756575318353700712/posts/default/4901994230947746881'/><link rel='alternate' type='text/html' href='http://impendingfailure.blogspot.com/2011/04/if-something-fails.html' title='If something fails...'/><author><name>Rafael Martinez - Slayer SA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5756575318353700712.post-8664702250523192224</id><published>2009-07-29T23:34:00.002-05:00</published><updated>2009-07-29T23:36:47.458-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CodeSOD'/><title type='text'>User security</title><content type='html'>Spot the bad practice&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public class User{&lt;br /&gt;   ...// snippet&lt;br /&gt;   public String toString() {&lt;br /&gt;      return "{username:" + username&lt;br /&gt;         + ", password:" + password&lt;br /&gt;         + ", email:"  + email&lt;br /&gt;         + "}";&lt;br /&gt;   }&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5756575318353700712-8664702250523192224?l=impendingfailure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://impendingfailure.blogspot.com/feeds/8664702250523192224/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5756575318353700712&amp;postID=8664702250523192224' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5756575318353700712/posts/default/8664702250523192224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5756575318353700712/posts/default/8664702250523192224'/><link rel='alternate' type='text/html' href='http://impendingfailure.blogspot.com/2009/07/user-security.html' title='User security'/><author><name>Rafael Martinez - Slayer SA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5756575318353700712.post-780807311846148592</id><published>2009-07-29T15:54:00.000-05:00</published><updated>2009-07-29T15:56:12.941-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CodeSOD'/><title type='text'>Spot the BP</title><content type='html'>Lets play a FUN game, spot the bad practices&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;for (Iterator iterator = coll.iterator(); iterator .hasNext();) {&lt;br /&gt;   &lt;br /&gt;   MyBean myBean = (MyBean) iterator.next();&lt;br /&gt;   for(int z= 0; z&amp;lt;typeOfBean.size() ; z++){&lt;br /&gt;    Catalog catalog = (Catalog) typeOfBean.get(z);&lt;br /&gt;    if(myBean.getIdTypeAct().equalsIgnoreCase(catalog.getId().getCtCatalog())){&lt;br /&gt;     myBean.setDescTypeAct(catalog.getCcpDescription());&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;   for(int y= 0; y&amp;lt;categories.size() ; y++){&lt;br /&gt;    Catalog catalog = (Catalog) categories.get(y);&lt;br /&gt;    if(myBean.getIdCatego().equalsIgnoreCase(catalog.getId().getCtCatalog())){&lt;br /&gt;     myBean.setDescCatego(catalog.getCcpDescription());&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;   for(int k= 0; k&amp;lt;requirements.size() ; k++){&lt;br /&gt;    CatalogClientProject catalogClientProject = (CatalogClientProject) requirements.get(k);&lt;br /&gt;    if(myBean.getIdRequerimiento().longValue() == catalogClientProject.getCcpId().longValue()){&lt;br /&gt;     myBean.setDescRequirement( catalogClientProject.getCcpDescription() );&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;   for(int r= 0; r&amp;lt;costCenter.size() ; r++){&lt;br /&gt;    CatalogClientProject catalogClientProject = (CatalogClientProject) costCenter.get(r);&lt;br /&gt;    if(myBean.getIdCentroCosto().longValue() == catalogClientProject.getCcpId().longValue()){&lt;br /&gt;     myBean.setDescCC( catalogClientProject.getCcpDescription() );&lt;br /&gt;    }&lt;br /&gt;   } &lt;br /&gt;   &lt;br /&gt;   for(int h= 0; h&amp;lt;aplicacionesList.size() ; h++){&lt;br /&gt;    CatalogClientProject catalogClientProject = (CatalogClientProject) aplicacionesList.get(h);&lt;br /&gt;    if(myBean.getIdAplicacion().longValue() == catalogClientProject.getCcpId().longValue()){&lt;br /&gt;     myBean.setDescApp( catalogClientProject.getCcpDescription() );&lt;br /&gt;    }&lt;br /&gt;   }   &lt;br /&gt;   retValue.add( myBean );&lt;br /&gt;  }&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5756575318353700712-780807311846148592?l=impendingfailure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://impendingfailure.blogspot.com/feeds/780807311846148592/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5756575318353700712&amp;postID=780807311846148592' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5756575318353700712/posts/default/780807311846148592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5756575318353700712/posts/default/780807311846148592'/><link rel='alternate' type='text/html' href='http://impendingfailure.blogspot.com/2009/07/spot-bp.html' title='Spot the BP'/><author><name>Rafael Martinez - Slayer SA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5756575318353700712.post-2289825439297379230</id><published>2009-07-29T15:36:00.002-05:00</published><updated>2009-07-29T15:37:40.731-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CodeSOD'/><title type='text'>Animalitos programando</title><content type='html'>Cuando uno piensa que ya no hay nada peor, Murphy se encarga de demostrar lo contrario.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;   int diaSemana = 0;&lt;br /&gt;   if( sdfDay.format(sdf.parse(this.semanaSelected)).equalsIgnoreCase("lun") ){&lt;br /&gt;    diaSemana = 1;&lt;br /&gt;   }else if( sdfDay.format(sdf.parse(this.semanaSelected)).equalsIgnoreCase("mar") ){&lt;br /&gt;    diaSemana = 2;&lt;br /&gt;   }else if( sdfDay.format(sdf.parse(this.semanaSelected)).equalsIgnoreCase("mié") ){&lt;br /&gt;    diaSemana = 3;&lt;br /&gt;   }else if( sdfDay.format(sdf.parse(this.semanaSelected)).equalsIgnoreCase("jue") ){&lt;br /&gt;    diaSemana = 4;&lt;br /&gt;   }else if( sdfDay.format(sdf.parse(this.semanaSelected)).equalsIgnoreCase("vie") ){&lt;br /&gt;    diaSemana = 5;&lt;br /&gt;   }else if( sdfDay.format(sdf.parse(this.semanaSelected)).equalsIgnoreCase("sáb") ){&lt;br /&gt;    diaSemana = 6;&lt;br /&gt;   }else if( sdfDay.format(sdf.parse(this.semanaSelected)).equalsIgnoreCase("dom") ){&lt;br /&gt;    diaSemana = 7;&lt;br /&gt;   }&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5756575318353700712-2289825439297379230?l=impendingfailure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://impendingfailure.blogspot.com/feeds/2289825439297379230/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5756575318353700712&amp;postID=2289825439297379230' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5756575318353700712/posts/default/2289825439297379230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5756575318353700712/posts/default/2289825439297379230'/><link rel='alternate' type='text/html' href='http://impendingfailure.blogspot.com/2009/07/animalitos-programando.html' title='Animalitos programando'/><author><name>Rafael Martinez - Slayer SA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5756575318353700712.post-5221736434435613665</id><published>2009-01-07T16:09:00.003-06:00</published><updated>2009-01-07T16:12:04.401-06:00</updated><title type='text'>¿Egresados?</title><content type='html'>Fraaack....&lt;br /&gt;&lt;br /&gt;Estuve evaluando unos exámenes de algunos recien egresados de la universidad para entrar a un programa de beca a esta HH empresa y...&lt;br /&gt;&lt;br /&gt;No doy credito al pésimo nivel que traen en promedio, el exámen es típico de una clase de programación de primer semestre o de ultimo de preparatoria... y sin embargo no responden las preguntas... o las responden de la manera mas absurda posible... o las responden correctamente pero de la manera mas complicada posible.&lt;br /&gt;&lt;br /&gt;Definitivamente horrible...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5756575318353700712-5221736434435613665?l=impendingfailure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://impendingfailure.blogspot.com/feeds/5221736434435613665/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5756575318353700712&amp;postID=5221736434435613665' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5756575318353700712/posts/default/5221736434435613665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5756575318353700712/posts/default/5221736434435613665'/><link rel='alternate' type='text/html' href='http://impendingfailure.blogspot.com/2009/01/egresados.html' title='¿Egresados?'/><author><name>Rafael Martinez - Slayer SA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5756575318353700712.post-69189157086606856</id><published>2007-06-11T16:39:00.001-05:00</published><updated>2007-06-11T18:19:06.042-05:00</updated><title type='text'>Parámetros y mas parámetros</title><content type='html'>&lt;span style="font-weight:bold;"&gt;NOTA&lt;/span&gt;: Este post es con el objetivo de aclarar algunas ideas y no pretende ser la &amp;#250;ltima palabra al respecto; b&amp;#225;sicamente es una especie de block de notas de lo que se me va ocurriendo paso a paso.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#191;Cuantas veces nos hemos encontrado con una operaci&amp;#243;n que requiere mas de 5 par&amp;#225;metros? y &amp;#191;Cuantas veces nos hemos visto en la necesidad de modificar la cantidad de ellos o el tipo de dato de alguno en espec&amp;#237;fico? Esto en teor&amp;#237;a se soluciona encapsulando los par&amp;#225;metros dentro de un &amp;#250;nico contenedor o utilizando un Data Transfer Object (DTO) o un Value Object (VO). Sin embargo esto tambi&amp;#233;n acarrea otros problemas ocultos ya que generalmente estos se vuelven el punto de falla al intentar reutilizar un mismo DTO/VO en diferentes puntos aun y cuando estos no tengan sentido con respecto al modelo de dominio.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Las dos soluciones tienen sus promotores y detractores, sin embargo se tiene que tomar decisiones que permitan identificar sobre que trata el c&amp;#243;digo sin necesidad de referirse a documentaci&amp;#243;n externa o una inspecci&amp;#243;n mas a fondo de los componentes implicados.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;En general si se requiere acarrear gran cantidad de informaci&amp;#243;n de un lado a otro es posible que se est&amp;#233;n asignando responsabilidades a los componentes de manera inadecuada. Esto no quiere decir que en todos los casos esto sea incorrecto, sino que se trata de un mal olor de c&amp;#243;digo (Code Smell) que podr&amp;#237;a mejorar y hacerse mas legible siguiendo la siguiente premisa.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;.Quien tiene la informaci&amp;#243;n es quien debe realizar la operaci&amp;#243;n&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Esto es muy complicado de entender en un principio pero si se analiza con calma tiene mucho mas sentido que estar acarreando valores por todo el espectro del c&amp;#243;digo.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Es decir que en lugar de hacer lo siguiente.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt; a.doSomething( b, c, d, false, 0, null);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Deber&amp;#237;a ser algo mas simple como:&lt;/p&gt;&lt;br /&gt;&lt;pre&gt; a.doSomething( );&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Siempre y cuando &amp;quot;a&amp;quot; tenga toda la informaci&amp;#243;n necesaria para realizar la operaci&amp;#243;n &amp;quot;doSomething()&amp;quot;; Sin embargo esto es solo la mitad del problema ya que ahora tenemos que hacer que a tenga la informaci&amp;#243;n necesaria para realizar la operaci&amp;#243;n.&lt;p&gt;Hum... creo que hace falta masticar esto mas tiempo.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5756575318353700712-69189157086606856?l=impendingfailure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://impendingfailure.blogspot.com/feeds/69189157086606856/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5756575318353700712&amp;postID=69189157086606856' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5756575318353700712/posts/default/69189157086606856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5756575318353700712/posts/default/69189157086606856'/><link rel='alternate' type='text/html' href='http://impendingfailure.blogspot.com/2007/06/parmetros-y-mas-parmetros.html' title='Parámetros y mas parámetros'/><author><name>Rafael Martinez - Slayer SA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5756575318353700712.post-1248158285444844614</id><published>2007-06-11T00:00:00.000-05:00</published><updated>2007-06-11T00:04:47.521-05:00</updated><title type='text'>Y el objetivo es...</title><content type='html'>Bueno el objetivo de este blog es ser un repositorio de lo que he tenido que reparar / reaprender / amartillar / fumigar / mentar-madres-durante-mucho-tiempo después de varios fracasos. Pretendo que sea algo ágil y sin rodeos... pero todos sabemos que eso no va a suceder así que solo va a ser un almacén de las cosas que me aturden y me quitan horas productivas de sueño u otras actividades igualmente recreativas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5756575318353700712-1248158285444844614?l=impendingfailure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://impendingfailure.blogspot.com/feeds/1248158285444844614/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5756575318353700712&amp;postID=1248158285444844614' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5756575318353700712/posts/default/1248158285444844614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5756575318353700712/posts/default/1248158285444844614'/><link rel='alternate' type='text/html' href='http://impendingfailure.blogspot.com/2007/06/y-el-objetivo-es.html' title='Y el objetivo es...'/><author><name>Rafael Martinez - Slayer SA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5756575318353700712.post-7390544597969162003</id><published>2007-04-10T23:30:00.000-05:00</published><updated>2007-06-10T23:36:52.302-05:00</updated><title type='text'>Entrevistas de personal. P2 Habilidades</title><content type='html'>Despues de varias entrevistas mas, sigo siendo un pésimo entrevistador, así que es hora de apuntar que es lo que no me ha servido.&lt;br /&gt;&lt;br /&gt;Generalmente es bueno contar con un listado de las habilidades que se requieren y otra con las habilidades del candidato. En las entrevistas que llevo hechas generalmente voy haciendo preguntas en el orden en que se me van ocurriendo y obviamente esto no tiene un buen efecto ni me ayuda a determinar quien es apto para el puesto.&lt;br /&gt;&lt;br /&gt;Lo primero que se me viene a la mente es ordenar las preguntas o hacer un "checklist" en orden ascendente según dificultad. Esto es para ir descartando de manera mas fácil a aquellos que no cumplen los requisitos mínimos. Este checklist se debe hacer preguntando al candidato su nivel en dicha habilidad o tecnología; después validando con algunas preguntas en orden ascendente, finalizando en el nivel mas alto que haya demostrado el candidato con alguna pregunta abierta de experiencia de campo como sería la solución a un cierto problema o propuesta de alternativas.&lt;br /&gt;&lt;br /&gt;Hay habilidades que son fácil de detectar con este tipo de entrevista, pero hay otras que es necesario atacarlas de una forma diferente; por ejemplo el desarrollo de algún diagrama o la elaboración de un artefacto. Sin embargo nunca se va a tener certeza de que el candidato cumpla los requisitos y se debe tener el criterio para evaluar su capacidad de aprendizaje o la velocidad de adaptación al cambio.&lt;br /&gt;&lt;br /&gt;Creo que estos son los puntos fundamentales para decidir si se contrata una persona o no:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Capacidad de aprendizaje&lt;/li&gt;&lt;li&gt;Capacidad de adaptación&lt;/li&gt;&lt;li&gt;Facilidad de comunicación&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Um... realmente falta mucho camino por andar...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5756575318353700712-7390544597969162003?l=impendingfailure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://impendingfailure.blogspot.com/feeds/7390544597969162003/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5756575318353700712&amp;postID=7390544597969162003' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5756575318353700712/posts/default/7390544597969162003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5756575318353700712/posts/default/7390544597969162003'/><link rel='alternate' type='text/html' href='http://impendingfailure.blogspot.com/2007/06/entrevistas-de-personal-p2-habilidades.html' title='Entrevistas de personal. P2 Habilidades'/><author><name>Rafael Martinez - Slayer SA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5756575318353700712.post-3114469451231551814</id><published>2007-04-01T18:54:00.000-05:00</published><updated>2007-06-10T23:30:54.677-05:00</updated><title type='text'>Entrevistas de personal. P1 Perfiles</title><content type='html'>&lt;p&gt;Después de algunos severos golpes contra la pared y alguno que otro fiasco al hacer entrevistas, creo que seria bueno que publicara en algún lado lo que a prueba y error hemos aprendido.&lt;/p&gt; &lt;p&gt;Lo primero que se debe contemplar en la entrevista es el objetivo de esta, en otras palabras que es lo que se desea saber del entrevistado (víctima). Se debe tomar en cuenta las necesidades que se tiene en el o los proyectos actuales y el perfil o rol que se quiere llenar ya que estos son los puntos en los que se debe ser mas agresivo al hacer la entrevista. Sin embargo también se debe contemplar las habilidades que la víctima está tratando de vender. Un candidato deseable es aquel que cumple las expectativas deseadas y que su abanico de habilidades incluya características que si bien no forman parte del perfil buscado, pueden ayudar al candidato y al equipo en algún momento dado. Esto principalmente por la naturaleza volátil de los proyectos actuales (no me ha tocado ver algún proyecto que no sea así), en los cuales un determinado conjunto de habilidades puede ser sobrepasado por alguna contingencia o nuevo requerimiento; en estos casos las habilidades extra del candidato pueden ser una gran herramienta.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Ahora la entrevista debe llevarse a cabo siguiendo tanto las necesidades del proyecto como el inventario de habilidades que proporciona el candidato ya sea en su currículum o en algún formato estandarizado.&lt;/p&gt; &lt;p&gt;Dentro de las necesidades del proyecto se debe identificar que perfil se busca o que rol se desea que juegue el candidato. Entendiendo como perfil un conjunto de habilidades determinadas y como rol un grupo de funciones a desempeñar de tal suerte que se pueda identificar riesgos en caso de que no se cumpla por completo el perfil o que se le pueda asignar mas de un rol al candidato.&lt;/p&gt; &lt;p&gt;Para una empresa de desarrollo de Software generalmente existen estos perfiles:&lt;/p&gt; &lt;br /&gt;&lt;dl&gt; &lt;br /&gt;&lt;dt&gt;Trainee, Intern, Becario / Newbie&lt;/dt&gt; &lt;dd&gt;Generalmente recien egresados o en últimos semestres de carrera, también puede ser gente con muy poca experiencia en el área&lt;/dd&gt; &lt;br /&gt;&lt;dt&gt;JR Programmer, SR Programmer / Grunt&lt;/dt&gt; &lt;dd&gt;Fuerza de trabajo básica, se espera que conozcan lo mínimo indispensable de la tecnología y lo suficiente del negocio como para cumplir sus tareas. En nivel JR se les debe vigilar de manera constante para orientar esfuerzos mientras que en SR se espera mas proactividad y conocimiento amplio de la tecnología&lt;/dd&gt; &lt;br /&gt;&lt;dt&gt;Lead Programmer / Squad leader&lt;/dt&gt; &lt;dd&gt;Generalmente no se encuentra mas que en proyectos grandes, se espera que realice algunas tareas administrativas y de evaluación de riesgos&lt;/dd&gt; &lt;br /&gt;&lt;dt&gt;Tester / Bomb Finder&lt;/dt&gt;&lt;dd&gt;Debe ser metódico y muy ordenado para seguir un script de pruebas y poder detectar omisiones en el mismo. Tambien debe tener suficiente habilidad técnica para recuperar evidencia de la fallas y de las correcciones a las mismas&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;JR Analyst, SR Analyst / Recognition Spec.&lt;/dt&gt; &lt;dd&gt;Debe tener fuertes habilidades de comunicación y debe darse a entender de manera sencilla. Su principal función es traducir los requerimientos de lenguaje de negocio/dominio hacia la lingua franca establecida. Debe ser de mente ágil para poder detectar casos no mencionados por el cliente pero plausibles. Se espera que tenga experiencia en estandares de documentación.&lt;/dd&gt; &lt;br /&gt;&lt;dt&gt;JR Designer, SR Designer / Tactic Design Spec.&lt;/dt&gt; &lt;dd&gt;Debe tener un conocimiento fuerte de la tecnología disponible y una capacidad de abstracción elevada así como también conocimiento de patrones de diseño y estandares de documentación.&lt;/dd&gt; &lt;br /&gt;&lt;dt&gt;Systems Engineer / Firefighter, Plumber, Rescue Squad leader&lt;/dt&gt; &lt;dd&gt;Es el encargado mantener los sistemas operando pese a todo por lo que debe tener habilidades que le permitan detectar el origen de lo defectos y sus posibles correcciones de manera rápida sin dañar la arquitectura del sistema. Debe tener conocimientos amplios sobre la tecnología utilizada y de las áreas de negocio involucrados, también son deseables conocimientos de administración de riesgos. Debe ser capaz de hacer refactorizaciones (refactor) a la báse de codigo sin afectar de manera negativa al sistema.&lt;/dd&gt; &lt;br /&gt;&lt;dt&gt;Systems Architect / Strategic Design Spec.&lt;/dt&gt; &lt;dd&gt;Define la estructura de alto nivel de un sistema, los patrones y herramientas a utilizar. Debe tener un conocimiento muy amplio sobre la tecnología disponible así como también de el entorno de los sistemas en los que se opera el sistema. Este perfil también requiere conocimientos amplios de estandares de documentación pero además requiere conocimientos de métricas de código y auditoria.&lt;/dd&gt; &lt;br /&gt;&lt;dt&gt;Project Leader, Project manager? / Tactic planner, Strategic planner, Manure router&lt;/dt&gt; &lt;dd&gt;Es el principal responsable de un proyecto y posiblemente el encargado de realizar la planeación del mismo. También es el indicado para detectar cualquier problema o desviación y dictar acciones correctivas. Esta detección también puede provenir desde un auditor o algún otro colaborador pero finalmente es el lider de proyecto el que decide como y en que momento se ataca dicha desviación.&lt;/dd&gt; &lt;/dl&gt;&lt;br /&gt;Continuara...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5756575318353700712-3114469451231551814?l=impendingfailure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://impendingfailure.blogspot.com/feeds/3114469451231551814/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5756575318353700712&amp;postID=3114469451231551814' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5756575318353700712/posts/default/3114469451231551814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5756575318353700712/posts/default/3114469451231551814'/><link rel='alternate' type='text/html' href='http://impendingfailure.blogspot.com/2007/06/entrevistas-de-personal-p1-perfiles.html' title='Entrevistas de personal. P1 Perfiles'/><author><name>Rafael Martinez - Slayer SA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
