Skip to content
Permalink
Browse files

File renaming

  • Loading branch information...
adelriosantiago committed Sep 9, 2015
1 parent f0459de commit c5f0c2a745e240abb45127cb0e722396dfaa5971
Showing with 804 additions and 3 deletions.
  1. +24 −0 100-duolingo/spa.md
  2. +52 −0 artificial/eng.md
  3. +3 −3 index/all.md
  4. +237 −0 samples/names-spa.md
  5. +35 −0 samples/nodejs-tts-eng.md
  6. +52 −0 samples/rtc-artificial-life-eng.md
  7. +261 −0 samples/sample-spa.md
  8. +105 −0 samples/tem-spa.md
  9. +35 −0 text-to-speech/eng.md
@@ -0,0 +1,24 @@
<permalink>spa</permalink>
<month>01</month>
<year>2015</year>

# 100 días en Duolingo

El día de ayer completé mis primeros <a class='mintip'>100 dias seguidos<span><img src='../articles/images/100-days-flame.png'/></span></a> de mi clase online de Italiano en Duolingo y debo mencionar que estoy muy contento con mis avances! Si bien es cierto que el italiano se parece mucho al español, una vez que deseas empezarlo a hablar o escribir resulta bastante difícil. En especial me resulta difícil no saber si una palabra realmente existe en italiano o si la estoy "italianizando" del español.

El sistema de enseñanza de Duolingo me parece muy ingenioso. Mis primeras lecciones eran sobre aprender palabras sencillas como *gatto* (*gato*) y *latte* (*leche*), para despues, de manera muy natural, empezar a formar frases mas complejas como *i miei gatti bevono latte* (*mis gatos beben leche*), esta frase fué por cierto, una de las las primeras frases en italiano que aprendí. Justo cuando terminaba el día 100 me enteraba que <a class='mintip'>según los cálculos de Duolingo, ahora puedo leer el 54.3% de los textos en italiano<span><img src='../articles/images/duo-read-per.png'/></span></a>, es una estadística que me impresionó bastante para ser un estudio "informal" al cual le dedico cerca de 10 minutos al día.

Aun así, siempre he tenido mis dudas sobre qué tan efectivo es aprender un nuevo lenguaje via online, por una parte me parece bastante cómodo aprender desde casa sin que tener que ir a una aula, pero al mismo tiempo siempre tengo la sensación de que quizás no le estoy dando la suficiente seriedad y formalidad a algo tan complicado como lo es aprender un lenguaje nuevo...

Empezar a aprender un nuevo lenguaje vía online no es fácil, creo que es algo que demanda una **gran disciplina**. No tiene sentido empezar a aprender solo para dejar de practicar días o semanas después. Supongo que esto le ha pasado a cualquiera que inicie a aprender un nuevo lenguaje.

> *"Por causas especiales no completaré mi sesión de Chino el día de hoy."*

> *"Estoy muy cansado el día de hoy... Pero mañana haré el doble de las lecciones."*
Por experiencia propia cuando me veo a mi mismo pensando en frases como las anteriores, ya sea aprendiendo un nuevo lenguaje o cualquier otra habilidad, sé que hasta ahí habrá llegado mi aprendizaje y que meses después recordaré solo aquellas palabras o conceptos que por algún momento me fascinaron. Seguramente en los recuerdos de muchos de nosotros vagan frases y palabras dispersas de aquellos lenguajes que alguna vez admiramos de manera obsesiva por un corto tiempo.

En fin, espero seguir teniendo la disciplina para seguir aprendiendo este lenguaje y escribir el próximo artículo que espero se llame "200 días en Duolingo".

Arrivederci! (Hasta pronto!)
@@ -0,0 +1,52 @@
<permalink>eng</permalink>
<month>5</month>
<year>2015</year>

# Collaborative artificial life

I have always been fascinated with artificial life and decided to make my own real-time collaborative cellular automaton in [Node.js](https://nodejs.org/). More specifically I wanted to bring the magic of real-time collaboration to the Conway's Game of Life so that every single user that loads the game will be <a class='mintip'>interacting with the same board<span><img src='../articles/images/alife-final-animated.gif'/></span></a>.

The Game of Life was created by [the British mathematician John Horton Conway](https://en.wikipedia.org/wiki/John_Horton_Conway). In an attempt to find an "self-replicating machine" Conway drastically simplified the an earlier <a class='mintip'>automaton by John von Neumann<span><img src='../articles/images/neumann-automaton.gif'/></span></a> which contained several complex rules. The Conway's model appeared on the page 120 of the <a class='mintip'>1970's issue of the Scientific American<span><img src='../articles/images/sa-1970.jpg'/></span></a> and made him instantly famous.

Most of the cellular automatons have very simple rules, here is a simple example of these mathematical models work:

Let's say we have a chessboard grid and a bunch of pawns which we will call a *living cells* from now on. If there is a *living cell* on the board that grid square is considered to be alive, if there is not living cell then that square is considered to be dead. These two states are can be easily represented on a computer by using the binary system, so that the equivalence ends up being **1 for a living cell** and **0 for a dead cell**.

Now image that you throw 5 living pawns on the 8x8 board and you end up in the following pattern:

![](../articles/images/chessboard-gen0.PNG)

This is called the generation 0, to compute the next generation we will follow these 4 rules:

<br/>

**1.- Any living cell with fewer than two live neighbors dies, as if caused by under-population.**

**2.- Any living cell with two or three live neighbors lives on to the next generation.**

**3.- Any living cell with more than three live neighbors dies, as if by overcrowding.**

**4.- Any dead cell with exactly three living neighbors becomes a living cell, as if by reproduction.**

<br/>

By applying these simple rules we end up with the next generation which looks like this:

![](../articles/images/chessboard-gen1.PNG)

And then,

![](../articles/images/chessboard-gen2.PNG)


And so on, if you keep iterating you will notice that <a class='mintip'>successive generations will make the pattern move away<span><img src='../articles/images/glider-animation.gif'/></span></a> from where it started. This pattern will eventually perish when it reaches the border of the chessboard.

There are <a class='mintip'>several<span><img src='../articles/images/gl-example0.gif'/></span></a>, <a class='mintip'>many<span><img src='../articles/images/gl-example1.gif'/></span></a>, <a class='mintip'>many<span><img src='../articles/images/gl-example2.gif'/></span></a> <a class='mintip'>structures<span><img src='../articles/images/gl-example3.gif'/></span></a> that create different results. You can try them on a real chessboard, a piece of paper, or you could use my simulator at [alife.adelriosantiago.com](http://alife.adelriosantiago.com).

That’s it! With some really simple rules you end up having an living ecosystem (or an artificially living ecosystem to be precise).

This is how the finished project looks like:

<a href='http://alife.adelriosantiago.com'>![](articles/images/alife-final.PNG)</a>

Click on the image to load the simulator and play with it creating some structures, don't forget to set your nickname! As stated previously, note that **the app is real-time collaborative**, every user is actually seeing and interacting with the same board, I made it this way to see how it evolves with time, I plan to leave running this project running for a looong time...
@@ -4,15 +4,15 @@

# Index

### [100 días de italiano en Duolingo](http://www.adelriosantiago.com/100-dias-duo)
### [100 días de italiano en Duolingo](http://www.adelriosantiago.com/blog/100-duolingo)
Mi experiencia usando Duolingo por 100 dias seguidos aprendiendo italiano.

##

### [Real time collaborative artificial life](http://www.adelriosantiago.com/rtc-artificial-life)
### [Real time collaborative artificial life](http://www.adelriosantiago.com/blog/artificial)
The real-time collaborative version of the Conway's Game of Life using Socket.io.

##

### [Text to speech interface in Node.js](http://www.adelriosantiago.com/nodejs-tts-eng)
### [Text to speech interface in Node.js](http://www.adelriosantiago.com/blog/text-to-speech)
A simple Node.js API interface to convert text to speech for your personal projects using the SVOX engine.
@@ -0,0 +1,237 @@
<permalink>sample name with spaces</permalink>
<month>3</month>
<year>2015</year>

# h1 Heading 8-)
## h2 Heading
### h3 Heading
#### h4 Heading
##### h5 Heading
###### h6 Heading


## Horizontal Rules

___

---

***


## Typographic replacements

Enable typographer option to see result.

(c) (C) (r) (R) (tm) (TM) (p) (P) +-

test.. test... test..... test?..... test!....

!!!!!! ???? ,, -- ---

"Smartypants, double quotes" and 'single quotes'


## Emphasis

**This is bold text**

__This is bold text__

*This is italic text*

_This is italic text_

~~Strikethrough~~


## Blockquotes


> Blockquotes can also be nested...
>> ...by using additional greater-than signs right next to each other...
> > > ...or with spaces between arrows.

## Lists

Unordered

+ Create a list by starting a line with `+`, `-`, or `*`
+ Sub-lists are made by indenting 2 spaces:
- Marker character change forces new list start:
* Ac tristique libero volutpat at
+ Facilisis in pretium nisl aliquet
- Nulla volutpat aliquam velit
+ Very easy!

Ordered

1. Lorem ipsum dolor sit amet
2. Consectetur adipiscing elit
3. Integer molestie lorem at massa


1. You can use sequential numbers...
1. ...or keep all the numbers as `1.`

Start numbering with offset:

57. foo
1. bar


## Code

Inline `code`

Indented code

// Some comments
line 1 of code
line 2 of code
line 3 of code


Block code "fences"

```
Sample text here...
```

Syntax highlighting

``` js
var foo = function (bar) {
return bar++;
};
console.log(foo(5));
```

## Tables

| Option | Description |
| ------ | ----------- |
| data | path to data files to supply the data that will be passed into templates. |
| engine | engine to be used for processing templates. Handlebars is the default. |
| ext | extension to be used for dest files. |

Right aligned columns

| Option | Description |
| ------:| -----------:|
| data | path to data files to supply the data that will be passed into templates. |
| engine | engine to be used for processing templates. Handlebars is the default. |
| ext | extension to be used for dest files. |


## Links

[link text](http://dev.nodeca.com)

[link with title](http://nodeca.github.io/pica/demo/ "title text!")

Autoconverted link https://github.com/nodeca/pica (enable linkify to see)


## Images

![Minion](https://octodex.github.com/images/minion.png)
![Stormtroopocat](https://octodex.github.com/images/stormtroopocat.jpg "The Stormtroopocat")

Like links, Images also have a footnote style syntax

![Alt text][id]

With a reference later in the document defining the URL location:

[id]: https://octodex.github.com/images/dojocat.jpg "The Dojocat"


## Plugins

The killer feature of `markdown-it` is very effective support of
[syntax plugins](https://www.npmjs.org/browse/keyword/markdown-it-plugin).


### [Emojies](https://github.com/markdown-it/markdown-it-emoji)

> Classic markup: :wink: :crush: :cry: :tear: :laughing: :yum:
>
> Shortcuts (emoticons): :-) :-( 8-) ;)
see [how to change output](https://github.com/markdown-it/markdown-it-emoji#change-output) with twemoji.


### [Subscipt](https://github.com/markdown-it/markdown-it-sub) / [Superscirpt](https://github.com/markdown-it/markdown-it-sup)

- 19^th^
- H~2~O


### [\<ins>](https://github.com/markdown-it/markdown-it-ins)

++Inserted text++


### [\<mark>](https://github.com/markdown-it/markdown-it-mark)

==Marked text==


### [Footnotes](https://github.com/markdown-it/markdown-it-footnote)

Footnote 1 link[^first].

Footnote 2 link[^second].

Inline footnote^[Text of inline footnote] definition.

Duplicated footnote reference[^second].

[^first]: Footnote **can have markup**

and multiple paragraphs.

[^second]: Footnote text.


### [Definition lists](https://github.com/markdown-it/markdown-it-deflist)

Term 1

: Definition 1
with lazy continuation.

Term 2 with *inline markup*

: Definition 2

{ some code, part of Definition 2 }

Third paragraph of definition 2.

_Compact style:_

Term 1
~ Definition 1

Term 2
~ Definition 2a
~ Definition 2b


### [Abbreviations](https://github.com/markdown-it/markdown-it-abbr)

This is HTML abbreviation example.

It converts "HTML", but keep intact partial entries like "xxxHTMLyyy" and so on.

*[HTML]: Hyper Text Markup Language
### [Custom containers](https://github.com/markdown-it/markdown-it-container)
::: warning
*here be dragons*
:::
@@ -0,0 +1,35 @@
<permalink>nodejs-tts-eng</permalink>
<month>8</month>
<year>2015</year>

# SVOX TTS (Text to Speech) interface in Node.js

As you probably know, Google has a service to convert text to audio via the Google Translate engine. You can easily test it by clicking on the <a class='mintip'>megaphone icon<span><img src='articles/images/google-tts.png'/></span></a> to read the text aloud. <a class='mintip'>Inspecting the button with the browser toolbar<span><img src='articles/images/behind-scenes.png'/></span></a> we find that what is actually going on behind the scenes is a call to an address with the text we want to read aloud, so that when you click on the megaphone you are actually performing a requests like these:

* [translate.google.com/translate_tts?tl=en&q=hello-world](http://translate.google.com/translate_tts?tl=en&q=hello-world) to read “hello world” in english.
* [translate.google.com/translate_tts?tl=it&q=buongiorno](http://translate.google.com/translate_tts?tl=it&q=buongiorno) to read aloud “buongiorno” in italian.

And so on with other languages.

Now imagine yourself creating and Android or Arduino app to fetch the audio programmatically, you would just need to build the URL and fetch the audio however bear in mind that this will only work for a few words and sentences, I suppose that people abused the service with thounsands of requests and now Google puts a limit the quantity on audios you can generate to about 15 calls per user, after that limit is reached you will very likely get an <a class='mintip'>unusual traffic<span><img src='articles/images/deny-tts-google.png'/></span></a> captcha making the service completely unusable for your app... In order to raise the limit again you would need to solve the captcha.

> "Ohh wait! The project is working just lemme answer this captcha to prove that I’m not a robot!”
> -☉_☉
With this project you will be able to create your own Text to Speech server for your apps using the SVOX engine for Ubuntu. Bear in mind that the SVOX speech synthesis quality is far lower than Google's engine. On the bright side, you can flood your Ubuntu server with thousand calls if needed.
Some project ideas that could use this web interface are:
* A speaking Arduino that talks when you press some buttons.
* An accessibility app for the blind. Maybe an Android app that reads Barcodes aloud *(there are some good tutorials about [how to read barcodes](http://code.tutsplus.com/tutorials/android-sdk-create-a-barcode-reader--mobile-17162) and [how to read barcodes and QR codes](http://examples.javacodegeeks.com/android/android-barcode-and-qr-scanner-example/))*
* A computer clock that reads the time every hour (like on Mac).
Find the project and the installation instructions at the Github repo [https://github.com/adelriosantiago/svox-interface-nodejs](https://github.com/adelriosantiago/svox-interface-nodejs). You will need a Virtual Machine running Ubuntu or a Digital Ocean instance in order to get the SVOX TTS engine running and [Node.js](http://nodejs.org) to create the web request interface.
Here is how the finished project looks like:
<a href='http://tts.adelriosantiago.com'>![](articles/images/tts-final.png)</a>
Simply select the language, the text to convert and click on the URL to get the audio. Feel free to play with the finished project generating some phrases at the address [tts.adelriosantiago.com](http://tts.adelriosantiago.com).

0 comments on commit c5f0c2a

Please sign in to comment.
You can’t perform that action at this time.