domingo, 7 de abril de 2019

Hidden Figures


Hidden Figures, a film directed by Theodore Melfi and produced by 2oth Century Fox. This is a movie where we can see the life that three black women has in the science and engineering fields. The three afroamerican women are: Katherine Johnson(Teraji P. Henson), Dorothy Vaughan(Octavia Spencer) and Mary Jackson(Janelle Monáe).

These three women are part of a segregated group in America and around the world. The society is divided into black people and white people. These women together with another group of exceptional black women work in NASA but in a different department and building where only colored women can stay to make the calculations needed for different tasks.

In this fil we see many different ways of discriminations, they have to go to specific restrooms, they were on a tiny office, they were not noticed when asking for promotions or permissions, they have to many obstacles to work as engineer, etc. They have a great potential and intellect but because of their color of skin they are considered to take different positions. At the end of the movie they are considered very important because in the case of Katherine Johnson, she helped with the calculations to help to make the first man in the USA orbit to the moon. Dorothy Vaughan was the first supervisor of the IBM services in NASA, and in the case of Mary Jackson she was the first female aerospace engineer in the USA.

I think this movie is fantastic because it shows us the reality that we were living in those years and nowadays. It shows us that despite the adversities we have to confront the reality and make something different, something that reveal why we are important and that we can make even more than other people think

domingo, 31 de marzo de 2019

Ethical Reflection on Ready Player One


After readying ready player one, we can discuss from two quotes. These quotes are the following:

Morrow wrote in his autobiography that he’d left GSS because ... he felt that the OASIS had evolved into something horrible. “It had become a self-imposed prison for humanity,” he wrote. “A pleasant place for the world to hide from its problems while human civilization slowly collapses, primarily due to neglect.” (p. 120)

(Halliday speaking) “I created the OASIS because I never felt at home in the real world. I didn’t know how to connect with people there. I was afraid, for all of my life. Right up until I knew it was ending. That was when I realized, as terrifying and painful as reality can be, it’s also the only place where you can find true happiness. Because reality is real.” (p. 364) (Ernest Cline)

After Reading these quotes written by Ernest Cline, I can say that in a certain way I agree with the author, but not at all. I believe that many people have a place where they can get disconnected from reality and this world and tele transport themselves into another world created by themselves, but you can´t disconnect yourself reality at all, you need to distinguish what is real and what it isn´t, you have to live your real life.

Oasis has a great potential as a scape for people that need to live their life in a different way, but it also is dangerous if people see it as their real world.
Another advantage of Oasis is the fact that I think people could learn cultural and personal values following rules from this world, they would learn it indirectly while they pass time in Oasis.

For me, using Oasis is the same as using IT technology and social networks and I think that Oasis makes it better, because here you can interact closer with people and require more concentration and effort for some activities.
I think that the real world is different in contrast to another idea of real world in books and movies I have read, I believe that in ready player one this idea is unique.

For me is a fact that we will having something familiar to Oasis for the year 2040 or 2050, technology is increasing on an exponential way.

I think that software architecture at this point can start creating a world similar to Oasis, maybe with some research and technology evolution we can have finally that world in our present

viernes, 22 de marzo de 2019

An Introduction to Metaprogramming


This is an article written by Ariel Ortiz, our professor. Where he talks about metaprograms, which are programs that generates other programs or program parts. So, metaprogramming means writing metaprograms. The most common ones include compilers, interpreters, parser generators, assemblers and preprocessors. We use metaprograms to reduce a tedious programming task.
A quine is a special kind of source code generator. It is a program that generates a copy of its own source as its complete output.

Ruby is a dynamic language that allow us to modify different parts of the program easily during runtime without having to generate source code explicitly. Ruby´s core API and frameworks employ this facility to automate common programming tasks. To accomplish the previous statement we have code as the attr_initialize method that takes as input a variable number of attribute name. Each of this attribute name has the same position reserved for it in the dynamically created initialize methos parameter “args” in order to set its initial value.

We use zip and each methods to iterate at the same time over the attributes declared in list “attrs” and the argument list “args”. As a final step we delegate the attr_accessor method to create the read/write access methods for all the declared attributes.

Metaprogramming should sound difficult or complicated, but once you are familiar with the techniques, it becomes easier. With metaprogramming we can automate error-prone or repetitive programming tasks. We can use it to pre-generate data tables, generate boilerplate code automatically that you can abstract into a function, or even to test ingenuity on writing self-replicating code.

domingo, 17 de marzo de 2019

MICROSERVICES


This Entry is about an article written by Martin Fowler and James Lewis. Where he talks about the arising of the architecture, that we call as microservice Architecture. This term is used to refer a way of designing software in small independent services that will work together. This is used mainly in business applications and have some peculiar characteristics.

 A Business application is usually constructed in three main parts: an user interface, a database and a server application. When you have a monolith application, whenever you make a change on any of these parts, you have to deploy all the application including those that you did not make a change. This is an advantage for microservices, why? Because this kind of architecture are independently deployable, you can change a service and then only deploy that service, not all of them.

Here you have some of the main characteristics described into this article.

Componentization via Services- A component is described as a unit of software that is independently replaceable and upgradeable. This allow us to have several components that together work as the complete functionality, these services are components which communicate with a mechanism such as web service request, or remote procedure call.

Organized around Business Capabilities- The system design will be mostly a copy of the organization´s communication structure.

Products not projects- do not look a software as a set of specifications, look it as an on-going relationship between the developer, software and the client.

Smart endpoint and dumb pipes- Endpoints do all the work

Decentralized Governance- Microservices allows you using different programming languages to build different services to make a solution more efficient and well built.

Decentralized Data Management- Data can also be represented in different forms depending on what the service needs. Each service manages its own database.

Infrastructure Automation-Trying to automate everything, from test to deployment.

Design for failure- Applications must be designed to handle error gracefully.

Evolutionary Design-Have great change control so you can make faster and well controlled changes to the software.

sábado, 9 de marzo de 2019

The 4+1 View Model


We have three types of diagrams, Structure diagrams, behavior diagrams and interaction diagrams. In Structure diagrams we have Class Diagrams, object diagrams, deployment diagrams. In Behavior ones we have State machines diagrams, use case diagrams. At interaction diagrams we have Communication diagram, Sequence diagrams, timing diagrams.

UML is important because enables knowledge transfer and visual presentation of ideas. The 4+1 View states that there are 4+1 views important for development of software. The vies are the following:

·        Logical View: Object model, states what components will be made and how they will behave.
·        Development View: Organization of assets during the development. Which belongs to what
·        Physical View: How software and hardware are related. What system looks like when finished.
·        Process View: Concurrency and synchronized aspects.
·        Use-Case Views/Scenarios: How system interacts with the world and systems around it.

Essentially, we need to make a view model because it will help the programmers to start the development with an idea. We need to model the requirements to avoid the ignorance and to make a group of programmers agree on how they will develop a project. This will help us to go from the requirements that we get from users and customers to the construction of architecture and components, we have to transfer the pipeline into a view design to organize things and manage environments or support the work of other programmers, basically to understand how the project will be developed. If programmers actually work as the six blind men example, everyone would make the components as they understand and they would never join the components on a good way, the programmers need to know how other programmers are developing other components that also may help them to develop their part of the project

jueves, 28 de febrero de 2019

Understanding the SOLID Principles



Solid is an acronym that stands for five principles of object-oriented programming and design.

S-Single Responsibility Principle
O-Open/Closed Principle
L-Liskov Substitution Principle
I- Interface Segregation Principle
D-Dependency Inversion Principle

These principles help to avoid dependencies between the classes.
Now talking a little bit more of these principles we understand the following:
Single Responsibility Principle- This principle states that one class should only have one responsibility so the changes in that class do not end up affecting unrelated critical features on the system. This happens from a single action to a set of processes. You can take a view that a single responsibility refers to a group of related business processes. The stamina and tolerance determine how far you go

Open/closed Principle- This principle talks about that classes should be open for extension but closed for modification, this means that adding new behavior instead of changing the base of a class you should create new classes that inherit from this class and add the behavior there. This helps to avoid errors in child classes

Liskov Substitution Principle- You can pass a new class to an existing function that has been written to work with the base class, and the function will perform its work just as if you had passed an instance of the base class. This principle intended to keep alive and well the working relationship between classes and functions. You should forbid modification of a behavior through the mechanism of inherence.

Interface Segregation Principle- This principle tell us to divide and conquer. Instead of writing a big interface, divide the interface members and put them together so the class would not be loaded with responsibilities we won´t use.

Dependency Inversion- This principle basically tell us to write code that refers to abstract classes and interfaces instead to actual classes

sábado, 23 de febrero de 2019

War Games


This is a Movie directed by John Badham, where the main character is a teenager, called David Lightman and starring by Matthew Broaderick. David loves computers a lot, he likes to discover new functionalities with his computer, he takes it as a challenge. He heard that a new game is being released, so he took his technical abilities to be the first one to play that game. He entered to a rare interface where he found some names that sounds like funny videogames, but to play them he discovered that he had to introduce a password. He passed many hours trying to discover the password, until he found it.

David selected a game where he had to launch a massive attack to other nation. He was playing as Russia, but he did not realize that this was actually a simulation of an actual war and the machine also thought that this was a real simulation. David passed many difficulties to discovered that this was just a simulation and the USA was not being attacked by Russia. But there was a problem, the machine was taking actions to prevent the “attack” so this intelligence wanted to attack Russia. David discovered that the only way to stop the machine was teaching it to don´t play the game because nobody would win. David learned this algorithm by making the machine play tic-tac-toe against itself.

This movie was interesting because it shows us that at that time computers and technology was marvelous, people could contact another computer via phone and everyone can access by this way to another system. So, for me it was so fascinated that a teenager knew all this kind of trick and have all the knowledge to take advantage to this technology. This movie learned us that technology knowledge is reachable for anyone.

sábado, 16 de febrero de 2019

“Software Craftsmanship with Bob Martin”


I have listened to the podcast that is actually an interview to Robert C. Martin, which is a software engineer and author of a lot of books; you can also know him as the uncle Bob. We can hear some subjects like software architecture, software craftmanship and agile software development approach during this interview.

The first thing we hear is Uncle Bob talking about his experience of being a software architect. We also hear him saying that the worst part is the people that tends to separate architects from software developers. He believes is weird because architects make decisions about the code and have no familiarity with it.

Robert Martin, talks in this interview about software craftsmanship (I have never heard about this concept in my life) , and he tell us that is a concept that says that every young coder or developer  needs to have a master because we can not learn coding just with theory, you must help another person to learn, in a project or whatever you want but help someone. This is similar to attending to college, here you have classmates that maybe have some issues with a subject and as a good classmate you can help someone and with that receive more knowledge and feedback. 

Software craftsmanship has also a manifesto with four points, which are:
• Not only working software, but also well-crafted software
• Not only responding to change, but also steadily adding value
• Not only individuals and interactions, but also a community of professionals
• Not only customer collaboration, but also productive partnerships

We hear uncle Bob explaining each point. The first two main points consist on code related to issues, is to have good practices to code and do well-crafted software, not just do what you need to do, but also know how to do it, this applies also when you make changes to the code. You must add value not just to accomplish the requirements.  

Uncle Bob also mentioned some tools and abilities that a good developments craftsman should have:
• Understanding the IDE you are working with
• Version control
• Bug tracking
• Unit testing
• Acceptance testing tool
• Lisp
• Knowing a programming language of each type

viernes, 8 de febrero de 2019

Is Design Dead?


I believe that it is important to design first and then code, this will avoid the code and fix. Also, I think that “if you listen to your code a good design will appear” is one of the worst quotes. It is very interesting to know that there are two styles of design. The first one is the evolutionary design, which is a disaster, it makes the code harder to alter. Now, the counter part is the planned design, which contain a notion born from other branches of engineering. Building codes into this design is to follow the rules about how you design structures based on experience of what works.

This las one design is not the perfect one, it has some faults. The first fault is that it is impossible for a person to think in all the issues that are going to be present when they are programming. There is a cultural problem with this type of design, the designers are designers because their skills and experience, but they are too busy with this job, so they do not have enough time to code any more.

A feasible way to deal with changing requirements is to build flexibility into the design so it would be easier to change it as the requirement need it.

In extreme programming the continuous integration is necessary to keep the teamwork in sync, it will be easier to make changes and do not need to integrate other people.  Refactoring is also important because people who do it, find a difference between their effectiveness compared to doing looser, more ad-hoc restructuring.

I agree with the quotes “Do the simplest thing that could possibly work” and “You aren´t going to need it” because we have to think in present requirements and try to make them as easy as we can so that we can change them when the requirement needs it.

sábado, 2 de febrero de 2019

Who needs an architecture?


I believe that the meaning that is given to the architecture word is so accurate, I also believe that this word should be used to describe something when we want to talk about the design of something. But also, I think that the IEEE definition is correct, because architecture should also consider the structure and components of something, in this case the software.

An architect should be defined as someone that worries for the important stuff, someone who takes important decisions, must be aware of what is going on in the project. He looks for the important issues for the projects.

In the software development, the architect works in intense collaboration, he should be working with developers, participates in requirements sessions, and mentors’ developers. One of the most important tasks of an architect is to find different ways to eliminate irreversibility and duplication in software design. The difference between this architecture and physic architecture, is that this is limited by imagination, by design, by organization. It is limited not by physics but is limited by properties of people.

The only one that makes it harder is us. In software design, the components are significant because the expert developers say so.

Talking abut code, if we do not have a design we will have a lot of mistakes that will cost more money and time, something that could be critical for a project. These mistakes could involve a lot of people working in the same project. The projects need to be planned previously to know the functions of everyone and determine the functionality of the software. We must consider that the architecture should be balanced. Architecture is useful, and it can be developed in many ways, it does not have to be in one and only way.

sábado, 26 de enero de 2019

LAYING THE FOUNDATIONS OF SOFTWARE DESIGN


LAYING THE FOUNDATIONS OF SOFTWARE DESIGN

I believe the comparison between the architects who design buildings is close enough to architects that design software. Because both works carefully and methodically during the process of design, both have requirements, construct methods, maintain their work, they care about aesthetics and so on.

This chapter made us reason about the system without the necessity of understanding how every single individual part work on the system and show us how system should be extended over time.
We should be aware that in many projects we must specify hardware components, in some systems the number of processors between them might be an architectural issue, architecture also describe specific algorithms or data structures.

I didn´t see software in different views such as conceptual view, implementation view, process view and deployment view before I read this chapter.

It is important to know that system architecture is used to validate what is going to be built, communicate the design to all interested parties and discriminate (which means to help us make decisions).

We must keep in mind that a good architecture is simplicity and needs to be comprehensible.
There are some types of architectures like spaghetti ball architecture, which is a messy, uncontrollable, unmanageable morass of interwoven gloop architecture or Lasagne, which is several distinct layers, arranged one on top of another. There is another type called cannelloni, which is good conduit for its contents, suits situations very well.

A client/server type can be the Gemelli, which is to complementary strands woven tightly together. In this type of architectures, the server provides well-defined services to clients. In the other hand, clients consume a server´s services. This is also known as a two tier architecture, and it is very common in development world

sábado, 19 de enero de 2019

MOON MACHINES


Thinking about just arriving to the moon is incredible, but the fact that human could do it, is more impressive. The first thing I asked to myself was: What did they think about wanting to reach the moon? In that year one would not think that there was enough technology to build a rocket that reached the moon. People could think “This project would be accomplished maybe in 10 years” but it is very incredible how half a million people worked in all these machines in a very short period. With this documentary we can see how impressive the MIT research is, and how they can develop technology for a specific objective.

We can see a lot of components that were created to build something bigger, and everyone was working on a component. When we see the huge computers, we can think as they, how the hell someone will put these monsters into a spacecraft? For me, Hal Laning (who solved this problem) was a genius. It is impressive how he made a better approach to how computers manage the tasks.

When I listen, that software was an unknown concept, I only thought “How can they make something huge when the term software was recently defined?” Writing the programs by hand should be a tedious task and should take to much time. The memory issue should be a very difficult issue, because the disks were fragile and with no much memory. But the solution was awesome, the rope memory is something I didn´t know. In that time having an error was fatal, because it could consume too much time to fix it and run the program again, and obviously should cost a lot.

In general, I think that this project was very huge, and the astronauts should be very prepared to manage and know all that systems and even more when they lost communication with earth

miércoles, 16 de enero de 2019

THIS IS ME

"Hello there", my name is Sergio Adrian González Hidalgo,but I prefer to be called Adrian. I am studying the eighth semester of major in Computer Science at Tecnológico de Monterrey Campus Estado de México.

I am currently working as a Junior Consultant for DGA Consulting Technology developing Business Intelligence apps for Grupo Bimbo. 

From this course, I expect to learn the structure and the importance of s/w design & architecture and try to apply it to my daily life as student or at my job. I also want to improve my programming skills and find other ways to solve problems.
My hobbies are:
  • Painting: I have painted with watercolors, chalk pastel, colors, and acrylic paint. I prefer to paint movie characters.
  • Watch movies: I love going to the cinema. I usually go twice a week if the school and my job allows me to do so. My favourite genre is the suspense. One of my current favorite directors is Edgar Wright, I enjoyed Baby Driver a lot. My favourites movies are:

  1. A Star is Born
  2. Christopher Robin
  3. Watchmen
  4. Avengers:Infinity War 
  5. Star Wars (All of them)
  6. Lord of the rings
  7. Psicosis
  8. Baby Driver

  • Play Videogames: I have played videogames since I was a kid, I mainly enjoy shooter videogames because I consider myself good at them. One of my previous dreams was to become a profesional gamer.
  • I don´t watch series because I don´t like to wait for another season.