background preloader

Computing nuts'n'bolts

Facebook Twitter

Go & Assembly. Windows with C++ - The Evolution of Threads and I/O in Windows. When starting a new project, do you ask yourself whether your program will be compute-bound or I/O-bound?

Windows with C++ - The Evolution of Threads and I/O in Windows

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. Alternatively, your code might spend most of its time waiting for stuff to happen, for data to arrive over the network, a user to click on something or perform some complex six-fingered gesture.

In this case, the threads in your program aren’t doing very much. Threads, of course, provide no direct value whatsoever to the user. 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.

The Early History Of Smalltalk

Kay Apple Computer 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. Understanding C by learning assembly. Last time, Alan showed how to use GDB as a tool to learn C.

Understanding C by learning assembly

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. PE101 - corkami - Portable Executable 101 - a windows executable walkthrough - reverse engineering experiments and documentations. How do debuggers keep track of the threads in your program? at time to bleed by Joe Damato. 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.

How do debuggers keep track of the threads in your program? at time to bleed by Joe Damato

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. Software breakpoints It’s important to begin first by examining how software breakpoints work. A debugger sets a software breakpoint by using the ptrace system call to write a special instruction into a target process’ address space. Java Tuning in a Nutshell - Part 1. While delivering a training recently, I got a request to put together a JVM tuning cheat sheet.

Java Tuning in a Nutshell - Part 1

Given the 50+ parameters available on the Sun hotspot, this request is understandable. The diagram below is what I came up with. 15 Key Resources to Learn Django - Yipit Django Blog. Learning DjangoLearning Python and Django is easy if you have the right resources at your fingertips.

15 Key Resources to Learn Django - Yipit Django Blog

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: Comparing Python to Other Languages If you know another programming language already, you can easily leverage that knowledge by finding out the differences between Python and that other language, and then by focusing in on learning those differences. 1. 2.

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).

Reading List on Big Data

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! The Great Disk Drive in the Sky: How Web giants store big—and we mean big—data.

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.

The Great Disk Drive in the Sky: How Web giants store big—and we mean big—data

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. That's not something that Google could pull off with an off-the-shelf storage architecture.

And the same goes for other Web and cloud computing giants running hyper-scale data centers, such as Amazon and Facebook. The problem isn't simply an issue of disk read and write speeds. Then there's the cost of scaling up storage conventionally. 64 and IA-32 Architectures Software Developer Manuals.

Microsoft DLR

Understanding Memory. Our context for this discussion is the AICT Linux Cluster, which runs 64-bit GNU/Linux on AMD Opteron hardware. .

Understanding Memory

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.