Declaration of Internet freedom

We believe that a free and open Internet can bring about a better world. To keep the Internet free and open, we call on communities, industries and countries to recognize these principles. We believe that they will help to bring about more creativity, more innovation and more open societies. We are joining an international movement to defend our freedoms because we believe that they are worth fighting for. Let’s discuss these principles ” agree or disagree with them, debate them, translate them, make them your own and broaden the discussion with your community ” as only the Internet can make possible. Join us in keeping the Internet free and open. [You can interact with the following text on reddit, Techdirt, Cheezburger, Github and Rhizome.] Declaration We stand for a free and open Internet. We support transparent and participatory processes for making Internet policy and the establishment of five basic principles: Expression: Don’t censor the Internet. Access: Promote universal access to fast and affordable networks. Openness: Keep the Internet an open network where everyone is free to connect, communicate, write, read, watch, speak, listen, learn, create and innovate. Innovation: Protect the freedom to innovate and create without permission. Don’t block new technologies, and don’t punish innovators for their users’ actions. Privacy: Protect privacy and defend everyone’s ability to control how their data and devices are used. ...

5 de julio de 2012 · 2 min · 227 palabras · Nacho Cano

Radix Sort Revisited

In every decent programmer’s toolbox lies a strange weapon called a Radix Sort. Where does it come from ? Who invented it ? I don’t know. As far as I can remember it was there, fast, easy, effective. Really effective. So unbelievably useful I’ve never really understood why people would want to use something else. The reasons ? Most of the time, they tell me about floats, negative values, and why their new quick-sort code rocks. Enough, I’m tired. Although the standard Radix Sort doesn’t work very well with floating point values, this is something actually very easy to fix. In this little article I will review the standard Radix Sort algorithm, and enhance it so that : it sorts negative floats as well it has reduced complexity for bytes and words it uses temporal coherence it supports sorting on multiple keys ...

5 de julio de 2012 · 1 min · 147 palabras · Nacho Cano

A Gentle Introduction to Algorithm Complexity Analysis

A lot of programmers that make some of the coolest and most useful software today, such as many of the stuff we see on the Internet or use daily, don’t have a theoretical computer science background. They’re still pretty awesome and creative programmers and we thank them for what they build. However, theoretical computer science has its uses and applications and can turn out to be quite practical. In this article, targeted at programmers who know their art but who don’t have any theoretical computer science background, I will present one of the most pragmatic tools of computer science: Big O notation and algorithm complexity analysis. As someone who has worked both in a computer science academic setting and in building production-level software in the industry, this is the tool I have found to be one of the truly useful ones in practice, so I hope after reading this article you can apply it in your own code to make it better. After reading this post, you should be able to understand all the common terms computer scientists use such as ”big O”, ”asymptotic behavior” and ”worst-case analysis”. ...

5 de julio de 2012 · 1 min · 194 palabras · Nacho Cano

tl;drLegal

SKIP THE LICENSE Reading software licenses sucks, so we’ve summarized all of the popular ones for you in a neat at-a-glance format. Just begin typing the name of your license on the frontpage and select from the auto-completing drop-down menu. TL;DR - We summarize software licenses. LET THEM TAKE IT EASY Do you have people using your software? We all hate reading software licenses. Let them take it easy and link them to your license on here. We provide embed and linking options for every license on the site. Next time include a link alongside your license. TL;DR - Link a summary in place of a license. ...

4 de julio de 2012 · 1 min · 109 palabras · Nacho Cano

Ubuntu Manual Project

Primeros pasos con Ubuntu 12.04 es una guía para principiantes del sistema operativo Ubuntu. Se encuentra disponible bajo una licencia de código abierto y su descarga, lectura, modificación y distribución son libres. El manual le ayudará a familiarizarse con tareas cotidianas como navegar por Internet, escuchar música, escanear documentos y mucho más. Al centrarse en instrucciones fáciles de seguir, es adecuado para todos los niveles de experiencia. » ubuntu-manual.org

4 de julio de 2012 · 1 min · 69 palabras · Nacho Cano

Una cebolla que nos puede hacer llorar

El pasado día 26 de junio asistí al evento ”Iniciativas Open Data en España”, atraído sin duda, por los grandes espadas en la materia que son Alberto Abella, Roberto Santos y Victoria Anderica, que además del reconocido prestigio que tienen, llevan años trabajando para que este país sea algo mejor. Como cabía esperar, no me defraudaron en sus intervenciones, que fueron tan correctas como acertadas. Como contrapartida, y diré el pecado, pero no el pecador, tuve que oír de boca de ”expertos” en la materia, estas dos afirmaciones, que me preocuparon y mucho, puesto que pueden afectar muy negativamente a la Ley de Transparencia y su desarrollo posterior: ​a) Si licenciamos los datos públicos con licencias libres, tenemos el problema de las empresas no pueden hacer negocio con ellos. ​b) No se pueden liberar los fondos no sujetos a derechos de autor de bibliotecas y de pinacotecas ya que son entidades culturales y las administraciones públicas tienen que poder cobrar por los datos. ...

1 de julio de 2012 · 1 min · 168 palabras · Nacho Cano

Paper Enigma

Although the Enigma cipher as a whole is quite complex (it’s complexity is comparable to modern cryptographic algorithms) the individual transformations within it are relatively simple. In fact, they are simple enough that you can decipher an Enigma message with just a paper model. Our model is three-dimensional, to illustrate the wiring of a real Enigma machine. It needs only common household items to construct, and is completely compatible with all settings of a real Enigma machine (models I, M1, M2 and M3). ...

1 de julio de 2012 · 1 min · 85 palabras · Nacho Cano

GNU Make in Detail for Beginners

Large projects can contain thousands of lines of code, distributed in multiple source files, written by many developers and arranged in several subdirectories. A project may contain several component divisions. These components may have complex inter-dependencies ” for example, in order to compile component X, you have to first compile Y; in order to compile Y, you have to first compile Z; and so on. For a large project, when a few changes are made to the source, manually recompiling the entire project each time is tedious, error-prone and time-consuming. Make is a solution to these problems. It can be used to specify dependencies between components, so that it will compile components in the order required to satisfy dependencies. An important feature is that when a project is recompiled after a few changes, it will recompile only the files which are changed, and any components that are dependent on it. This saves a lot of time. Make is, therefore, an essential tool for a large software project. Each project needs a Makefile ” a script that describes the project structure, namely, the source code files, the dependencies between them, compiler arguments, and how to produce the target output (normally, one or more executables). Whenever the make command is executed, the Makefile in the current working directory is interpreted, and the instructions executed to produce the target outputs. The Makefile contains a collection of rules, macros, variable assignments, etc. (’Makefile’ or ’makefile’ are both acceptable.) ...

28 de junio de 2012 · 2 min · 249 palabras · Nacho Cano

El algoritmo de Dios

El algoritmo de Dios es un término que surgió en la búsqueda de aquel algoritmo que indicara los pasos mínimos que resuelven un cubo de Rubik cualquiera. El término se usa profusamente, no sólo para el cubo de Rubik. Mucho antes de conocer dicho término, cuando me encontraba con diversos tipos de problemas, ya me asaltaba recurrentemente una pregunta irrelevante (para el caso que me ocupaba), pero que espero te haga pensar un poco en la importancia de algunas cuestiones que quizás no conoces: ”¿Qué solución daría Dios si fuera él quien resolviera el problema?” Lo más sorprendente quizás, es que ”las soluciones de Dios” no sólo no están vedadas al intelecto humano, sino que son numerosas y prolíficas. Veamosló. ...

28 de junio de 2012 · 1 min · 124 palabras · Nacho Cano

An Introduction to Lock-Free Programming

Lock-free programming is a challenge, not just because of the complexity of the task itself, but because of how difficult it can be to penetrate the subject in the first place. I was fortunate in that my first introduction to lock-free (also known as lockless) programming was Bruce Dawson’s excellent and comprehensive white paper, Lockless Programming Considerations. And like many, I’ve had the occasion to put Bruce’s advice into practice developing and debugging lock-free code on platforms such as the Xbox 360. Since then, a lot of good material has been written, ranging from abstract theory and proofs of correctness to practical examples and hardware details. I’ll leave a list of references in the footnotes. At times, the information in one source may appear orthogonal to other sources: For instance, some material assumes sequential consistency, and thus sidesteps the memory ordering issues which typically plague lock-free C/C++ code. The new C++11 atomic library standard throws another wrench into the works, challenging the way many of us express lock-free algorithms. In this post, I’d like to re-introduce lock-free programming, first by defining it, then by distilling most of the information down to a few key concepts. I’ll show how those concepts relate to one another using flowcharts, then we’ll dip our toes into the details a little bit. At a minimum, any programmer who dives into lock-free programming should already understand how to write correct multithreaded code using mutexes, and other high-level synchronization objects such as semaphores and events. ...

27 de junio de 2012 · 2 min · 250 palabras · Nacho Cano