Skip to content

Phoenix

From the ashes at the end of the world, the mighty bird rises once again as it always will.

It’s been a long while. Many drafts still linger around here and many more things I’ve done in almost 2 years. I’m planning to reopen soon… I’ll try to keep you posted.

Advertisements

Something faster than light?

We live in a place and time in which almost everyone knows or hears sometimes about some scientific concepts. You can see almost everyone knowing something about Einstein or Quantum Mechanics. One of the very established scientific concepts around is the speed of light, which everyone knows is about 300 000 km/s and that nothing can travel faster than that.

In a scientific institution also well known by general population for hosting the Large Hadron Collider (LHC), the  European Organization for Nuclear Research (CERN), one of the experiments called Oscillation Project with Emulsion-tRacking Apparatus (OPERA) has delivered some astonishing results. The OPERA experiment was used to measure the speed of some particles called neutrinos (among other things) and they found out the neutrinos were travelling faster than the speed of light.

It may seem nothing but it’s not. If you already know why, follow the links. If you don’t know why this is a big thing, keep reading.

Some resources for your interest:

 

Now, what’s so important about the speed of light? Why couldn’t something be faster than light itself? Let’s see a short pointing out.

The speed of light in the vacuum, usually noted c, is a physical constant. It’s considered to be the maximum speed at which energy, matter and information can travel. It’s also the speed of massless particles and associated radiation (light, for example). Such particles and waves travel at it regardless of the inertial frame of reference for the observer. Also, in the theory of relativity it interrelates space and time.

Source: Wikipedia http://en.wikipedia.org/wiki/Speed_of_light (23/09/2011)

In the excerpt from Wikipedia I marked two sentences. The first one relates to the mass of particles. The conclusion is that for a particle to travel at the speed of light, the particle has to have no mass so a particle that travels faster than light should have negative mass. No particle has been found with negative mass (maybe neutrinos?).

The second highlight simply points that the theory of relativity is wrong. That’s because the whole theory is based on a postulate that states that nothing can go faster than light.

There’s much more reasons related with these statements, including a supposition that faster than light travel would mean the possibility to travel (send information) back in time.

If you have some more information please comment.

Programming your résumé

Everyone has to do or update a résumé once in a while. I haven’t had the need to do it lots of times but even I with my little experience have had to choose what to put in a certain résumé. Depending on the job you are applying to, you need to highlight some aspects of your skills or experience which means you may end up with 3 or 4 résumés with somewhat different layout and maybe even some different information. If you are going to update them a year later you may have lost some of the files and some of your history, and then you have to update the 3 or 4 résumés. Isn’t there a better way to do that?

The last time I was starting to prepare my résumé and trying to create it in the best possible way I found The Europass Curriculum Vitae (CV) webpage which hosts an online application to fill your CV and export it as PDF or XML. I tried to see how the XML was designed and liked some parts of the idea but I found it could be much better to have the app yourself and be able to use the layout you prefer instead of being tied to their PDF generator.

So, I’m willing to write an application to write résumés. The idea is to store a database with all information and be able to generate a résumé file in a few clicks. The application will be written in Python, because it’s cross-platform, popular, pretty fast and I want to learn Python. The front-end, if there’s a graphical one, will be developed with Qt bindings for Python and the database will be either XML file or SQLite database. The generated résumés should be either LaTeX or PDF or OpenDocument… I don’t know yet, the more the merrier.

So, the workflow is the following:

  • Create a Database
  • Store your information
  • Select which information will be shown in your résumé (may be saved so you don’t have to fill it again)
  • Select the layout of your résumé/CV
  • Select the format your résumé will be exported to
  • Generate the final résumé

I’m thinking about using a tag system for every piece of information to decide if it should be the highlighted or not. For example, you use a technical tag on your computer skills, if you select the technical for emphasis in the 3rd stage of the workflow then your technical skills will be highlighted in the way the layout uses to this highlighting (positioning it at the top, using bolds, italics…). All tags should be user-defined and the user should be able to create and share its own layouts.

Another thing I have to think about is language support. I have my 2 résumés (technical and academical) both in English and in Spanish and I want to support users to have résumés in as many languages as they need.

I want to inspire myself in LinkedIn’s interface and the Europass people (link above). If you have any suggestions please post them in a comment. I’ll keep you updated about my progress in the design and implementation of the project.

Project Euler

In 2001, Colin Hughes, a British Maths teacher, started to post math computation problems for people to solve. This grew into a big international community of math enthusiasts and programmers, and right now is used by some people as a method to learn or improve in a certain programming language. As it says in their web:

What is Project Euler?

Project Euler is a series of challenging mathematical/computer programming problems that will require more than just mathematical insights to solve. Although mathematics will help you arrive at elegant and efficient methods, the use of a computer and programming skills will be required to solve most problems.

The motivation for starting Project Euler, and its continuation, is to provide a platform for the inquiring mind to delve into unfamiliar areas and learn new concepts in a fun and recreational context.

The problems grow in difficulty and start to require fast and improved methods for handling data structures or algorithms. I started trying to solve the problems and made my way to the 12th problem easily and I’m struggling with a couple problems. I have learnt a lot of programming and C++ since I started trying to solve this problems. You can see the sources of my solutions in my github: https://github.com/miguelbernadi/ProjectEuler . Enjoy your maths!

Additionally, this link to an article from someone who learned to enjoy programming thanks to Project Euler: How I Failed, Failed, and Finally Succeeded at Learning How to Code

Writing Science

Today I’m not going to speak about how to write a scientific report, ways, nomenclature, paper structure… which one day I may speak about. Today I want to speak about the tools used for easing the writing, not by easing the content, but by easing the formatting.

As a student in a scientific career and as researcher beginner, I’ve been reading published scientific articles and writing reports for classes in the same fashion. Lots of scientific publications use LaTeX and GNUPlot and other common tools for easing their writing but as students we only use MS’s Word and Excel. It’s strange to me that I didn’t learn about this scientific professional tools by my teachers and I ended up learning about them by the internet and my older brother (who has some kind of Physics Degree and some strange letters at the end of his name 🙂 ).

LaTeX

So, what’s that LaTeX thing with that fancy way of writing? For those too lazy to follow the wikipedia link above, it’s a sort of meta-language and post-process application that turns plain text with some marks into a paper to publish in several formats including PDF and PostScript. Ok, now What does that mean? Let’s take a look at a very simple LaTeX document:

\documentclass{article}
\begin{document}
Some text at random.
\end{document}

Let’s look at the meaning of each sentence.

  •  \documentclass specifies the type of document we are writing from the list of templetes (user extendable) that come with the program. The supplied list includes: article, report, book
  • \begin and \end are used to begin and end an environment. In this case the document environment which contains the document. Everything outside the document environment should be settings.

That’s not very impressive, is it? So, why the fuzz? If you ever tried to write mathematical formulae with Word, you know the meaning of pain. At least before last MS Office version (2010) you had a nice interface in which you clicked what you wanted to add and nothing else. In LaTeX you just have to write whatever you want. Let’s expand the example above with another line:

\documentclass{article}
\begin{document}
Some text at random.
\begin{equation}
  F = \sum_{i=0}^n \frac{dp_i}{dt}
\label{Newton2}
\end{equation}
\end{document}

This new text introduces a new environment, equation, which is used for writing mathematical expressions. Also, the expression will be automatically numbered and put on a new line. The \label is an identifier for internal use referencing the equation, in this case Newton’s 2nd Law of movement: Force equals the sum of the variations of moment along time for all particles involved.

I just used this webpage for the formula rendering: http://www.codecogs.com/latex/eqneditor.php You can test your own code there. Also, any greek letter or mathematical symbol you may need can be written by its name, \delta for the non-capital or \Delta for the capitalised letter.

For more information in LaTeX see the Not So Short Introduction to LaTeX.

GNUPlot

GNUPlot is a program for plotting data. Most of the graphics you can find in a scientific article or publication are data plots and data regressions or fittings, which are the main representation tools in experimental sciences. GNUPlot is powerful for beautiful 2D and 3D plots. Also, the plotted graph can be saved in many formats including PNG and Encapsulated PostScript (eps) which is very useful for inclusion in LaTeX documents. Instead of a demonstration like before I’ll let you see the demos on the project’s web: http://www.gnuplot.info/screenshots/index.html

 

There’s a big community for both suites and many people has contributed to them both. You can find lots of LaTeX packages and scripts at the Comprehensive TeX Archive Network (CTAN) and many GNUPlot scripts on GNUPlot webpage.

Versioning Systems

Programming isn’t easy, especially when you are either doing a very big program, working with other people or programming in your spare time because you loose track of your work. And then the questions begin ‘Why did I do that?’, ‘Why is this commented out?’, ‘This function is no longer in the code? When did it get deleted and why?’ and many other, including the common ‘How was this before? Then it worked and now it doesn’t!’.

To avoid those questions and easily keep track of changes Source Control Management (SCM) and Versioning Control Systems (VCS) were invented. Long time ago I read a reasoning of how and why VCS appeared and the reason the latest paradigm in VCS called Distributed Version Control System (DVCS) had been such a success. It’s a shame I’m not able to link you to it, but I’ll try to summarize a few points.

If you are a developer you may have faced this kind of problems and you may have thought about a way to store your changes so you could go back in the development process and recover something you changed. Then, you would have periodically saved your sources into a folder, maybe named with the date or a keyword. Every time you had major changes, you would make a copy of your sources and store them in a new folder of that kind, let’s call it a snapshot. If at some moment you needed to go back in time you would just search for the appropiate folder and check its sources.

After some time doing that, you would start to add a file with notes like, what changes had been made, what were you thinking needed more work and other developer comments to each snapshot, let’s call it manifest . If you saved frequently snapshots you would easily end up without free space on your hard drive, so then you start to compress the folders to save up space.

This is a very reasonable solution, but it’s not really powerful, when it has grown a lot it’s very difficult to check the history because you have to manually inspect all manifests… Basically, VCS does that same thing, simply it’s been designed with tools to easy the search on history, to see diffs of your code and to share your repository with other developers.

Now you should start to grasp how important and useful are VCSs so let’s look at some and their types. We have mainly two VCS families, Centralised VCS (CVCS) and Distributed VCS (DVCS). The oldest one is CVCS like Subversion or cvs among many others and the most famous right now are DVCS like git and Mercurial. The main difference between CVCS and DVCS is that CVCS requires a central server to be accessible to a client for the client to review history or add changes while DVCS works stand-alone.

Why this difference? It may not be obvious but sharing a repository between developers may arise lots of problems. A simple example would be the following: Alice and Bob are working in the same project together and they both have the last copy of their codebase. Now, Alice is working at the same time as Bob, they are working on the same files and doing changes, maybe even to the same file, and they both want to submit their changes. Which changes should the central server accept? If Bob submits his changes before Alice, what happens when Alice wants to submit hers? This tricky question may be solved in various ways but it’s different to solve it in a centralised server than to solve it in every repository inside every developer’s  computer.

This is all for now. I want to add that I personally chose git and I’m fond of it, and recommend you to use it if you are based on a Linux development environment. Other platforms support for git isn’t usually as good. More another time.

Welcome

Hello all.

This is my personal blog. As that I will be writing about my interests and primarily about engineering (chemical), computing, Linux, programming and all related topics. Also some more things. Hope it’s useful to you too.

See you soon.