One of my favorite parts about Go is its unwavering focus on utility. Sometimes we place so much emphasis on language design that we forget all the other things programming involves. For example: Go's compiler is fast Go comes with a robust standard library Go works on a multitude of platforms Go comes with a complete set of documentation available from the command line / a local web server / the internet All Go code is statically compiled so deployment is trivial The entirety of the Go source code is available for perusal in an easy format online (like this) Go has a well defined (and documented) grammar for parsing. Go & Assembly
When starting a new project, do you ask yourself whether your program will be compute-bound or I/O-bound? You should. I’ve found that in most cases it’s either one or the other. You might be working on an analytics library that’s handed a pile of data and keeps a bunch of processors busy while crunching it all down to a set of aggregates. Windows with C++ - The Evolution of Threads and I/O in Windows
This is a demonstration of how simple and enjoyable small JITs (just-in-time compilers) can be. The word "JIT" tends to invoke an image of deepest wizardry, something that only teams of the most hard-core compiler guys would ever dream of creating. It makes you think of the JVM or .NET, very large runtimes with hundreds of thousands of lines of code. You never see "Hello, World!" Josh Haberman: Hello, JIT World: The Joy of Simple JITs
Fast IP Routing with LC-Tries
The Early History Of Smalltalk original pdf / make corrections Alan C. Kay Apple Computer firstname.lastname@example.org.Internet# Permission to copy without fee all or part of this material is granted provided that the copies are not made or distributed for direct commercial advantage, the ACM copyright notice and the title of the publication and its date appear, and notice is given that copying is by permission of the Association for Computing Machinery. To copy otherwise, or to republish, requires a fee and/or specific permission.
Last time, Alan showed how to use GDB as a tool to learn C. Today I want to go one step further and use GDB to help us understand assembly as well. Abstraction layers are great tools for building things, but they can sometimes get in the way of learning. My goal in this post is to convince you that in order to rigorously understand C, we must also understand the assembly that our C compiler generates. I'll do this by showing you how to disassemble and read a simple program with GDB, and then we'll use GDB and our knowledge of assembly to understand how static local variables work in C. Understanding C by learning assembly - Blog - Hacker School
<< index Android/Java/x86/... opcodes tables PDF tricks Portable Executable x86 oddities This graphic is a walkthrough of a simple Windows Portable Executable (download sources and binary here), that shows its dissected structure and explains how it's loaded by the operating system. order a print this analyzed PE file was entirely written by hand to be concise (standard PEs contain more informations that are not essential for such a first introduction). You can download the poster, print it, distribute it, or even modify it (with attribution). PE101 - corkami - Portable Executable 101 - a windows executable walkthrough - reverse engineering experiments and documentations
If you enjoy this article, subscribe (via RSS or e-mail) and follow me on twitter. tl;dr This post describes the relatively undocumented API for debuggers (or other low level programs) that can be used to enumerate the existing threads in a process and receive asynchronous notifications when threads are created or destroyed. This API also provides asynchronous notifications of other interesting thread-related events and feels very similar to the interface exposed by libdl for notifying debuggers when libraries are loaded dynamically at run time. amd64 and gnu syntax As usual, everything below refers to amd64 unless otherwise noted. How do debuggers keep track of the threads in your program? at time to bleed by Joe Damato
Java Tuning in a Nutshell - Part 1 While delivering a training recently, I got a request to put together a JVM tuning cheat sheet. Given the 50+ parameters available on the Sun hotspot, this request is understandable. The diagram below is what I came up with. I’ve tried to narrow down the most important flags that will solve 80% of JVM performance needs with 20% of the tuning effort.
Learning DjangoLearning Python and Django is easy if you have the right resources at your fingertips. Coming from pretty much only having studied programming in school, I started working as a developer at Yipit with almost no web programming experience. In a little fewer than ten weeks, I’ve become comfortable navigating and making large changes to the whole Python/Django application code as well as contributing new features (interested in learning Django at Yipit? Join us!). While the learning process wasn’t gut-wrenching, I certainly ran into some hefty roadblocks that would have been almost insurmountable had coworkers not pointed me to the resources below: 15 Key Resources to Learn Django - Yipit Django Blog
Reading List on Big Data This is purely theoretical blog post to summarize my last few days of studies into the big data (which were triggered by one homeless guy and sequence of highly unprobable events that actually took place). No fancy intro, just assuming that dealing with big data processing is really cool or at least has an outstanding financial reward potential (given the trajectory taken by modern IT and economics). Current Approach at Lokad Or at least - simple part of it, that is not touched yet by secret fairy dust of our outstanding analytics team. In short, big data is bulky, complex, requires a lot of CPU and does not fit in RAM.
Welcome to the Parallel Jungle!
Consider the tech it takes to back the search box on Google's home page: behind the algorithms, the cached search terms, and the other features that spring to life as you type in a query sits a data store that essentially contains a full-text snapshot of most of the Web. While you and thousands of other people are simultaneously submitting searches, that snapshot is constantly being updated with a firehose of changes. At the same time, the data is being processed by thousands of individual server processes, each doing everything from figuring out which contextual ads you will be served to determining in what order to cough up search results. The Great Disk Drive in the Sky: How Web giants store big—and we mean big—data
Our context for this discussion is the AICT Linux Cluster, which runs 64-bit GNU/Linux on AMD Opteron hardware. . Programs and Processes A program's page table is one component of its execution context. Other components include its current working directory, list of open files, environment (list of environment variables), and so on. Together, they constitute what is known as a process or task. Understanding Memory