Jonathan Jekir
About
I'm a second-year computer engineering student at the University of Waterloo. I'm learning how to create the future by combining hardware, software, and networks. Electric vehicles, renewable energy, and telecommunications are some of the areas I would like to explore, though in the end the spirit of engineering is what really matters. That's doing things never thought possible, making things better, faster, more reliable, easier to use, cheaper and more. Engineering is never settling for what we have; it's a dream for what we could have and the knowledge to make it happen.
When I'm not busy creating or fixing the impossible, I sing in the University of Waterloo Choir, performing a variety of works old and new.
I can be reached at jonathan.jekir@gmail.com. If your organization is building the future, take a look at my resume and give me a shout if you like what you see.
Site News
- 2011-07-13: Updated resume. Now better-looking, more relevant, and free of outdated content.
- 2011-04-17: Added Academic section and "Virtualizing a dual-boot OS". Finally left beta.
Code
Adium Log Reader
After moving from a Mac with Adium to Windows and Pidgin, I needed a way to read my old chat logs, as the two applications don't use the same format. So one day I threw together a simple GUI application that runs through these XML files (It's a bit too hackish to call parsing) and displays them.
Kudos to Paul Roukema for dramatically improving the peformance of this little application. He used Visual Studio's new profiling tools to show that writing the output directly to the text box is a significant bottleneck, and writing to a temporary variable is much faster.
IM Log Reader
Last updated 2010-12-29
As an exercise in application development, I'm improving and extending Adium Log Reader in a new utility. I have four objectives at this time: use proper XML parsing; provide search functionality; aggregate logs in multiple directories; and support log formats other than Adium. This new utility, which I currently call IM Log Reader, is meant to be a single place to view all IM logs together in a convenient, searchable way even if you use multiple IM clients. Off the top of my head I am interested in supporting Adium (done, at least for now), Pidgin, Windows Live Messenger 2011, and Windows Live Messenger for BlackBerry.
Support for multiple log formats is enabled using the LogReader interface, which specifies one method. This method, called ReadChatlog returns a Conversation object (a fairly simple class consisting of a sender, timestamp, and message) given a StreamReader object pointing to the file that should be read. At the moment, I have no nice way to determine which reader to use for a given file.
Back to topAcademic
Taking an Academic Term Abroad
Having not left North America all that much in my life, and having studied French for most of my life, the desire struck me to do an exchange in France. This is an attempt to document some of the things you should know when trying to do this, assuming you're a student of University of Waterloo Engineering. Some of this information will be specific to Electrical and Computer Engineering students, and some of it will be specific to INSA Lyon (the university of my choice), but I trust that many aspects of the application process will be the same in other circumstances.
The first questions you should ask yourself are where and when. France was a natural choice for me because of my second language. The choice of country is left as an exercise to the reader. I chose the INSA Lyon as it's a major engineering school and, as I understand, quite good. You will need to figure out what the layout of the school year looks like at your chosen institution, as it will decide how you mangle your Waterloo schedule to fit. INSA Lyon's first semester runs from mid-September to the end of January and the second semester runs from the middle of February or so to the end of June.
Now a few words on timing. Your UW application needs to be submitted roughly a year in advance. The application to the partner school (that's the foreign school) will have to be submitted a few months in advance. I started by application process in my 2B (Fall 2010) to go in Fall 2011. My general guidance is therefore to think about this in second year and start the application process then. In terms of choosing when to go: 3A, 3B, and 4A are the most common choices. If you choose to go during your 4A term you are away for part of your fourth year design project, which is unfortunate. I chose 3B, which has minor consequences for the design project. It will probably work well for you too. If you're in 8-stream, 3B is already in the fall. If you're in 4-stream, you'll have a work term in the fall and then 3B in the winter. You will need to switch these.
All of my advice aside, the offical resource for all this is the Engineering Exchange Office website. You should review all the content on that site. Yes, it will take some time. Once you've done so, and have an idea of where you'd like to go, head to the Engineering Undergraduate Office in CPH. There, you can make an appointment to see the Administrative Coordinator for the Faculty of Engineering Exchange Office. At present, Cindy Howe is the coordinator. Her availability is listed on the Exchange Office's Contact Us page. She will lead you through the Waterloo portion of your application and answer most questions you could have.
Once you've spoken to Cindy she will give you the Application for Outgoing Exchange Students. I initially found this large stack of forms rather intimidating, but in retrospect it's fairly straightforward. The first page is simple enough personal information. The second page is the Exchange Program Sequence Form. This is where you indicate your previous grades and work term evaluations, the term you will spend abroad, and the schedule of your future terms up for graduation. This form must be signed by the Undergraduate Academic Advisor for your department as well as the Co-op Advisor for your program. See the People page on the ECE website to find the Academic Advisor for your program. You can make an appointment to see him or her by visiting the appropriate Undergraduate Coordinator at the ECE main office in the EIT building. This approval certifies that the department allows you to go on exchange and, provisionally, that your grades are acceptable. The Engineering requirement is a cumulative average of 70%, with preference to an increase from first to second year rather than a decrease. ECE requires that you be in the top half of your class.
The CECS approval is to ensure that you will have the necessary number of work terms for graduation and to ensure you have a plan to complete your work terms successfully. Some students do a work term abroad right after their study term. This means you must find a job in the foreign country, which may not be easy. My plan is to do the work term here in Canada, so I can offer no particular guidance in that regard. Since you will likely be out of the country when on-campus interviews happen, finding a job for this work term is a test of your networking abilities, or you could return to a previous co-op job. My last note for CECS is that if you must switch an academic and a work term, your application must include the CECS Request for Academic/Work Term Sequence Change form. This form must be signed by your co-op advisor. There is a section for a faculty signature as well: I no longer know who signed it, but keep that in mind. It may be the Undergraduate Advisor for your program. Some back-and-forth from one person to another is an inevitable part of this process.
The Proposed Study Plan for Exchange form is quite simple but may lead to large amounts of pain and suffering in your life. This is where you list the courses at the partner school that you intend to take on your exchange term. This form must be signed by the Exchange Coordinator for ECE, who at present is Professor Mehrdad Kazerani. Ask your department who is responsible for approving foreign courses if you are not an ECE student. If you are lucky, the Course Packages page lists course equivalents for your program and school and you can just use those. If you are unlucky, you will need to use the website for your partner school and the Waterloo Undergraduate Calendar to figure out a set of courses that seem to work out. It is wisest to plan out your entire program from now until graduation and make sure you have all the core and elective courses you need to graduate. If you are in a position to take courses over your work terms, I recommend doing so as it makes your schedule more flexible. If you cannot replace a core course or take it in a different term, talk to your department and see if there are any equivalents to it. I now must add two pieces of information for students intending to go to INSA Lyon and perhaps other schools in France. One, exchange students there are required to take a minimum of 15 ECTS units of engineering courses. In my schedule, that turned out to be four courses rather than five. I still have enough courses to graduate. A measure of careful planning is required here. Secondly, the school requires me to choose a home department and then allows me to take courses from only one other department. At Lyon, what we think of as computer engineering is split into three departments: electrical engineering, computer science, and telecommunications. Keep these things in mind when you create your course plan. Above all, know that the plan may change. You will choose these courses fairly early, and will probably end up learning things later on that will change things. Don't panic.
The rest of the application holds no particular surprises. Work to get it together by the deadline, but it may take more time to get your courses fully sorted out. Once you hand in your application, you will have to have a pre-departure interview with someone from the Engineering Exchange Office. This may be the co-ordinator for your destination, or it will be the Director of this office, Professor Peter Roe. After that, your application will be submitted to the faculty for approval and you get to relax for a few months.
A few months before the start of your exchange term, Cindy will pass on to you the application form for your partner school and you'll need to attend a pre-departure briefing from Waterloo International. This will talk about things like health insurance and other important administrative details of which you should be aware.
This is more or less all the information I have for you right now. I will revisit this periodically and update it as I learn more, and as I progress myself through the process. If you have questions, especially questions regarding ECE and/or French schools, feel fry to contact me and I will try to pass on the wisdom I've gathered.
Back to topLinux
I've used Linux for many years, for a while as my primary system, now mostly for fun. Here are some useful things I've done with Linux. These may also be applicable to other Unix-like systems.
Internet tunnel over OpenVPN
Every now and then I find myself using an unsecured WiFi network. From a security standpoint this can be very dangerous. For example, Windows Live Messenger sends all of its traffic unencrypted. That means that anyone in the vicinity can read my chats. Many other websites send their data unencrypted and are thus vulnerable to eavesdropping.
The solution to this is to forward all of my Internet traffic through a little Linux server in a physically secure location. Anyone running a packet sniffer on the wireless network would then see only a stream of encrypted packets from my computer to my server. I chose to use OpenVPN, an open-source VPN package available for most major platforms (Windows, Linux, and Mac OS X, among others).
First, it is necessary to establish a VPN connection from the client (the roaming laptop) to the server. For now, this is left as an exercise to the reader. The OpenVPN web site has instructions suitable for most technically-minded users.
The second step is to make the server into a NAT router that will forward traffic from the VPN tunnel out to the open Internet. The enable-nat.sh script will enable IP forwarding in the kernel and create the necessary iptables rules to do this. It assumes that your Internet connection is on interface eth0 and the tunnel is on interface tun1; change these as necessary before running the script. It must be run with superuser privileges. I have tested the script myself, but I cannot provide any warranty for it at all. Please read and understand it before executing it.
The third step, on the client, is to change the networking settings to create a static route directly to the server over the Internet interface, and then route all other Internet traffic over the VPN tunnel. This is accomplished with a pair of scripts that will be posted soon.
Back to top | Back to LinuxVirtualizing a dual-boot OS
While I enjoy arguments about the relative merits of Windows and Linux, it is clear to the truly enlightened that both have their time and place. Dual-booting and virtualization have been the two main ways to have these two systems coexist on one computer, but each have their limitations. Most notably, dual-booting is inconvenient, and virtualization can be resource-heavy. I present the best of both worlds: mixing dual-boot and virtualization. With this setup, I can choose at boot to enter either Windows or Linux, and while in Linux I can run the same installation of Windows in VMware. This means I can work away in Linux and still have my usual Windows environment just a click away.
To the best of my knowledge, two physical hard drives are required for this. On one drive I have a copy of Windows Server 2008 R2 (a perfectly servicable workstation OS with a bit of tweaking). On another drive I have a copy of CrunchBang Linux, a Debian-based distribution of which I've become rather fond these days. Using the boot menu option in the BIOS, I choose the first hard drive to boot Windows, and the second hard drive to boot Linux. My virtualization software of choice for this is VMWare Workstation, which I run on Linux. VMWare Player is also a nice alternative, and is free of charge. VMware allows for the creation of virtual disks that simply pass through physical disks, and this feature is what makes this hack possible.
First, a bit of preparation. The user under which you run VMWare needs to have access to the raw disk device where Windows is installed. Under most Linux distributions, there is a group called "disk" that has read/write access to all disks. It should suffice to add your local user to this group, but there are security implications for shared machines. For your personal machine, this is not an issue. In a corporate or managed environment, properly securing access to this device is a bit more of a challenge and is left as an exercise to the reader. Secondly, it is imperative that only one OS try to access the disk at once. That means that if you have your Windows partition mounted to access files, you must unmount it before starting the virtual machine. Since I have my Windows partition listed in /etc/fstab, I added the "noauto" parameter so the partition is only mounted when I expressly mount it. Accidentally leaving the partition mounted while the virtualized Windows is running doesn't seem to harm anything (I've done it once) but attempting to use the mount is very likely to lead to data corruption. You have been warned.
Now feel free to create the VM in VMWare, specifying an LSI Logic SAS controller (if you're given the option) and a pass-through disk pointing to the correct device. Booting the system now, however, will result in a blue screen: Windows does not recognise the LSI Logic controller that VMWare presents to it. Thanks to sanbarrow.com there is a fix. Boot into Windows and open the Registry Editor to HKLM\SYSTEM\ControlSet001\services\LSI_SAS and set the "Start" parameter to 0. That will enable the LSI SAS driver. Now reboot back into Linux, run VMWare, and all should be well.
The next potential area of trouble of which you should be aware is networking. If both your Linux and Windows installs are set to use DHCP and you really don't care about their IP addresses, all is well. I prefer that my Windows install always have the same IP address, so I gave up on DHCP and set a static IP address for both Windows and Linux. Be careful when mixing static addresses and DHCP because upon booting into Linux, it'll grab the IP address associated with your PCs MAC address. If Windows has that same address statically assigned, there will be a conflict and Windows will be unhappy about it until you statically assign a different address or use DHCP.
Back to top | Back to LinuxResume
view pdf | view htmlI alternate between four-month terms of school and work according to my program. I am currently employed, but feel free to contact me regarding opportunties during my next co-op term, which will start in February 2012 when I return from an exchange study term in Lyon, France.
Back to top
Social Media