Resume

Personal Information

Name: Alexander (Sasha) Sandler

Birth date: 03/11/1979

Email: alex@alexonlinux.com

Summary

  • Linux and Linux kernel expert.
  • Ten years of professional software engineering.
  • Exceptionally experienced with C/C++, Python, Assembler and other programming languages/environments.
  • Exceptionally strong background in Linux system administration and Linux internals.
  • Exceptionally strong background in multi-threaded applications.
  • Exceptionally strong background in x86 and other computer architectures.
  • Object Oriented Design and implementation background.

Education

03/1992 – 07/1997: Graduated high school.

10/1998 – 04/2000: Student for BS.c in Education in Technology and Science in Technion.

09/2000 – Present: Student for BS.c in Computer Science in Open University of Israel.

Courses

IBM LX20 – Linux kernel internals.

Experience

02/2010  Present: Senior Software Engineer at Dell.

12/2009 – 01/2010: Fabrix TV.
11/2009 – 12/2009: Exanet LTD (acquired by Dell).

08/2007 – 11/2009: Software engineer at PeerApp R&D LTD.
Developed Linux kernel application for inspecting and fast forwarding network traffic.

06/2006 – 08/2007: Software engineer at ScaleMP LTD.
Developed logging over InfiniBand facility. Maintained company’s vSMP product series.

09/2005 – 06/2006: Software engineer at Metalink Broadband LTD.
Developed Linux device driver for company’s wireless 802.11n chipset, for x86 and ARM processor architectures. As part of the position developed software for reference board based on embedded Linux platform.

11/2000 – 09/2005: Senior software engineer at Storage Networking Technologies LTD.
Developed stack of block device drivers, for Linux, that implement volume manager with snapshot and mirroring capabilities. Ported the drivers from kernel 2.2 to kernel 2.4 and then to kernel 2.6. Adapted the drivers to work on Itanium and PPC64 processor architectures. Ported the drivers to Novell Netware.

04/2000 – 11/2000: Software engineer at Verysafe LTD.
Developed SNMP based management system for company’s server farm. Developed module for Apache web server.

01/2000 – 04/2000: Software engineer at SentryCom LTD.
Developed screen saver for MS. Windows. Developed voice powered logon systems for MS. Windows 2000/XP.

Off duty Experience

12/2007 – Present: www.alexonlinux.com

Personal Skills

  • Self directed. Able to work both independently and as part of a team.
  • Excellent communicational, interpersonal and organizational skills.
  • High self education ability.

Languages

Excellent Hebrew and English. Russian is mother language.

Recommendations

Recommendations are available upon request.

Useful Linux Networking Commands

This article describes most useful Linux networking commands, as simple as it sounds.

The truth is that I am writing this article more for myself. I am rarely doing complex networking configurations. As a result, when I have to configure something, I often forget commands and their syntax. Often it takes hours to find out that the only reason why certain route command was not working is because I forgot to add some netmask parameter. Hence, this article.

At the moment I only have few commands described. I’ll add stuff at a time. In the meantime, enjoy it and if you have anything to add, please fill free to email me. My email address is alexander.sandler@gmail.com.

Table of Contents

ifconfigBACK TO TOC

This command is number one command in the alphabet of Linux networking. It configures network interfaces. It features include

  • Turning certain network interface on and off.
  • Changing interface IP address.
  • Changing netmask, MTU and other network parameters of the interface.
  • Putting interface into promiscuous mode.

Turn on/off network interfaceBACK TO TOC

Here are few simplest use scenarios.

ifconfig <interface name> down

Will turn off specified network interface. Similarly

ifconfig <interface name> up

Will turn specified network interface on.

Change interface IP addressBACK TO TOC

ifconfig <network interface> <ip address>

Will turn specified network interface on and give it a IP address.

Add second IP address to an interfaceBACK TO TOC

Another nice thing that you can do with ifconfig is specifying additional IP address for one of the interfaces. Think about it for a second. Why single physical interface should be limited to single IP address? What stops us from giving single interface several different IP addresses? And of course ifconfig is the tool that let you do the job.

As far as semantics concerned, it seems that ifconfig actually creates a new “virtual” interface. Yet, it is simply assigning a new IP address to given network interface. Here’s an example of doing so. Assuming we already have an interface named eth0, following command will create interface named eth0:0 and assign an IP address to it.

ifconfig eth0:0 <ip address>

arpBACK TO TOC

This command is more advanced, yet still exceptionally useful when configuring networks. It observes and alters so called ARP table. ARP stands for Address Resolution Protocol. ARP table defines relationships between MAC address and IP address. In particular, for every IP address, it defines appropriate MAC address. This used when computer decides to send packet to certain IP address and it has to find MAC address for the IP address. This is when ARP table becomes useful. Computer checks if IP address is in the table and if so picks MAC address from it. If IP address is not in the table, computer uses ARP protocol to find it. arp command used to observe and manually alter ARP table entries.

List ARP tableBACK TO TOC

In its basic form, when invoked, it prints content of the ARP table.

$ arp
Address             HWtype  HWaddress           Flags Mask       Iface
192.168.2.174       ether   00:11:25:9B:7F:74   C                eth0
192.168.2.2         ether   00:17:65:C7:10:45   C                eth0

In this example, ARP table on my computer contains two entries. Note the HWtype column. It is common understanding that MAC address refers to Ethernet MAC address, but its not necessarily true. There are many L2 protocols and some have their own MAC address structure. For more information about L2 and protocols that belong to this layer see OSI model on Wikipedia.

Add new ARP entryBACK TO TOC

There are two things that you would probably like to do with ARP table; add and remove entries. This is how you add a new entry.

arp -s <ip address> <hardware address>

Again, hardware address is mostly Ethernet MAC address, but it is not always necessarily true.

Delete ARP entryBACK TO TOC

arp -d <ip address>
arp -d <hardware address>

Both forms of this command delete the specified ARP address. First uses hostname or IP address to identify the ARP entry that we would like to delete. Second uses hardware address to identify appropriate ARP entry.

routeBACK TO TOC

This is another one of the most useful commands available for you in your toolbox. It manages routes between your computer and other computers and networks.

Configure default gatewayBACK TO TOC

One of the most important task that you can accomplish with this command is setting default gateway. This is how you do it.

route add default gw <ip address>

Here, ip address is the address of the default gateway.

Add routing table entry for specified networkBACK TO TOC

With following command you can add a static route to either a network or a specified host. This is how you do it.

route add -net <network address> netmask <netmask> gw <ip address>
route add -net <network address> netmask <netmask> dev <network interface>

These two commands add a new static route to a network. The network address should end with 0 e.g 192.168.10.0. Otherwise route will return an error. Another way to specify the sub-network is by using the CIDR notation. In this case you don’t need to specify the netmask. For example

route add -net 192.168.101.0/24 gw 192.168.102.1

Note that in both cases you need a complete network specifications – either using netmask or using CIDR notation.

Using network interface name instead of gatewayBACK TO TOC

Interesting thing to notice here is that you can specify that packets to given IP address should be transmitted via certain network interface. This works with conjunction with ARP table. For example.

route add -net 192.168.101.0/24 dev eth1

Add routing table entry for specified hostBACK TO TOC

Another kind of routes that you can add with route command is route to certain host. This is how you do it.

route add -host <ip address> gw <gateway>
route add -host <ip address> dev <network interface>

The principle is the same, although instead of specifying the network you specify a single host. For example.

route add -host 192.168.100.100 gw 192.168.102.5

Removing routing table entriesBACK TO TOC

When you want to remove a route, you can do it by specifying del instead of add. Here are several examples of commands removing routes.

route del -host 192.168.100.100
route del -net 192.168.101.0/24
route del -net 192.168.101.0 netmask 255.255.255.0

Note that when removing a route, there is no need to specify the gateway or the network interface that being used to reach that network or a host. The network or a host identifiers are enough to remove the route.

netstatBACK TO TOC

List listening sockets and associated port numbers and process PIDBACK TO TOC

This is a very powerful information providing tool. It can show lots of network related information. For instance, you would like to know if certain process is listening on a certain port. Easy!

$ netstat -l -p -n

Will print list of sockets being listened to accompanied by a process PID and name and port number that being listened to. Note that you need super-user rights to see the list PIDs. In the command above, -l causes netstat to list sockets that being listened to – i.e. servers running on the computer and waiting for someone to connect to them from outside. -p causes netstat to produce names of the processes and their PID and -n causes netstat to use numeric values for port numbers, instead of numbers from /etc/protocols.

Generate statistics aboutBACK TO TOC

Another nice thing that netstat can do for you is to generate statistics about traffic your Linux box received and transmitted. The catch here is that statistics printed per protocol. I.e. you can see number of ICMP packets received. You can do it with -i option.

$ netstat -i

ethtoolBACK TO TOC

What driver is responsible for certain network interfaceBACK TO TOC

Have you ever wondered what is the name of the driver powering certain network interface. Answering this question can be a real pain in the butt. Luckily, ethtool is here to answer.

$ ethtool -i <interface name>

Will tell you what driver is behind given interface, it’s version and firmware version. Note that running ethtool requires superuser privileges.

Figure out interface link speedBACK TO TOC

Another handy thing you can do with ethtool is to see the speed of the network interface. You can do it with…

$ ethtool <interface name>

Written Stuff

This is the stuff I’ve written.

atomicMultithreaded simple data type access and atomic variables
In this article I am trying to answer a question. What is the most efficient, yet safe way of accessing simple data type variables from two or more threads. I.e. how to change a variable from two threads at the same time, without tainting its value?

How inheritance, encapsulation and polymorphism work in C++?
In this article, I am explaining how the three whales of OOP implemented in C++. How encapsulation works. How overloading of methods works. What is the structure of C++ object compared to C structure. How polymorphism works. What’s the structure of virtual methods table and how inheritance affects it. And many other things. Hope you will find it interesting.

32-bits vs. 64-bits computers, the QA
This article describes the difference between the two. Does getting 64-bit support really worth the time and the effort and perhaps the money?

Swap vs. no swap
This article describes how lack of swap partition affects behavior of your Linux system.

Few problems that you may encounter when booting Linux
This article gives solutions to common problems that one may encounter when booting Linux. From faulty service scripts to corrupted initrd, it’s all there.

sed, the missing manual
This article describes sed, an excellent tool that I often use in shell scripts that I write. In the article I explain it’s most common features and also show some often overlooked features.

Aligned vs. unaligned memory access
In this article I review implications of unaligned memory access in programs. Is it really that bad? Read on.

Opening and modifying the initrd
This article explains how to crack up and modify initrd – the initial ram-disk.

tcpdump for Dummies
In this article I how to use tcpdump – another exceptionally powerful tool in my toolbox.

TunnelReverse SSH tunnel or connecting to computer behind NAT router
In this article I explain how to connect to a computer behind NAT router using reverse SSH tunnel. I explain problems involved and how to solve them.

AffinitySMP affinity and proper interrupt handling
This article deals with one of the aspects of system administration and engineering and that is correct interrupt handling.

DebuggerHow debugger works
This  article reveals the secrets behind debuggers and even demonstrates a program that places a breakpoint.

Small Network DiagramUseful Linux Networking Commands
An article that describes several of the most useful Linux networking commands.

Iliad for DummiesIrex Technologies Iliad – More than a year together
This article reviews Irex Technologies Iliad, an eBook reader based on revolutionary e-Ink technology. I am reviewing the device, after using it for over a year.

Bet Oren vs PeerApp

I took these pictures when PeerApp, myself included, were in trip in Bet Oren, near Haifa.

g15dods

Intro

Ok. This is a G15 Applet for DOD:S page – the g15dod page.

  • G15 is a Logitech’s keyboard with additional LCD screen. Screen can be used for wide range of purposes, among them, viewing ingame information and stats.
  • DOD:S is a Day Of Defeat Source game.

Here you’ll find info about g15dods, installation instructions, revision history, etc…

Download

Current Version

Current version is 0.2.6. You can download it here.

Previous Versions

You can download version 0.2.5 from here and version 0.2 from here.

What’s new

What’s new in this version

  1. Several people complained about different issues related to inability to detect Steam installation directory and/or username. In this version, I rewrote the whole installation directory/username detection mechanism. It should be much better now.Special thanks to Mike Olsen from echovoice for helping me with this!!!
  2. This version automatically detects when you switch between steam accounts.

What’s in version 0.2.5

  1. You no longer have to specify DOD:S installation directory. Application detects it automatically.

What’s in version 0.2

Couple of things.

  1. You can now see network traffic info and CPU/MEM usage info. You can switch between these two using buttons (see buttons section below).
  2. You can now reset totals and todays stats using keyboard buttons (again, see Buttons section below).
  3. Fixed couple of bugs, such as, you no longer can run several instances of the application at the same time :-)
  4. Added a lot of message boxes in case there is an error.

Preview

g15dods screen shot

Installation

Just run the setup and it will tell you what to do.

Make sure to add “-condebug” parameter to Day Of Defeat: Source launch options (open Steam, goto My Games, right click on Day Of Defeat: Source, enter properties, press “Set launch options” button and write -condebug). This option causes DOD:S to write console log to file. Later, g15dods uses the information written to this file to generate stats.

Uninstalling

Go to your All Programs menu, then to g15dods and press uninstall. Then, you will know what to do :-)

Documentation

Usage

As you can see, applet shows two panes on the screen. Right pane shows game stats. Left pane shows some info that might be useful during the game – current time (!!!) and network stats.

The game stats are:

  1. Your total number of kills and deaths.
  2. Number of kills and deaths since you started the app (basically, since you started the computer).
  3. Number of kills and number of seconds elapsed since from the last you were killed.

When not playing, game stats are hidden.

Configuration dialog

Configuration dialog allows you to reset the stats and to change the DOD:S installation directory. Open configuration dialog, run Logitech LCD manager, choose “G15 DOD:S Applet” from the list and press configure button.

In configuration dialog, no matter what changes you made, always press the OK button to apply. Otherwise, the application will ignore your changes.

As you can guess, setting the “Reset Totals” and “Reset Todays” check boxes, will reset your stats (either totals, todays or both) – but only after pressing the OK button :-D

Buttons

Starting version 0.2 of the application, you can do few nice things with keyboard buttons under the screen.

First (leftmost) button can be used to switch between Network traffic information and CPU/MEM usage information.

Holding down third and fourth buttons for two seconds (and more) will reset total kills and deaths stats and todays kills and deaths respectively.

Known issues

  1. It may complain about some missing DLLs. In case it does, let me know and I’ll help you to solve this problem.
  2. Sometimes, it shows negative netwok traffic values.
  3. You name it 8-)

My Software

This is some of the software projects I created on my spare time.

IDA – Interactive Disassembler Macros Page
This page present IDA macros I’ve written.

SlickEdit LogoSlickEdit Macros Page
Here, I collected few macros for SlickEdit that I find most useful. I hope you’ll find them useful as well.

g15dods icon

g15dods Page
g15dods is a G15 keyboard applet that counts frags in Day Of Defeat Source.

Old About

Here you can find some information about me and this web-site. I am still working on a about this web-site article. It should be ready soon. In the meantime you can see my resume.

stockxpertcom_id137509_size1.jpgMy Resume
This is my resume – CV if you want. It lacks some personal information – I’ll release it upon request.

stockxpertcom_id7862712_size1.jpgAbout this web-site
This page tells the story of this web-site and its predecessors. Hope you’ll find it useful.

Photos

Here I collected some of the most beautiful pictures I took in different places in Israel and in the world.

Rothschild ParkRothschild Park
These pictures are from Rothschild Park in Zihron Yaakov.

TurtlesUtopia Park
I shot these pictures in Utopia park.

TurtlesAlexander River
These pictures are from Alexander river.

HPIM0404.jpgKibbutz Dalia
I took these pictures in Kibbutz Dalia sometime in 2003.

16122007018.jpgBet Oren vs PeerApp
I took these pictures when PeerApp, myself included, were in trip in Bet Oren, near Haifa.

16012008048.jpgMini Israel
These pictures form Mini Israel – a great site that contains a small-sized replica of all major sites in Israel.

Old Stuff

This is where you will find most of the goodies available on this web-site.

QuillWritten Stuff
First of all, there’s a Written Stuff page which includes articles I wrote and working on.

SoftwareSoftware Projects
Also there’s a list of software projects I created or participated. This includes SlickEdit macros page, macros for IDA and of course the g15dods.

Welcome

Welcome to Alexander Sandler on the Net

My name is Alexander Sandler and this is my web-site. I am a software engineer working mostly with low level Linux, but not only. On this web-site I share things that I create and write. Hope you’ll find it interesting.