Arquivos

Arquivo para a categoria ‘Programação’

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

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! :)

Great Definitions – Script

junho 24, 2009 Deixe um comentário

Acho que toda pessoa que mexe bastante com a Internet, seja ela programadora ou não, já ouviu falar da palavra “Script”.

Porém, essa é uma daquelas palavras que um programador/webdesigner entende por natureza, mas que, quando vai explicar para uma outra pessoa, não consegue.

Passando pelo site da W3Schools (www.w3schools.com), encontrei esta definição para JavaScript que achei fenomenal. Acompanhe:

  • JavaScript is a scripting language
  • A scripting language is a lightweight programming language

Com isso, podemos definir “Script” como sendo “uma parte de um código escrito em uma linguagem de scripting”, onde uma “linguagem de scripting” é uma linguagem de programação mais leve (com menos recursos do que uma linguagem normal) e geralmente interpretada ao invés de compilada.

Simples, direta e elegante, como uma boa definição deve ser!

Cuidado com o operador “%” !!!

maio 20, 2009 Deixe um comentário

Todo programador, em algum momento, teve que verificar se um determinado número inteiro ‘n’ era par ou ímpar.

Podemos fazer isso facilmente através das seguintes funções (abaixo uma versão escrita em C++):

eImpar

Ótimo. Vamos testar agora as duas funções para os seguintes valores: 0, 1, 2, -2 e -1.

ePar(0) = true eImpar(0) = false
ePar(1) = false eImpar(1) = true
ePar(2) = true eImpar(2) = false
ePar(-2) = true eImpar(-2) = false
ePar(-1) = false eImpar(-1) = false !!!!!!!

A explicação é que o operador % retorna o mesmo sinal do primeiro operando. Assim:

-1 % 2 == -1 != 1

Fica a lição: da próxima vez que precisar verificar a paridade de um número, use somente a função “ePar()”. 100% garantido! :P


PS 1: Testei essa dica nas linguagens C, C++ e Java. Em todas, o operador % se comporta como a tabela acima. Acredito que isso seja verdade para praticamente todas as linguagens, apesar de não ter confirmado.

PS 2: Essa dica foi retirada da excelente apresentação “10 coisas que eu odeio em Java”, do professor Rafael Santos. Vale a pena fazer uma visita ao seu site: http://www.lac.inpe.br/~rafael.santos/ Tem muito material interessante lá.

CategoriasProgramação

Palavras mal traduzidas para o português 1: Vetor

maio 11, 2009 2 comentários

Hoje estou estreando a série “Palavras mal traduzidas para o português”. Enquanto se estuda computação (ou qualquer outra matéria, não necessariamente de tecnologia) acabamos percebendo como uma palavra, mal portada de uma língua para outra, pode atrapalhar o entendimento. Eu sempre encontro alguma, no que quer que eu esteja estudando.

A primeira delas é: Vetor (no contexto de programação)

EA Billboard

EA Billboard

Do inglês, “array” significa “coleção”, “conjunto de coisas”. Não tem nada a ver com os vetores da Matemática e da Física. Que jogue a primeira pedra quem nunca pensou num vetor da Matemática na primeira vez que ouviu isso nas primeiras aulas de programação. Essa é uma das coisas que fazem a pessoa demorar para entender o que realmente é um vetor em programação. Acredito que o uso da palavra “coleção” (ou mesmo “conjunto”), seria muito mais adequado e o entendimento do conceito seria muito mais rápido, senão imediato.

Então, já sabe. Da próxima vez que ouvir “coloque esses valores em um vetor”, pense “coloque esses valores numa coleção”. Parece que não, mas, quando você estuda algoritmos mais complicados por exemplo, esses detalhes facilitam (e muito) o entendimento.

Análise: Redes de Computadores e a Internet: Uma abordagem top-down

maio 10, 2009 3 comentários

Começo hoje minha análise de livros. Vou comentar apenas daqueles que li boa parte do mesmo (entenda-se, mais da metade). Começando pelo magnífico “Redes de Computadores e a Internet. Uma abordagem top-down” dos autores James F. Kurose e Keith W. Ross. Este é, sem sombra de dúvidas, o melhor livro que li em todo o meu curso de graduação. Antes de começar a análise, por favor, respeite Keith W. Ross e não chame o livro de “Kurose” =P Fica a impressão de que somente o James F. Kurose escreveu esse livro… Brincadeiras à parte, vamos ao que interessa.

Esse é um daqueles livros que o tira da ignorância  de um assunto e faz você se tornar um verdadeiro mestre no mesmo. Sem exagero. Tudo o que você precisa para entender perfeitamente como funcionam a Internet está aqui. Eu disse “a Internet” (entenda pilha de protocolos TCP/IP) pois o livro é claramente focado na mesma. É claro que cerca de 70% do conteúdo do livro, se aplica à outras redes também, pois os conceitos são os mesmos.

Nota: Em toda a análise, eu utilizo a palabra “entender” várias vezes. É importante notar o sentido literal da palavra. Neste livro você REALMENTE ENTENDE como as coisas funcionam. Você não é enganado, como em alguns livros existentes por aí…

No capítulo 1, o livro faz uma breve introdução sobre o que exatamente é a Internet (com ‘I’ maiúsculo) e quais são seus componentes básicos. Os autores também definem algumas terminologias usadas durante todo o restante do livro. Nada de mais neste capítulo.

É a partir do Capítulo 2 que o livro mostra a que veio. O livro, como o nome indica, começa da camada mais próxima do usuário, a camada de aplicação, e vai descendo, capítulo por capítulo, até as camadas inferiores (os autores optaram por usar o TCP/IP puro, e não o OSI, por aquele ser o mais usado). É aí que entra o que, para mim, é o maior diferencial do livro. Em cada camada, o livro mostra serviços REAIS providos pela mesma, explicando detalhadamente como eles funcionam. É claro que eles não explicam tão detalhadamente como um RFC ou coisa parecida, mas para quem não sabe nada sobre como aquele serviço realmente funciona por trás dos panos (o que provavelmente é o caso na primeira vez que você vai ler o livro) é realmente uma alegria entender tão bem o que eles fazem e como eles interagem entre si já na primeira leitura.

Um ponto alto do livro é a explicação de cada campo dos principais cabeçalhos. Praticamente todo livro de redes possui isso, mas aqui é diferente. Sabe quando você está lendo, vai surgindo uma dúvida e, para esclarecê-la, é necessário revirar outro capítulo? Isso não se aplica aqui. Acredite, a maioria dessas dúvidas são esclarecidas já no parágrafo posterior, dando a impressão que os autores estão lendo a sua mente e escrevendo o resto do livro na hora, só pra você. É realmente incrível. Só lendo mesmo para acreditar.

Após terminar a camada física, o livro faz uma introdução às “Redes Móveis”, mostrando alguns detalhes de como alguns famosos protocolos desta categoria funcionam. Este pra mim é o capítulo mais fraco do livro, pois os autores resolveram não aprofundar muito nesse assunto. Ainda sim, tem mais conteúdo do que a maioria dos outros livros de redes.

O próxímo capítulo é sobre redes multimídias. Nele, se encontra um dos projetos de programação mais interessantes do livro. Um cliente e servidor RTSP (Real Time Streaming Protocol). Você verá que um assunto aparentemente complicado (transporte de vídeo streaming) é muito mais fácil do que parece. Essa é outra característica do livro. Os autores mostram que assuntos aparentemente cabeludos, são realmente muito mais simples do que parecem, dando confiança ao leitor e mostrando que ele realmente é capaz de fazer aquilo funcionar.

O próximo capítulo aborda a segurança das redes, mostrando os principais ataques e como se prevenir deles. O interessante é que toda a explicação é feita à nível dos protocolos vistos durante todo o livro, fazendo que você realmente entenda o problema em baixo nível. Nesta capítulo também há uma excelente introdução sobre sistemas criptográficos (chave simétrica, chave pública e privada…). Nesta parte, talvez um pouco mais de matemática ajudasse, mas ainda sim você consegue entender mais de 90% da coisa só com o que eles fornecem.

Geralmente, as traduções de livros do inglês (especialmente livros de informática e computação) ficam realmente horríveis, como “Computer Networks” (de Tanenbaum), “Introduction to Algorithms” (do Cormen), os livros da série Head First… só para citar alguns. Mas este é uma exceção à regra. E que exceção! Não sei quem foram os responsáveis pela tradução (não encontrei essa informação) mas meus mais sinceros PARABÉNS. Fizeram um trabalho impecável, por falta de uma palavra melhor. Claramente, os responsáveis pela tradução entendiam profundamente do assunto.

Com uma didática fabulosa, um aprofundamento absurdo (para um livro de introdução), Redes de Computadores e a Internet é obrigatório. Seja qual for o seu curso, (Ciência da Computação, Engenharia de Computação, Engenharia Elétrica, Engenharia X, Análise de Sistemas, Biologia, Letras…) se você não tiver esse livro, não tem a mínima idéia do quanto está perdendo.

PS: Acredite, não recebi um único centavo para fazer propaganda desse livro. É que ele é tão bom, que me sinto na obrigação de divulgá-lo. Se você ainda está em dúvida em adquirí-lo após ler este post, vá até uma livraria e leia-o por 20 minutos. Garanto que, seja qual for a página que você pegue, você vai entender o porquê dos meus elogios.

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.