martes, 15 de noviembre de 2016

The Hitchhiker’s Guide to the Galaxy


 Now, on this entry we are going to talk about the book we read along the semester, this particular book of science fiction that was released in 1979 by Douglas Adams. On my opinion I've never heard about the book and less known that there is a movie released in 2005 by the director Garth Jennings. Even I notice this, I preferred to read the book. The point of this article is give my opinion of why you should read or not this book, so here are some of my reasons, before I continue, it is not my intention to tell the end of the story, because it would ruin the plot.
All the story began when Arthur Dent, a normally person crosses with Ford Prefect, a kind of alien that saves Dent from the Earth destruction, so from this, the adventures begin through the space and all of the things that the human unknown. 
If you are a fan of science fiction novel, this is one of the books you must read! and prove it by yourself, but the story does not end here there is five books if you want to know more. Besides is consider part of geek culture, there are certain parts that will make never forget this book. Here are some reasons; making a parenthesis, there is a curious fact that if you search in google the answer to life the universe and everything , it will appear 42, that is part of this boo, the why of this number you have to search on this book. Don't forget also de Babel Fish, the famous phrase Don't Panic and Marvin has a song by Radiohead called Paranoid Android.
This book is, as I said before a must read before you die, because it had a big influence on music, comics, movies and also tv programs like Doctor Who, The X-Files and The Big Bang Theory. Douglas was a influence for many, so don't miss this history!

domingo, 30 de octubre de 2016

Technical Overview of the Common Language Runtime

Now, on this entry we're gonna talk about the opinion of Meijer and Miller, about why JVM is not a good option for execution environment and it is just a suboptimal multi-language platform. To make a clear analysis of this, the authors compare between JVM and the new Microsoft .NET CLI (Common Language Infrastructure), that for the authors CLI is a better multi language execution environment than JVM. Because of the next reasons:
  • It has as target multiple languages, in contrast JVM has as main target Java
  • Managed multiple threads of control. CLI storage location are polymorphic, that means that there are 4 bytes or hundred of bytes. In contrast JVM are 4 bytes wide.
  • CLI type system support a set of primitive types such as: object, bool, int8, float32, typed referece, etc. And as a main advantage over JVM, is the fact of the natural-size, these means that in JVM values of type long or double occupy to locations making difficult for compilers writers. Supports also classes, interfaces, arrays, delegates
  • Besides CLI has polymorphic locations, it has also a little more polymorphic instructions (useful for compilers to generate MSIL code)
  • CLI support tailcalls and JVM not.
  • CLR provides built-in support for boxing and unboxing

According to the previous point, we can see that CLI has a better future that JVM, just because of the simple fact that it is easier to use for compiler writers. From my point of view for being a good execution environment we need to focus on the points, that at the beginning the authors mention, about why people look for an alternative implementation paths for native compilers that are portability, compactness, efficiency, security, interoperability and flexibility. Even though CLI seems to be the powerful and perfect one, they keep it making changes to be updated to the future necessities.

martes, 18 de octubre de 2016

Ruby and the Interpreter Pattern

On this entry we are going to talk about an article wrote by our professor Ariel Ortiz, which for me seems to be very interesting, so here we go. The main idea of this article is talk about a framework called S-expression Interpreter Framework (SIF), because is a tool that the author have been working with the alumni of the Tecnológico de Monterrey specially in the programming language course. Before we continue, it is important to know that this framework is written in Ruby, but what is Ruby?
Ruby is an interpreted, dynamically typed programming language, that helps simplifying the construction on languages interpreters, more specific it has the advantages of having garbage collection, open classes, first class continuations, built-in regular expressions and hashes.
About the source language notation used was the S-expression (symbolic expression) mentioned before, is a notation mainly used in Lisp and the advantages of this notation are that code and data can be easily represented, minimal elements, no associativity problem. On my experience using this notation is that at the begging is hard because of the parenthesis, but once you get it, you notice that it is less code than in other languages. In the other hand, the interpreter pattern helps to evaluate a language grammar or expression.
These three S-expression, Ruby and Interpreter Patter for their use, the article give us a detail instructions taking in count that Interpreter.eval class method is the heart of the SIF and it supports integers, symbols, lists and procedures.
In conclusion, this framework is really useful (SIF) because of the features of Ruby give us and the interpreter. Ruby at the same time, it is important to know the bases of this programming language like data types, naming conventions and code blocks. Don't forget that SIF also can be extended.

martes, 11 de octubre de 2016

Compile-Time Metaprogramming

On this entry we're going to talk about Compile-Time Metaprogramming with the help of Lauren Tratt, creator and inventor basically of the Converge programming language also he is a researcher at an University in London. To get started, the podcast talked about DSL from the guest point of view, but making a contrast with Paul. A DSL should be an abstraction relevant to specific domain, in other words you take a particular problem and you take it to the upper level, there is something important here for the programmer and is that is you are using DSL, you need to make easy to read and maintain that, because if you leave it for a long period of time you might have forgot what you was doing. Another point the author touch is the reason you want to embedded things in a host language is that maybe the language itself could make for us the translation, an example of this can be expressions.
The particular topic I was interested is knowing about Converge, because I've never heard of it, but it seems to support Macro System and DLS. So according the inventor of it, Converge is a new language alike Python at the beginning, the it have this compile metaprogramming stuff, that basically means is a Macro System and a Macro the thing it has is that is very heavy influenced by Haskell and you need to be able to built a decent AST (Abstract Syntax Three). 
In conclusion this is  session about language design, focused of Domain Specific Languages (DSL) and this new language named Converge created by the same guest and once again we can see the advantages with Ruby, that at the guest mention is a great tool to make DLS, because is dynamic and with friendly syntax and the most important it make easier for compiler writers.


miércoles, 21 de septiembre de 2016

Mother of Compilers


Now on this post, we're going to talk about the video of Mother of Compilers, so basically the principal figure on this is Grace Murray Hopper, a woman born in 1906, on this computer programming world, so for me is interesting because it was scarce knowing a woman doing something important. So about Grace is called the Queen of Code because of her contributions in which they stand out the creation of COBOL and the one of which are interested for making a compiler to be easier and readable for us.
Another fact about Grace is that joined to de US Naval Reserve, breaking the sterotype of that era, she gain an important charge by knowing how to use computers, but Grace was never focused on computers specifically.
After she introduced herself into the computer world, she wanted to do computers and computing more accessible so she created higher languages to do so. About what she done on her early years are:
1952. Grace and her team at Remington wrote the A-0 compiler, based on her basketball days.
1969. The Data Processing Management Association selected as the first "man" of the year
1971. The ACM (Association for Computing Machinery) established the Grace Murray Hopper Award for young computer personnel.
As we can see Grace Hopper was a big icon and woman role model, breaking the stereotypes and inspiring women to introduce to the computer world, so is something to admire the courage she had and the desire to teach another people. So I agree with the tittle, Grace is the Mother of Compilers and an inspirations for the women of that era and not only that, it should be remembered for all the persons in the computer world. Because even when she was retired she wanted to support young people to get involved on this technology field.


domingo, 4 de septiembre de 2016

Internals of GCC

On these podcast, Morgan Deters that is at the Washington University in St. Louis tell us about the Gnu compiler collection (GCC) giving us a brief introduction of what we had read on previous lectures why compilers are relevant in our daily life?, Morgan tell us just because of the fact when you are compiling your software, you want to run efficiently taking advantage of what the modern hardware have to offer you. And how compilers work? reading a plain text generally, then understand what it does the input, what you expect from the output, the variables, the semantic, among other things. Those questions figure me out as a summary of the previous lectures, but unlike Morgan talk about GCC.
The GCC is a very flexible and portable and it can be run on any Unix platform, Windows, Mac OS; having the advantage that accept many source files inputs, producing output object code. Other thing about GCC is that is divided in: front end, middle and back end. Particularly the front end is interesting because as the locutor say, so different languages can be parses and transformed to a common abstraction. We can represent this expressions as a tree; a tree it's just a common structure inside gcc front ends. These is usually written in C and you don't have orienting object support, you have to be careful because if you make something unsafe it will crash.
Portable in terms of Morgan is to be able to take an architecture that has a minimum C compiler available and able to create a GCC from that and as part you get the new C compiler. In conclusion, it seems to me a interesting podcast because it gave new information about compilers and how it works, it seems not easy, because of the obstacles of get the initial language to make the target program, so that's why we need to know more about the tools that offer us.


lunes, 29 de agosto de 2016

The Hundred-Year Language

Since programs do our daily life easier and give us the answer of almost everything, it seems magic but the is only one thing that computers and programmer can't do and it's predict the future (so far). Even the evolution of technology we keep moving forward of what we never thought in the past, so what about the programming languages that are involve in every thing we use.
I like the way the article make an analogy of the evolution of the programming languages, because I never saw it that way as species and all the living things on earth had evolved, the same thing happens with programming languages.
From the perspective of the author make us think that there will be not an unique language for a long long time, but this is not an article to persuade us, instead of make us think that this programming world as a game table, where you have to bet on a programming language.  It's hard to decide which have a future, so that's why the autor treat these languages as species that evolved to survive, to know which will be the best we need to know its ancestors because with this it can tell us a little about the potential it have. But there is a good point in the article that what about 50 years ago, if we had already these languages we had used it? and the answer is no, because at that time the technology was not that advanced and the language wouldn't fit. It's important to have in mind that programming languages are not technology, they are notations so that's why programming languages evolved slowly unlike technology. From my point of view I think that it's good keep in mind that some languages are the evolution of previous ones and the combination of others, because each of these have advantages that make coding very efficient.

jueves, 18 de agosto de 2016

Making Compiler Design Relevant for Students


Why Compiler Design is important for us? That's the question the article make us think, because as computer engineers we must be prepare for any situation. This topic that seem to be overrated have more potential beyond the translator of high level programming languages to assembly or machine code. Compiler Design have tools like lex and yacc that are useful for this compiler problems and that was I didn't know and in the article said at that moment students too, because it's obvious if you don't get the problem you can't solve them, so I found useful make analogies of this problemas to have a wide panorama and make this graphs. Other point that I consider relevant is the fact that compiler design have four phases that are: Lexical Analysis and Parsing, Semantic Analysis, Code generation and Code optimization. These phases I consider that it must follow, because as in Software engineering project, there is always a methodology that helps to have a better software or in this case a better compiler design. 
I didn't know that compiler design had phases, because most of the time as we make a program, we just code without make an analysis of the input or output, that's why I make a comparission with Software Engineering, because it teach us how to follow a methodology. But why is it useful? just because it make our final product or software have a better quality and help us to don't waste time. As it say compile means translating from a high level to a low level programming, that's why since the beginning we need to have a full understand of the language we are translating. So I agree with the article following these phases help us to code more quickly and in a better way and that's why compiler design is important.

jueves, 11 de agosto de 2016

Let's start! An Introduction of myself

Hello everyone! My name is Cristina and I'm studying computer engineering and here are some random stuff about me.

Hobbies
  1. Listen to music, it helps me to relax.
  2. Drawing
  3. Watch movies with my family
  4. Visit new places ❤︎
  5. Concerts and theater


Favorite Books
El Túnel - Ernesto Sábato
La identidad - Milan Kundera
Tokio Blues - Haruki Murakami
El libro de los amores ridículos - Milan Kundera




Music: Kasabian, Interpol, Arcade Fire, Arctic Monkeys, Foster the people, Phoenix, The Kooks, etc.


I'm really excited about the course, I really hope not get stuck on the road of knowledge.
And finally I love dogs♥, but it's a thing that all my contacts on Facebook know. 



Thanks for reading and feel free to comment! (: