Mostrando entradas con la etiqueta Software. Mostrar todas las entradas
Mostrando entradas con la etiqueta Software. Mostrar todas las entradas

jueves, 10 de julio de 2014

Make a quick Ruby app


THE FIRST APPLICATION ON RUBY
I'm starting to develop on Ruby, so the best way to undertand something is try to explain 

The Application: A Text Analyzer

Requirements, Basic features:

Character count
Characters count (excluding spaces)
Line count
Word count
Sentence count
Paragraph count
Average number of words per sentence
Average number of sentence per paragraph


Building the basic application:

When starting to develop a new program it’s useful to think of the key steps  involved.

In the  past it was common to draw flow charts to show how the operation of a computer program would flow, but it's easy to experiment, change things about, and remain agile with modern tools such as Ruby. Let's outline the basic steps as follows:

1.-Load in a file containing the text or document you want to analyze
2.-As you load the file line by line, keep a count of how many lines were (one of your static taken care of)
3.-Put the text into a string and take the measure the length to get your character count.
4.- Temporarily remove all whitespace and measure the length of the resulting string to get the characters count excluding the whitespace
5.-Split out the whitespace to find how many words there
Are
6.-Split on full stops to find out how many sentence there are
7.-Split on double newlines to find out how many paragraphs there are
8.-Perform calculations to work the avarenges


Step 1
Obtaining some Dummy text
We can find the text at http://rubyinside.com/book/oliver.txt

Step 2
Load the text files and counting lines

################################

#analyzer.rb first approximation

#Starts in zero
Count = 0
#load the file line by line
File.open("oliver.txt").each { |line| line_count += 1 } 
#Prints the count of the lines
Puts line_count

################################

Then we look for a way to read the text, so we have to alternatives

File.open vs File.readlines, in the first aprox. I'm going to use File.open and read all the lines, at the end of the tuturial I'm going to change to File.readlines, readlines method has already the functions to count the lines

################################

#analyzer.rb second approximation
#Adding a variable to collect the lines together as one as we go


Text = ' '
Count = 0
File.open("oliver.txt").each do |line|
Lines_count += 1
Text << line
End

Puts "#{line_count} lines"

################################

Remembering that using {and} to surrond blocks is the standard
style for single-line blocks, using "do" and "end" is preferred for
multiple blocks.

################################

#analyzer.rb third approximation
#Text is a string, we can use the length method that all strings
#supply to get the exact of the file, and therefore the number of
#chacrters, and then in other variable exclude the spaces

Text = ' '
Count = 0
File.open("oliver.txt").each do |line|
Lines_count += 1
Text << line
End
Total_characters = text.length
#using gsub to eradicate the spaces from your text string in the
#same way, and then use the length of the newly "de-spacfied"
#text
Total_characters_nospaces = text.gsub(/\s+/, '').lenght
Puts "#{line_count} lines"
Puts "#{total_characters_nospace] characters excluding spaces"
Puts "#{total_characters} Total characters"

################################


Counting Words
1.- count the number of groups of contiguous letters using scan
2.- Split the text on whitespace and count the resulting fragments using split and size

To get the number of words in the string, I can use the length or size array methods to count the number of elements rather than join them together:

#################################

Puts "this is a test".scan(/\w+/).length

->> 4

#################################

The split approach demostrates a core tenet of Ruby (as well as some other languages, particulary Perl): ther's more than one way to do it! Analyzing different methods to solve the same problem is a crucial part of becoming a good programmer, as different methods can vary in their efficacy.

#################################

Puts "this is a test".split.length

->> 4

#################################




################################

#analyzer.rb fourth approximation
#Counting words

Text = ' '
Count = 0
File.open("oliver.txt").each do |line|
Lines_count += 1
Text << line
End
Word_count = text.split.length
Total_characters = text.length
Total_characters_nospaces = text.gsub(/\s+/, '').lenght


Puts "#{line_count} lines"
Puts "#{total_characters_nospace] characters excluding spaces"
Puts "#{total_characters} Total characters"
Puts "#{word_count} words"

################################


COUNTING SENTENCE AND PARAGRAPHS

Rather than splitting on whitespace, sentence and paragraphs have different split criteria.
Sentences end with full stops, question marks, and exclamation marks. They can also be separated with dashes and other punctuation.

###################################

#for end regular expressions
Sentence_count = text.split(/\.|\?|\!/).length

#For double space
Puts text.split(/\n\n/).length

###################################


################################

#analyzer.rb fiveth approximation
#Counting paragraphs and sentences

Text = ' '
Count = 0
File.open("oliver.txt").each do |line|
Lines_count += 1
Text << line
End
Word_count = text.split.length
Total_characters = text.length
Total_characters_nospaces = text.gsub(/\s+/, '').lenght
Sentence_count = text.split(/\.|\?|!/).length
Paragraph_count = text.split(/\n\n/).length

Puts "#{line_count} lines"
Puts "#{total_characters_nospace] characters excluding spaces"
Puts "#{total_characters} Total characters"
Puts "#{word_count} words"
Puts "#{sentence_cunt} sentences"
Puts "#{paragraph_count}  paragraphs"

################################

Calculating avarages

################################

#analyzer.rb sixth approximation
#Counting avarages

Text = ' '
Count = 0
File.open("oliver.txt").each do |line|
Lines_count += 1
Text << line
End
Word_count = text.split.length
Total_characters = text.length
Total_characters_nospaces = text.gsub(/\s+/, '').lenght


Puts "#{line_count} lines"
Puts "#{total_characters_nospace] characters excluding spaces"
Puts "#{total_characters} Total characters"
Puts "#{word_count} words"
Puts "#{sentence_count / paragraph_count} sentences per paragrapg (avarage)"
Puts "#{word_count / sentence_count } words per sentences (avarage)"

################################

The code:

################################

#analyzer.rb 



#Open file and read it
lines = File.readlines("oliver.txt")
line_count = lines.size
text = lines.join

word_count = text.split.length
total_characters = text.length
total_characters_nospaces = text.gsub(/\s+/, '').lenght


puts "#{line_count} lines"
puts "#{total_characters_nospace] characters excluding spaces"
puts "#{total_characters} Total characters"
puts "#{word_count} words"
puts "#{sentence_count / paragraph_count} sentences per paragrapg (avarage)"
puts "#{word_count / sentence_count } words per sentences (avarage)"

################################



miércoles, 2 de julio de 2014

Brief introduction to Ruby syntax

Ruby is very much a “There’s more than than one way to do it” type go language, in the same vain as Perl but quite different in philosophy from languages such as Python



You can also execute Ruby commands directly from the command line using -e:

ruby -e “puts 2 + 2”
One Unix-related platforms it’s possible to add a “Shebang” line as the first line of Ruby scripts so that it can be exe cued without having to invoke the Ruby interpreter explicitly. For example:

########################

#!/usr/bin/ruby
puts “Hello World”

########################


Interactuve Ruby

Ruby has an interpreter called irb

We can invoque rib from the command line and the results of your code are given as son as you type it

EXPRESSIONS, LOGIC, AND FLOW CONTROL

Basic Expressions
Ruby supports expressions in a style familiar to almost any programmer:

########################

“a” + ”b” + ”c”

->> abc

########################


To change the type of the variable the is a method called .to_s / .to_i / .to_f


########################

“20”.to_i + 10

->> 30


“20” + 10.to_s

->> 2010

########################

Comparison Expressions
In some situations comparisons might return bill, Ruby’s concept of “null” or nonexistence

########################

2 == 1 

->> false

2 == 1

->> true

(2 == 2) && !(1 ==  2)

->> true

puts “The universe is broken” if 2 == 1

# On C style

if (2 == 1 )
puts “The universe is broken”
end

########################

Ruby also supports the else directive, as found in languages such as C, Pearl, and Pascal:

########################

if 2 == 1
puts “The universe is broken!”
else
puts “The universe is OK”
end

if x == 1 || x == 3 || x == 5 || x == 7 || x == 9
puts “X is odd and under 10”
elseif x == 2 || x == 4 || x == 6 || x == 8
puts “X is even and under 10
else
puts “X is over 10 or under 1”
end

########################

Note C coders will be used to else if. Ruby’s variation is based on the Perl standard of elseif.

Case sentence

########################

fruit = “Orange”
case fruit
when “orange”
color = “orange”
when “apple”
color = “red”
when “banana”
color = “yellow”
else 
color = “Unknown”
end

########################

Case is essentially, a substitution for a large, messy clump of if and elseif statement


THE TERNARY OPERATOR (CONDITIONAL EXPRESSIONS)

########################

x = 10
puts x > 10 ? “Higher than ten” : “Lower or equal to ten”

->> Lower or equal to ten

########################

The ternary operator works like so:

expressions ? true_expression : false_expression

LOOPS

########################

 i = 0
loop do
i += 1
break if i > 100
end

########################

Note: 
variable += 1 is the same of variable ++ or variable = variable + 1

########################

i = 0
while ( i < 15 )
i += 1
next if i % 2 == 0
puts i
end

########################


OBJECT ORIENTATION:

OBJECTS

The key difference between Ruby and most other major object-oriented languages  is that in Ruby everything is and object

function1(function2(function3(something)))

in Ruby the correct syntax is

something.function3.function2.function1


CLASSES AN METHODS:

Class variables begin with two @ signs and exist within the scope of a class and all its objects

########################

class Person
@@count = 0

def initialize
@@count += 1
end

def Person.count
@@count
end
end

a = Person.new
b = Person.new
c = Person.new
puts Person.count

->> 3

########################

REFLECTION:

Reflection is a process that allows a computer program to observe an modify its own structure and behavior during execution

########################

Hash.methods

########################


You can also use methods to retrieve a list of class methods, because class ore also objects in Ruby

METHOD VISIBILITY:

Methods can be 
public (callable by any scope within the program), 
private (callable only within the scope of the instance the methods exist upon)
protected (callable by any object of the same class)

########################

class MyClass
def public_method
end

private
def private_method1
end

def private_method2
end

protected
def protected_method
end
end

########################

Regular Expressions

########################

“this is a test”.sub(/[aeiou]/, ‘ * ’ )

->> th*s is a test

“This is a test”.gsub(/[aeiou]/, ‘ * ‘ )

->> Th*s *s * t*st

“THIS IS A TEST”.gsub(/[aeiou]/, ‘ * ‘ )

->> THIS IS A TEST

“THIS IS A TEST”.gsub(/[aeiou]/i, ‘ * ‘ )

->> TH*S *S * T*ST

########################


sub performs a single substitution based on a regular expression, whereas gsub performs a global substitution, you use /i option to make the regular expressions case insensitive

########################

“This is a test”.scan(/[aeiou]/)

->> [‘i’,’i’,’a’,’e’]

########################

NUMBERS:

You can produce roots easily by raising a number to the power of 1/n For example, you can fine the square root of 25 with 25 ** 0.5

When you use a number the class of default is integer, so if you need to use float numbers is precise to indicate the conversion 10.to_f or 10.0 or Float(10) 

ARRAYS:

Arrays are ordered collections of OBJECTS, because everything in Ruby is an object! Arrays can contain any combination of objects of any class

Example shows the invocation of the Array class’s push method:

########################

a = []
a.push(10)
a.push(‘test’)
a.push(30)
a << 40

->> [10, ’test’, 30, 40 ]

########################

Notice the use of a different from pushing objects to an array with the << operator on the last line of the preceding example

HASHES (ASSOCIATIVE ARRAYS):

########################

fred = {
‘name’ => ‘Fred Eliot’,
‘age’ => ’63’,
‘gender’ => ‘male’,
‘favorite painters’ => [‘Monet’, ‘Contable’, ‘Da Vinci’ ]
}

puts fred[‘age’]

->> 63

puts fred[‘favorite painters’].first

->> Monet

########################

COMPLEX STRUCTURES:

########################

people = {

‘fred’ => {
‘name’ => ‘Fred Eliot’,
‘age’ => ’63’,
‘gender’ => ‘male’,
‘favorite painters’ => [‘Monet’, ‘Contable’, ‘Da Vinci’ ]
},

‘janet’ => {
‘name’ => ‘Janet S Porter’,
‘age’ => ’55’,
‘gender’ => ‘female’,
}
}

puts people[‘fred’] [‘age’]
puts people[‘janet’][‘gender’]
puts people[‘janet’].inspect

->>
63
frmale
{‘name’ => ‘Fred Eliot’,‘age’ => ’63’,‘gender’ => ‘male’}

########################

FILES:

Here is the traditional way you’d open and read a file (as when using a more procedural
lenguages)

########################

lines = []
file_handle = file.new(“/file/name/here”, “r”)

while line = file_handle.gets
lines << line
end

########################

In Ruby is everything more simple

########################

lines = File.readlines(‘/file/name/here’)

########################


DATABSES:

The are several ways to connect to database system such as MySQL, PostgradeSQL, Oracle, SQLite, and SQL server from Ruby. Typically a “Driver” library is available for each of the main database system, although these don’t come with Ruby by default. You typically install database driver libraries using the Ruby Gems, Ruby library packaging system, or you might need to download and install them manually.

FILE ORGANIZATION:

The simplest way to create a library is to create a Ruby file containing classes and methods and use require to load it


########################

class MyLib
def MyLib.hello_world
puts “Hello World!”
end
end

########################

And then you have another file like so:

########################

require ‘mylib’
MyLib.hello_world

########################


PACKAGING:


Any gem files uploaded to Ruby projects hosted on the RubyForge site are made available in the default repository, making a RubyForge account a necessity if you want to distribute your libraries to the widest audience possible in an easy fashion .

domingo, 27 de febrero de 2011

La historia detras de internet: HTTP y HTML

“Bajo el aspecto técnico, ningún inconveniente se presenta para que semejante organización, empezara a funcionar desde mañana con éxito completo; los obstáculos que contra ella se presentan; dependen, por completo, de nuestras instituciones, de nuestras costumbres hereditarias y de nuestros recuerdos del pasado: del «Fantasma» que nos oprime; pero también, hasta cierto punto, considerando a la sociedad en su totalidad, de nuestra fenomenal ignorancia”. Piotr Kropotkin

En tierra de nadie, un pueblo sin ley, el caos reinara, es por eso que se necesitan ciertas reglas , ciertas normas que se deben seguir y mas en un lugar donde los usuarios se cuentan por millones;

Para navegar en Internet es necesario siempre tener cierto control, ciertos parámetros que nos ayudan a congeniar con los distintos dispositivos que la navegan, la sirven y la construyen, ya que sin ellos seria un caos el navegar la red de redes, es por eso que se han creado ciertos protocolos y cierto lenguaje que ayuda a unificar, regular e incrementar los servicios de la red, en este trabajo hablaremos un poco del protocolo http y el lenguaje HTML propios para la red.

En este trabajo presenta el desarrollo del protocolo http y el lenguaje usado en Internet HTML, sus orígenes, auges y ¿caídas?

¿Qué es http?

Sus siglas en ingles significan Protocolo de transferencia de hipertexto, es un estándar de nivel de aplicación del protocolo utilizado para el intercambio de archivos en la World Wide Web . Mejor dicho es un protocolo orientado a transacciones, es decir que son reglas que se deben seguir para intercambiar datos, y sigue el esquema petición-respuesta entre un cliente y un servidor.

Una PC envía una petición a algún servidor que contenga información o datos deseados, una vez enviada la petición, el servidor envía un mensaje o acuse de recibo, el cual indica estar listo para enviar los datos solicitados, son enviados por partes al destino, manteniendo comunicación a cada paso o envío de paquetes.

Función de http:

Regula las operaciones y transacciones del proceso cliente-servidor, estableciendo un “dialogo” entre ambos, donde se puede monitorear el estado de la transacción. Como no guarda ninguna información sobre conexiones anteriores. El desarrollo de aplicaciones web necesita frecuentemente mantener estado. Para esto se usan las cookies, que es información que un servidor puede almacenar en el sistema cliente. Esto le permite a las aplicaciones web instituir la noción de "sesión", y también permite rastrear usuarios ya que las cookies pueden guardarse en el cliente por tiempo indeterminado.

A la información transmitida se la llama recurso y se la identifica mediante un localizador uniforme de recursos (URL). Los recursos pueden ser archivos, el resultado de la ejecución de un programa, una consulta a una base de datos, la traducción automática de un documento, etc.

En este protocolo existen una serie de conceptos tales como:

  • Conexión: es el circuito virtual establecido entre 2 programas en una red de comunicación
  • Mensaje: es la unidad básica de un protocolo HTTP y consiste en una secuencia estructurada que se tramite entre los programas
  • Cliente: es el programa que hace la llamada al servidor y es el que atiende en la transmisión la trama de los mensajes
  • Servidor: es el programa que presta el servicio en la red
  • Proxy: se trata de un programa intermedio que actúa sobre el servidor y el cliente

Así, pues, el protocolo HTTP se basa en la conexión entre cliente y servidor. Una transacción HTTP consiste básicamente en:

  • Conexión: establecimiento de una conexión del cliente con el servidor. El puerto TCP/IP 80 es el puerto más conocido, pero se pueden especificar otros puertos no reservados.
  • Solicitud: envío por parte del cliente de un mensaje de solicitud al servidor.
  • Respuesta: envío por parte del servidor de una respuesta al cliente.
  • Cierre: fin de la conexión por parte del cliente y el servidor.

El desarrollo de http:

Antes de 1990, Internet era un archipiélago de computadoras inconexas y no se podía cruzar de una dirección a otra pulsando un enlace como ahora. Tampoco existían los buscadores, ni se podían integrar imágenes en la pantalla puesto que no habían nacido las interfaces gráficas. Hasta entonces, los documentos se editaban mediante TeX y PostScript, pero estos lenguajes eran demasiado complicados teniendo en cuenta que debían ser leídos por todo tipo de computadoras desde simples terminales hasta estaciones de trabajo, siendo así se implementa el protocolo de transferencia de hipertexto, aun que su vida no siempre fue tan esplendida como la conocemos ahora, es decir, ha paso por muchas modificaciones desde su concepción allá por 1990 de la mano de Berners-Lee. El RFC 2146 describe el uso de los números de versión de HTTP.

La versión 0.9 obsoleta. Soportaba sólo un comando, GET, y además no especifica el número de versión HTTP. No soporta cabeceras. Como esta versión no soporta POST, el cliente no puede enviarle mucha información al servidor.

HTTP/1.0 (mayo 1996)

Esta es la primera revisión del protocolo que especifica su versión en las comunicaciones, y todavía se usa ampliamente, sobre todo en servidores proxy.

HTTP/1.1 (junio 1999)

Versión actual; las conexiones persistentes están activadas por defecto y funcionan bien con los proxies. También permite al cliente enviar múltiples peticiones a la vez (pipelining) lo que hace posible eliminar el tiempo de Round-Trip delay por cada petición.

HTTP/1.2

Los primeros borradores de 1995 del documento PEP — an Extension Mechanism for HTTP (el cuál propone el Protocolo de Extensión de Protocolo, abreviado PEP) los hizo el World Wide Web Consortium y se envió al Internet Engineering Task Force. El PEP inicialmente estaba destinado a convertirse en un rango distintivo de HTTP/1.2. En borradores posteriores, sin embargo, se eliminó la referencia a HTTP/1.2. El RFC 2774 (experimental), HTTP Extension Framework, incluye en gran medida a PEP. Se publicó en febrero de 2000.

Una vista segura:

HTTP es inseguro y esta sujeto a ataques man-in-the-middle y eavesdropping que pueden permitir al atacante obtener acceso a cuentas de un sitio web e información confidencial. HTTPS está diseñado para resistir esos ataques y ser seguro.

HTTPS es la modalidad segura del protocolo de transferencia de hipertexto, Es utilizado principalmente por entidades bancarias, tiendas en línea, y cualquier tipo de servicio que requiera el envío de datos personales o passwords.

Netscape Communications creó HTTPS en 1994 para su navegador Netscape Navigator. Originalmente, HTTPS era usado solamente para cifrado SSL, pero esto se volvió obsoleto ante TLS. HTTPS fue adoptado como un estándar web con la publicación de RFC 2818 en Mayo del 2000. En el protocolo HTTP las URLs utilizan por defecto el puerto 80, Las URLs de HTTPS utilizan el puerto 443 por defecto.

¿Qué es HTML?

El lenguaje de mercado de hipertexto consiste en piezas de texto o de otro tipo de presentación de la información, ligadas de manera no-secuencial, es el lenguaje común que predomina para la elaboración de páginas web. Es usado para describir la estructura y el contenido en forma de texto, así como para complementar el texto con objetos tales como imágenes, también puede describir, hasta un cierto punto, la apariencia de un documento, y puede incluir un scrip, el cual puede afectar el comportamiento de navegadores y otros procesadores de HTML.

¿Dónde se emplea?

El hipertexto que nació a instancias del Centro Europeo de Investigación Nuclear (CERN) de Ginebra donde Tim Berners-Lee tomó la estructura del hipertexto para dar origen a un proyecto y a su vez es donde se emplea por excelencia, me refiero a lo que hoy conocemos como la World Wide Web, en ella nos permite describir la estructura y el contenido y nos permite a demás complementar el texto con imágenes

Desarrollo de HTML

La idea se remonta a Vannevar Bush en el 1945, luego de la victoria de la segunda guerra mundial, se dio cuenta de que la estructura secuencial de los documentos -influida por la secuencialidad del discurso hablado-, era la causante de que los métodos de su tiempo fueran incapaces de procesar adecuadamente grandes cantidades de información, tuvo noción de lo que era la multisecuencialidad de un hipertexto, aunque nunca llegó a utilizar el término hipertexto.

Asi que nventa un sistema imaginario de procesamiento de la información llamado Memex, contenía unos mecanismos que permitían una rápida búsqueda de archivos microfilmados y que podían ser observados a través de una pantalla transparente, incluía la posibilidad de agregar notas, comentarios, etc.

Aunque memex no llegó a construirse físicamente, el pensamiento de Bush influyó notablemente para que otros investigadores retomaran e hicieran realidad su idea. Como el genial Theodor Holn Nelson quien lo bautizó. En 1965, Nelson acuñó el concepto de hipertexto (hypertext) definiéndolo como:

"un cuerpo de material escrito o pictórico interconectado en una forma compleja que no puede ser representado en forma conveniente haciendo uso del papel".

A principios de los años 70’s Roland Barthes tipifica una ideal de textualidad que se asemeja a la hipertextualidad, el hipertexto implica un texto compuesto de fragmentos de texto y los enlaces electrónicos que los conectan entre sí.

Con estos antecedentes y los de Andrew Lippman sobre un sistema hipermedia real, hace que a mediados de los 80 empiezan a comercializarse numerosos sistemas de gestión de hipertextos que integran características hipertextuales, son los denominados sistemas pre-web.

La gran popularidad del hipertexto llega cuando en 1987 Apple incluyó el sistema HyperCard, desarrollado por Bill Atkinson, en sus ordenadores personales Macintosh. Aunque este sistema no se presentó con el término de hipertexto se trata de un sistema basado en la metáfora de las tarjetas ordenadas en montones según su naturaleza y que contaba ya con un poderoso sistema orientado a objetos denominado HyperTalk.

En ese mismo año, 1987, la Association for Computing Machinery ACM organiza en la Universidad de Carolina del Norte, la primera de las conferencias sobre Hipertexto. A partir de entonces se desarrollaron muchos sistemas de hipertexto para distintas plataformas.

Luego en 1990 se desarrolló el sistema Intermedia en la Brown University, sistema que funcionaba en Apple bajo Unix y en que por primera vez aparece el concepto de ancla. Este sistema desapareció en 1990 debido a la falta de financiación para llevar a cabo una nueva versión que corriera en los nuevos sistemas operativos. Finalmente en 1992, George P. Landow publica "Hipertexto: la convergencia de la teoría crítica contemporánea y la tecnología", una obra clave para la difusión de la literatura y la crítica hipertextual. Sentando asi el termino, el concepto, la aplicación y la tendencia.

Innovaciones de HTML:

XHTML, (lenguaje extensible de marcado de hipertexto), es el lenguaje de marcado pensado para sustituir a HTML como estándar para las páginas web. En su versión 1.0, XHTML es solamente la versión XML de HTML, por lo que tiene, básicamente, las mismas funcionalidades, pero cumple las especificaciones, más estrictas, de XML. Su objetivo es avanzar en el proyecto del World Wide Web Consortium de lograr una web semántica, donde la información, y la forma de presentarla estén claramente separadas.

HTML5 pensado para arrasar con flash, liegero, estable, y completamente funcional, nuevas formas especificas, el manejo de objetos dedicados.

La internet por años:



1901-1917.- Proyecto de la Torre Wardenclyffe, Nikola Tesla diseña un sistema energético de distribución mundial que permitiría conectar todas las estaciones telefónicas del mundo, la difusión mundial de información y noticias, correo y otros escritos, la reproducción y envío de fotografías e imágenes, la implantación de un sistema de difusión musical, la impresión a distancia y la implantación de un registro horario universal.

1961.- Leonard Kleinrock del MIT, publicó el primer documento sobre la teoría de conmutación de paquetes, en lugar de circuitos.

1965.- La Agencia de Proyectos de Investigación para la Defensa de Estados Unidos (DARPA), promueve un estudio sobre "Redes cooperativas de computadoras de tiempo compartido"

1965.- Larry Roberts conecta por medio de una línea telefónica conmutada a baja velocidad, un ordenador TX2 en Massachusetts con un Q-32 situado en California.

1968.- DARPA lanzó un RFQ (Request For Comments) para el desarrollo de uno de sus componentes clave: los conmutadores de paquetes o "interface message processors" (IMPs, procesadores de mensajes de interfaz).

1969.- DARPA y Rand Corporation desarrollan una red sin nodos centrales basada en conmutación de paquetes. Se establece la primera red y el primer ordenador host (servidor) en Estados Unidos en la Universidad de California (UCLA). Poco más tarde aparecen 3 redes más.

1970.- El Network Working Group (NWG) terminó el protocolo host a host para ARPANET, denominado Network Control Protocol (NCP).

1971.- Ray Tomlinson, del BBN crea el primer programa para enviar correo electrónico

1972.- Se organiza la primera demostración pública de ARPANET en la International Computer Communication Conference y a partir de ahí comienza la carrera de las instituciones académicas por conectarse a la red.

1977.- Otro tipo de redes no vinculadas a ARPANET, empiezan a conectarse. Aparecen entonces las primeras referencias a Internet, como "una serie de redes conectadas entre sí, específicamente aquellas que utilizan el protocolo TCP/IP".

1981.- Se termina de definir el protocolo TCP/IP (Transfer Control Protocol / Internet Protocol) y ARPANET lo adopta como estándar en 1982, sustituyendo a NCP.

1983.- ARPANET estaba siendo usada por un número significativo de organizaciones operativas y de investigación y desarrollo en el área de la defensa. La transición desde NCP a TCP/IP en ARPANET permitió que el segmento militar se separara del segmento de la investigación.

1984.- La NSF (National Science Foundation) dio acceso a sus seis centros de supercomputación a otras universidades a través de la ARPANET.

1985.- Se termina el desarrollo del protocolo FTP (File transfer protocol) para la transmisión de ficheros en Internet, basado en la filosofía de cliente-servidor.

1987.- Es cuando empieza la verdadera explosión de Internet y ese año se incorporan diversas redes de Europa. Aparece la primera aplicación informática de hipertexto de uso popular, Hypercard para Macintoch.

1989.- ARPANET se declara disuelta, empezaron a conectarse no solamente centros de supercomputación, sino también instituciones educativas con redes más pequeñas. El crecimiento es exponencial, lo que obliga un nuevo cambio.

1989.- En Ginebra, Tim Berners-Lee del Centre Européen de Recherche Nucléaire (CERN), inventa un sistema de información en la red con posibilidades hipertextuales y multimedia. Había nacido la World Wide Web usando hipertexto.

1993.- Marc Andreesen creó un nuevo navegador llamado Mosaic y después dirigió al equipo que creó Netscape Navigator.

1994.- Se eliminan las restricciones de uso comercial de la red y el gobierno de EE.UU. deja de controlar la información de Internet.

1995.- Nace la Internet comercial y la Web ya superaba en uso al servicio de transferencia de archivos a través del protocolo FTP y al uso de telnet.

1996.- Por un conjunto de 34 universidades estadounidenses que acordaron desarrollar una nueva infraestructura de red, tanto en el plano físico (hardware), como en el lógico (definición de nuevos estándares, desarrollo del software necesario, etc.), nace Internet 2.

1998.- Acuerdo para crear una agencia internacional de registro de nombres o dominios, nace DNS

1999.- Según una agencia de Naciones Unidas, hay más de 200 millones de habitantes en el ciberespacio y 43.2 millones de computadoras conectadas a Internet.

2000.- Internet llega a las masas.

2005.- 164 millones de usuarios de banda ancha en el mundo.