List of Contents
- Pascal2C++ — Language Translator
- Typing Tutor
- Emmet Customization
- Text Analyzer
- Progressvie BBC Frontpage
- Bash Scripts for Automation
- Typing Speedometer
- System Monitor
- Bitmap Viewer
- Chat Client
Concerning the choice of technologies for implementing the projects, with the goal to acquire the master level proficiency in C++ eventually abandoned, the reasons for which I have discussed in the About section, I eventually switched to the study of the documents pertaining to front-end technologies. Consequently, despite my fascination with the C++ language and eagerness to implement almost all of the projects in C++, you would find that most of the projects rely heavily on the technologies developed purely for the creation of inviting, captivating, and compelling interfaces for the web. As for the order of the following list of projects, the technical challenge posed by the projects served as the criterion. The following facets of the discipline of software engineering broadly capture the term “technical challenge”: domain specific knowledge, problem solving skills, and programming competence required to complete the project. Based on that criterion, the projects appear in the descending order, with the most complicated attempted so far sitting atop the list and the least challenging finishing it off.
I started work on this program after completing the mandatory Compiler Construction course, in which the course conductor’s willful participation in derailing the progress, which should constitute a crime (not the first transgression on that individual’s behalf), resulted in an unacceptable grade. Undetered, I decided to push the envelope a little further and started work on the translator to assess the command of the subject matter and ability to architect solutions in C++. As I took the course a year or so after the epiphany, hence I had the essential skills and sound reasons for the requisite confidence.
Developed using standard C++ in Visual C environment, the application analyzed (syntax analysis) and translated programs written in Pascal – ISO 7185:1983 – to equivalent C++ programs barring support for nested functions and structured types. Although I only used the Visual C++ IDE to develop the application, as at that time I had little to no exposure to Unix based systems, however, as I relied exclusively on the features provided by the then standard C++ (as described in the 3rd edition of The C++ Programming Language), so it should have compiled on the Unix based systems, as well.
After succumbing to the desire to become an efficient typist, I started work on this program to achieve the aforementioned goal without reliance on proprietary applications.
Although undertaken at some point during 2014, with ample knowledge of the general CS principles and above-par dexterity in the use of computer systems, however, the effort to adapt Emmet, Mr. Sergey Chikuyonok’s highly regarded HTML utility, soon became indistinguisable from an effort to wade across a river that fails your expectations on at least a couple of counts, as it proves much deeper and far faster than your initial estimates.
To satisfy any interested individual’s desire to know the reasons behind the aforementioned undertaking, I, for one, certainly do not appreciate code, of any type or kind, that lacks ample white space and places unnecessary demands on its users. Although some would consider it a matter of taste, however, irrespective of the nature of the issue, in case of some, it can certainly bring to a grinding halt the whole of the development process. Therefore, to benefit from its core functionality and to rid it of the irksome issues, I then went on to spend around ten days studying and fixing the codebase to suit my needs and style.
The reasons behind the inception and eventual realization of this utility checked-in via the digital highway, for it owes its existance solely to the narrator’s desire to stay abreast of the developments and discussions taking place in the wider world; in the connected world, what better way to do so by visiting news websites. One such visit brought to knowledge not only the existence of Stephen Fry but also his research into the development of typing techniques and enabling contraptions, and hence the introduction to Dr. August Dvorak’s patented typing technique and keyboard layout.
When supplied with copious amounts of text, which the application accepts via a text box, it evaluates the frequency with which each letter occurs in that text. Based on those results, it then compares the arrangement of those letters in the respective layouts. With its results confirming the superiortiy of the Dr. Dvorak’s patented layout, I had the necessary stimulus for updating the typing tutor to support the Dvorak layout, as well.
To provide you with an idea of the scope of the project, as the front page of one of the most visited news websites — it enjoys a global visitor ranking of 71st and 7th in the UK — it has a combined page size that exceeds 2 MB mark (images included) and HTML bytecount that surpasses the 230 Kb mark.
Implemented using HTML5 and CSS3, the eventual replica not only provides all of the basic functionality offered by the website but also reduces the overall byte count by a staggring 643635 (67000 bytes of HTML and 576635 bytes of JS) bytes, achieving an overall reduction of approximately 643 Kilo Bytes of data. The aforementioned total excludes the reduction in CSS byte count.
As much study and exploration of various materials permitted the aforementioned undertaking, meaning getting out of the comfort zone, hence, I rate it above another couple of utilities, the next on the list, that I also developed in the post C++ era, however, which rely on languages whose core constructs bear strong resemblance with those offered by C. Having previously mentioned that the progressive enhancement approach to developing websites has its proponents and opponents, I would like to add that I now firmly belong in the proponents’ camp.
After an unsuccessful attempt to switch to a Unix based system during the first decade of the second millinium, eventually, I had to make the switch because of what I can only describe as Microsoft’s attempt to inflate its profits by employing deceitful tactics. If the foregoing ruffled any patriotic American’s feathers, then to placate such an American, I would like to add that I have around half a dozen blatantly dishonest and disingenuous emails from their office in Ireland. Owing to the inability to use a licensed version purchased from one of Microsoft’s authorized partners, lack of acceptable alternatives, and some uncertainty surrounding the future, I eventually had to invest in an Apple MacBook. As the OS offered by America’s most innovative company relies on a 40 years old operating system, hence, in order to accomplish the tasks frugally and efficiently, I had no choice but to learn Bash Scripting.
As the core programming constructs, with some oddities and some verbosity of syntax, bear strikingly close resemblance with that offered by C, and most of the other programming languages, hence, of the time spent on implementing those automation scripts, I spent a considerable portion on unravelling the mysteries of the inner workings of Bash, and in comparison, a tiny fraction on learning the syntactic peculiarities of the scripting language.
The interface of the utility comprises nothing more than a few items: a section (div in the HTML terms) containing unselectable text, a close approximation of disabled form elements, for use as test material; an edit box where the aspiring master typist can let his fingers do the talking; and some emptiness on all four sides. With some emptiness the subject of the preceding line, if while poring over the UI guidelines, you somehow missed the section discussing the importance of ample space between constituent parts of the UI, then now would be a good time to dust off those UI guidelines and not only unearth the overlooked informtion but also embrace the dictum wholeheartedly.
When the time runs out, the utility presents the aspirant with the adjusted score, which takes into account the number of mistakes made during the session.
With only a few more noteworthy implementations preventing the list from reaching its impending conclusion, to lift the burden off of your shoulders, the following pithy disclosure states the reasons for not investing much time and effort in crafting their descriptions.
As I undertook the following projects with a 5 year long exposure to C++ and Visual C++, irrespective of the trivial nature of the projects or assignments attempted during that time, hence, the projects failed to provide the challenge necessary to merit an investment of time and effort into their description. The descriptions that await your already weary eyes and souls, to strain them just a little more, I have simply copied them, with minor alterations, from a CV prepared at some point between 2008 and 2010. Also, considering that to unearth the little gems, I would have to invest an unreasonbale amount of effort and time, so, for the sake of the narrative, let’s consider them lost.
Developed using VC, Win32 API, and MFC, the minuscule utility allowed taking static snap shots of the current system state. To gather information about the current state of the system and performance metrics describing the state of the currently active processes, the utility used to rely on the performance counters exposed by the Window’s performance registry.
Developed using MFC Doc/View architecture, application allowed viewing of bitmaps in an interface very similar to Windows File Explorer, making navigating the folders and locating the files much easier.
Navigational facilities were provided using interfaces exposed by Windows Shell, and bitmaps were manipulated using Win32 API part of the GDI subsystem.
An extremely simple dialog based client for a chat server developed using Windows sockets, MFC, and Visual C.