Arquivo

Archive for the ‘Tecnologia’ Category

Great definitions – Callback Function

junho 21, 2010 Deixe um comentário

“A callback is a function that is passed as an argument to another function and is executed after its parent function has completed. The special thing about a callback is that functions that appear after the “parent” can execute before the callback executes.”

Source: http://docs.jquery.com/How_jQuery_Works

Você sabe o que é Ciência da Computação?

junho 7, 2010 Deixe um comentário

EC: Engenharia da Computação

CC: Ciência da Computação

Sou um dos chateados por entrar em uma faculdade de Ciência da Computação (sabendo o que ia encontrar) e perceber que a maioria esmagadora dos alunos não faziam idéia sobre o que se tratava o curso. Vou exemplificar com uma fala de um ex-aluno da minha turma. Um belo dia ele chegou pra mim e disse: “Tiago, eu achei que na faculdade iríamos aprender Photoshop, CorelDraw, AutoCAD…”. Não me entendam mal, eu acho legal saber mexer nesses programas. Agora, uma pessoa entrar em um curso de CC/EC achando que vai estudar isso é demais. É como se uma pessoa entrasse em um curso de engenharia aeronáutica achando que vai se tornar piloto e não engenheiro(a). São aqueles que pegam a lista de cursos, vêem “Computação” no nome e pensam: “Opa! Eu gosto de mexer em computadores. Achei meu curso!”. Não perdem 1 minuto sequer para procurar mais informações sobre o mesmo na Internet. Tenho certeza de que todos os usuários de computadores são capazes de achar, por exemplo, esta excelente definição da Wikipédia sobre o que é Ciência da Computação.

Outra coisa revoltante é quando entra a parte matemática e as demonstrações nas aulas. É só um professor querer demonstrar algum resultado para algum aluno começar: “Ah, nem precisa provar ‘fessor’. Já sabemos que funciona!”, “Provar é coisa pro curso de Matemática. Só precisamos saber usar.”, dentre outras pérolas. E o pior é que, na maioria dos casos, os professores atendem aos pedidos desses alunos. Isso é o que mais revolta. A maioria dos estudantes não querem entender como as coisas funcionam, basta que funcionem. Querem apenas decorar comandos no Linux, para depois mostrar sua “habilidade” no terminal em frente aos amigos. É por causa de pensamentos assim que o Brasil não possui tecnologia para, por exemplo, fazer circuitos integrados.

Hoje eu me orgulho de conseguir provar a corretude de um algoritmo de PD por indução, de conseguir programar sem gambiarras, de projetar um banco de dados seguindo os padrões das formas normais, de fazer sistemas decentes seguindo bem os princípios da orientação à objetos… Coisas que a maioria desses alunos que se acham os grandes espertos, querendo apenas que as coisas “funssionem”, estão a anos luz de conseguirem. Isso é realmente triste. Eu gostaria de ver mais pessoas fazendo projetos decentes de sistemas, gostaria de ver os alunos preocupados com uma prova matemática do porquê um algoritmo funciona, gostaria que eles não menosprezassem os padrões de desenvolvimentos de sistemas, etc.

Mas o pior mesmo é a população que não entende o que é um curso de Ciência da Computação/Engenharia de Computação. São aqueles que, sempre que ocorre algum problema em seus computadores, chamam você e falam: “Hey, você estudou Ciência da Computação, né? Então deve saber o que está acontecendo aqui no meu Windows…”. Acreditam que você é um técnico de informática. E se você não consegue resolver o problema em 15 segundos, tendo que procurar um pouco sobre o erro na Internet, eles já olham para você com um ar de desprezo.

Acho isso engraçado. As pessoas aceitam que um médico, somente olhando para a sua cara, não conseguirá te diagnosticar. É preciso realizar alguns exames com base nos sintomas apresentados pelo paciente. E, caso não se descubra o problema, novos exames são necessários. Toda a sociedade aceita isso. Porém, um profissional de computação, na visão de algumas pessoas, precisa ter alguma espécie de poder metafísico. É preciso olhar para o monitor e saber imediatamente o que está acontecendo, caso contrário (na visão deles) você não é um bom profissional.

“Ciência da computação tem tanto a ver com computadores como a Astronomia com o telescópio, a Biologia com o microscópio, ou a Química com os tubos de ensaio. A Ciência não estuda ferramentas, mas o que fazemos e o que descobrimos com elas.” – Edsger W. Dijkstra

Categorias:Tecnologia

A new use for the “for” loop

maio 19, 2010 Deixe um comentário

“public static void main(String args[])” is not alone!

janeiro 16, 2010 Deixe um comentário

For those who are starting to learn the Java programming language, it is very common to see people say things like “Your main function must always look like this:”


“Otherwise, it won’t compile!”

If you buy this statement you will fall for it when you go take the SCJP certification. There are many other ways in which the main method can be declared. Here are some of them:

To simplify, you can follow these rules:

  • The only access modifier allowed is public and it must be present.
  • The static keyword must always be present as well.
  • The args argument does not need to be called args. It can have any name you want (as long as that name follow the rules of a valid Java identifier, of course)
  • Once you put the method’s return type, you need to put the name of the function right on way. This is valid in any method declaration, not only main.
  • The main method must always return void. It can’t return anything else. This is specially trick for C/C++ programmers, once in those 2 languages you could write something like int main().

That’s it folks! If you have any questions or improvements to suggest, feel free to put them on the comments!!

PS: If you saw any mistake in my English, please, send me an email or a comment telling me. I’m Brazilian, therefore I’m not an English native speaker. I would really appreciate being corrected! Thank you in advance!

W3Schools

janeiro 3, 2010 1 comentário

If you are a web programmer (or a web designer) and you don’t know the website W3Schools, you have no idea what you’re missing! As the own website states:

Because time is valuable, we deliver quick and easy learning.

At W3Schools, you can study everything you need to learn, in an accessible and handy format.

The main technologies (when it comes to web programming and web designer) are covered. Among them, are: HTML, XHTML, CSS, JavaScript, JQuery, XML, ASP, PHP, SQL and AJAX. (unfortunately it doesn’t have anything about Servlets, JSP and JSF…)

What makes W3Schools so good is that it actually teaches you just what you need to know and, at the same time, with a great depth. You have to see it for yourself. Few tutorials around the Internet have the same quality as the ones in the W3Schools.

Another interesting feature present in W3Schools is an on-line editor. You can modify all the given examples and see the changes right on way, without using anything else. Very convenient 😉

In short, when talking about web programming and web designer, W3Schools is one of the best (if not the best) website of tutorials available on the Internet. Give it a try!

PS: If you detected any mistake in my English, please, send me a comment or an email telling me. I’m Brazilian, therefore I’m not an English native speaker. I would really appreciate being corrected. Thank you in advance!

Protecting your HTML forms from SQL Injections

outubro 18, 2009 Deixe um comentário

sql_injectionSQL Injection is one of the most common attacks your website can receive. Yet, there are a lot of programmers that do not give special attention to it. In this post, you will understand how SQL Injections are make (with examples) and how you can protect your applications from it.

SQL (Structured Query Language) is the most common language used to retrieve and put information into relational databases. The most famous databases all use it, like MySQL, Oracle, PostgreSQL… Also, SQL is really easy to learn. With that in mind, isn’t absurd to assume that a huge percentage of the web applications around the Internet use SQL.

Let’s start the examples with a simple login page. It will be use to exemplify all next examples:

form

And here is the database (I’m using MySQL, but you can use any DBMS you like):

sql_databases

From now on, on the server side, I’ll be using JSP and Servlets to handle the login stuff, but you could also use any other server-side language (like PHP and ASP). Here is the Java class that will handle the authentication:

java_total

Now, we can make the login into the system by using the user “User_here” and the password “password123”.

The server side authentication expects something like this:

SELECT sqlinjection.id FROM sqlinjection WHERE BINARY sqlinjection.user = ‘X’ AND sqlinjection.password = ‘Y’

Where X is the value you put into the field “User” and Y is the value you put into the field “Password”. So, when you type the correct username and the correct password, the expression above turns out into this:

SELECT sqlinjection.id FROM sqlinjection WHERE BINARY sqlinjection.user = ‘User_here’ AND sqlinjection.password = ‘password123’

But, what if the person (the attacker) just know your username and have no idea what your password is? They could use SQL Injection to make the login without knowing the password. On the user field, the attacker would type User_here and, on the password field, they could type something like: a’ or ‘1’=’1. So, your SQL would turn out into:

SELECT sqlinjection.id FROM sqlinjection WHERE BINARY sqlinjection.user = ‘User_here’ AND sqlinjection.password = ” or ‘1’=’1′

Which is the same as:

SELECT sqlinjection.id FROM sqlinjection WHERE BINARY sqlinjection.user = ‘User_here’ AND (sqlinjection.password = ‘a’ or ‘1’=’1′)

That means if the password is ‘a’ OR ‘1’ = ‘1’ than the right part of the AND will be true. Once 1 is always equals to 1, than (sqlinjection.password = ” or ‘1’=’1′) will always be true. Bingo! The attacker has successfully entered into your system just by knowing your username.

But it could be worse. The attacker could even delete your table. They could type something like this into the password field: a’; DROP TABLE sqlinjection —

So, the SQL would turn out into: SELECT sqlinjection.id FROM sqlinjection WHERE BINARY sqlinjection.user = ‘User_here’ AND sqlinjection.password = ‘a’; DROP TABLE sqlinjection — ‘

SQL Injection Webcomic

Following this idea, the attacker could also delete an entire database. They could type something like this into the password field: a’; DROP DATABASE injection

Now, I know what you’re thinking: “How does the attacker would know the name of my tables and my databases?”. That’s simple: they can find that out by making a statement syntactically incorrect. For example: if you type anything’ into the password field, that will turn out on the following SQL:

SELECT sqlinjection.id FROM sqlinjection WHERE BINARY sqlinjection.user = ‘X’ AND sqlinjection.password = ‘anything’

That SQL is syntactically incorrect (because of the double ) and, as a result, an error will be thrown. If that error is not appropriately catch, then it will be showed on the screen. That is more than enough to find the tables (and the databases) names.

The video below shows a SQL Injection attack been made:

So, how to protect your applications from SQL Injection attacks?

That’s the most simple part. You can deny all kind of strings with contains , and ;. Also, you can limit the size of the data been received. The most important thing is: make sure that all of those verifications are made on the server-side (otherwise the attacker could pass through it easily by editing your page’s source code or even by making a HTTP request from scratch).

That’s it! If you have any question, feel free to ask.

PS: If you detected some mistake in any part of my post or in my English, please, send me an email or a comment correcting me! I’m Brazilian, so I’m not an English native speaker. I would really appreciate being corrected! Thank you in advance! :)

Barack Obama and the “Bubble Sort” algorithm

junho 26, 2009 Deixe um comentário

Recently I watched a video where the current president of the U.S.A. dodged very well from a question about sorting.

He was ask: “What’s the most efficient way to sort a million 32-bit integers ?”

And Obama replies: “I think the Bubble sort would be the wrong way to go.”

Of course, it’s not the answer to the question but it is still a nice shot!