It is common practice not to like Windows. But, as a rule, phrase: “I haven't read the book but still condemn it” describes this situation well. Despite the tendency of not like Windows, there are still some things that are implemented well. I’d like to tell you about one of them.
I’ll review the embedded into OS implementation of the lock-free stack and its performance comparison with the cross-platform analogues.
The implementation of non-blocking stack on the basis of a singly linked list (Interlocked Singly Linked Lists, SList), has been available in WinAPI for quite a while. Operations on such list initializing and stack primitives over it have been implemented. Without going into details of implementing the SLists, the Microsoft just say that they use some non-blocking algorithm in order to implement atomic synchronization, increase performance and get rid of lock problems.
The aim of this article is to tell about a programming language Go (Golang) to those developers, who are interested in it, but haven’t risked studying it. The story will be told on the basis of a real sentence that represents RESTful API web-service.
I had a task to develop a backend to the mobile phone. The service is quite simple. It’s a mobile application, which shows posts of the users that are near the current location. Users can leave their comments to the posts and they can be commented as well. It’s like an original geo-forum.
I wanted to use the Golang in some serious projects. The choice was obvious. This language is extremely suitable for such tasks.
Main Golang advantages:
- Simple and clear syntax. It makes code writing a pleasant task.
- Static typing. Allows avoiding mistakes, made inadvertently. Simplifies the code reading and understanding. Makes the code unambiguous.
- Speed and compilation. Go performs much better than other scripting languages, while consuming less memory. The entire project is compiled into one binary file, without dependencies. And don’t worry about memory management since there’s a garbage collector.
- Step away from the OOP. There are no classes in the language, but there are data structures with methods. Inheritance is changed by an embedding mechanism. There are interfaces that don’t need to be completely implemented. You just need to implement the interface methods.
- Concurrency. Concurrent computing made easy, smart and without a headache. Go routines (something like threads) are light and don’t consume much memory.
- A well-stocked standard library. The language has everything necessary for the web-development and even more. The amount of exterior libraries grows all the time. Besides, you can use C & C++ libraries.
- Possibility to write in functional style. There are closures and anonymous functions in the language. Functions are the first-order objects. They can be transferred as arguments and used ad data types.
- Trustworthy Founding Fathers and a strong community. Rob Pike, Ken Thompson and Robert Griesemer stood at the origins of the language. Now it has a strong community and constantly develops.
- Open Source
- Charming mascot
We all remember the classical explanation about the indexes in the database and how they make the task easier to find the right lines. I'm sure most of you visualizes something like this:
It becomes clear right away that it takes much less effort to find two or three right lines throughout the data. It is brilliant, easy, and clear.
Personally, I always thought that there is no room for any improvement regarding this method until I got familiar with the clustered indexes. It turned out that the non-clustered indexes are not that perfect as I though.
So here are some questions: What is exactly a clustered index? Why is it better than the non-clustered one? What’s going on with it in MySQL?
Hi to everyone!
Simkl, a leading developer of innovative services and products for IM platforms, has recently launched a new website design and also unveiled a new software version of Skype recording service with cloud storage. The new application IM Chat & Voice Recorder V3.0 for recording Skype audio calls is for use by corporate monitoring agencies, parents concerned with the safety of their children online and all Skype users who want to gain instant and direct access to all voice and text recordings, without worrying about high costs, restrictions or service limitations.
Many people believe that software testing is the search for the bugs. Sometimes, I say to testers, "Do not try to find as many errors as possible, try to miss as less as possible!” and they do not understand me. What's the difference?
There is a huge difference! In this article I want to tell you about that difference, and what tools you need to use for a useful troubleshooting.
What is troubleshooting?
This article describes the advanced OpenSSH features, which can greatly simplify the lives of system administrators and programmers who would like to use Secure SHell. Unlike most manuals, which explain only keys and L/D/R options, I tried to gather all the interesting features, which SSH has to offer.
Warning: The article is very long, but I have decided not to cut it into the pieces.
Table of contents:
- Key management
- Copying files over SSH
- Stream forwarding of I/O
- Mounting a remote FS using SSH
- Remote code execution
- Aliases and options for connections to .ssh / config
- Default options
- X-server forwarding
- SSH as a socks-proxy
- Port forwarding - direct and reverse
- Reverse socks-proxy
- Tunneling L2/L3 traffic
- Authorization agent forwarding
- SSH through SSH tunnel
- Untrusted server
Once it seemed that the movie stunts will be done without stuntmen. However, it's still wrong. The computer animation always uses the motion capture technology to capture the stuntman motion.
Even the the most advanced blockbusters to make the animation that exceeds the stuntman capabilities when shooting motion capture use the steel ropes, trampolines and other tricks. Is the animation possibility limited to that?
How often do you have to see the Blue Screen of Death Windows (BSoD)? BSoD can occur in the different situations, for example, in the process of loading the operating system or during working with the OS. How do you determine what caused the occurrence of BSoD and fix this problem? The OS of Windows is capable to store a memory dump when an error occurs, and the system administrator can analyze the data dump and find the cause of BSoD.
There are two types of memory dumps, such as a minidump and a full dump. Depending on your operating system, it can store the full or small dumps, or take no actions when an error occurs.
The minidump is located in %systemroot%\minidump, and it has a name like Minixxxxxx-xx.dmp.
The full dump is located in %systemroot%, and it has a name like Memory.dmp.
It all started as a simple task to download through 100 megabit network large amounts of data using rsync. The question arose whether it is possible to accelerate this process. Top utility showed that the encryption takes no more than 10 percent of the CPU in the source server, so it was decided to try to compress the data. Then it was unclear to me if there will be enough CPU performance to package data with the necessary speed, therefore there was set the smallest level of compression, namely it was used the flag - compress-level = 1 for rsync. It turned out that the CPU loading does not exceed 65%, namely there was enough CPU performance at that downloading speed of data has increased slightly.
After that, the question arose about the applicability of the analysis of accepted compression software for transferring large amounts of data over the network.
The database backup always has to be adjusted for the existing projects directly to the live production servers.
This situation is easily explained. At the beginning any project is empty and there is simply nothing to copy. In the phase of rapid development the heads of a few developers are busy working on the project and fixing critical bugs with the deadline a day before yesterday. And only when the project has reached its ultimate point, there comes the awareness that the main value of the system is accumulated database, and its failure would be a disaster.
This article is for people whose projects have already reached this point, but they haven’t been dumped on enough.