caveat: this is a stream-of-consciousness thing
Ontario's ST&T (Science, Technology and Trades) program for secondary schools instilled in me with a strong working knowledge of vacuum tube technology by the summer of 1970. In the years following, Conestoga College provided a good working knowledge of semiconductor technology (transistors, diodes, thyristors, etc.). I began working for Bell Canada in 1973 and was surprised to discover their circuit switching equipment was based upon an electromechanical technology known as step-by-step (SxS).
To be fair, our Central Office (or C.O. as they are known by the telephone company) switching center consisted of 70,000 lines of which only 40,000 were based upon SxS. The other 30,000 were based upon something called number five crossbar (5XB) which was another electromechanical technology. 5XB employed one-or-more electromechanical computers, called a marker, to set up a path through "the switch" by operating various horizontal (select) and vertical (hold) magnets on a crossbar matrix.
quote: In 1976, Gus Lorimer (a descendant of one of The Lorimer Brothers) told me in the Preston C.O. "Anything you can do with transistors, I can do with relays".
comment: You should have seen their call-through test set which was built into a cherry-wood cabinet (looked a lot like a vacuum-tube table-top radio). An electromechanical work of art.
Now it is not like the phone company didn't know about semiconductor technology (because Bell Labs invented the first working unijunction transistor in 1947), they only intended to squeeze every invested dollar out of the current technology until they were forced to move to the next. So while big COs in Canada were employing electromechanical technology, small PBX (private branch exchanges) in large corporations were introduced to SL-1 (stored logic one) technology where computers were employed as markers to set up a call through minibars (miniaturized crossbars). Why minibars? In those days, unhardened semiconductor circuits were easily destroyed by "natural lightning" or "accidental contact with commercial power". The cost of hardening the semiconductor circuits was still too large so mechanical switching of the analog signal was the only way to go. Within a year of the introduction of SL-1, Northern Electric released SP-1 (stored program one) for use in central office switching centers. SP-1 employed minibars as well.
Within a few months of starting at Bell Canada in 1973, I realized my freshly minted electronics skills were going to decline so began looking for an antidote. I landed a part-time job as a repair technician at a local musician retail sale/repair shop by the name of Mother's Music (owned by Dave Boehm). There was lots of work doing...
The handwriting was on the wall (so to speak) for analog technology so I returned to Conestoga College (night classes) in 1977 to catch up on the continuing semiconductor revolution which included TTL and CMOS technologies in the Digital Electronics courses. I also learned BASIC and COBOL programming on their HP-3000 minicomputer.
Bell Canada became more digital in 1978 when they replaced traditional paper-tape long-distance billing recorders with computers ("Interdata Model 70") and industrial controllers ("TeleSciences SRS-1200 Data Recorder"). Both technologies stored data on a HP-7970E 9-track tape system and Bell was looking for someone who wanted to maintain this stuff "full time". Since I was attending night courses at Conestoga College, I was offered first crack and the rest, as they say, is history.
Also in 1978, Bell Canada produced a minicomputer system called TELCON (teletype concentrator) which would replace a room full of thirty-two ASR-35 teletype machines (connected to remote SL-1 and SP-1 switches) with a single PDP-11/04. This led to other projects based upon the PDP-11/23 (ACD for SL-1), PDP-11/44 (BSIMS and CALRS) as well as the PDP-11/73 and PDP/11-84. Then later (over the decades) to projects based upon the VAX-11/730, VAX-11/750, VAX-8550 (MFAS), uVAX-3500, uVAX4300, VAX-6000, AlphaServer-2100, AlphaServer-4100, AlphaServer-DS20e and Itanium rx2800-i2
link: dips-n-certs (involved a huge amount of corporate training provided by: DEC, HP, IBM, etc.)
Around 1978 I was contacted by Bits-n-Bytes (a computer store in Waterloo, Ontario) to repair a HeathKit-H8 computer along with a HeathKit-H9 terminal with a horrible key-bounce problem. The owner, Fred Hoffman, asked for a quote but I offered to fix it for free provided I could keep both units for a month. That's when I learned Benton Harbor BASIC and Benton Harbor DOS. Thanks Fred (especially for letting me keep it for 6-weeks).
Later that same year, I purchased a 48k Apple][ with a 16k Language Card. Since the Apple][ had INTEGER BASIC (written by Steve Wozniak) in ROM, it would load APPLESOFT BASIC (written by Microsoft) into the language card. Apple][+ machines had APPLESOFT BASIC in ROM so loaded INTEGER BASIC. I used this machine to also learn:
In 2008 I purchased a PS3 game console bundled with a game titled Grand Theft Auto IV which was a bit of a shock. Why? You can drive around Liberty City for hours in various cars, listening to 18 radio stations (playing the music from: ELO, Genesis, Heart, Bob Marley, Queen, Joe Walsh, ZZ-Top, etc.), all the while experiencing different weather conditions including rain, shine, day, night, lightening, thunder, and fog. Your vehicle will actually handle differently depending upon road conditions, weather, weight, technology (front wheel drive vs. rear wheel drive), etc. At certain points you can exit your vehicle to run, walk, buy a hotdog, or board a number of subways. A self-contained digital world on a Blu-ray costing $59. To see what this world looks like, just search for GTA4 at www.youtube.com
comment: PS3 architecture consisted of one 3.2 GHz Cell Broadband Engine with one PPE and six SPEs. This gaming console was so powerful that they could also be used to aid in scientific research (see: folding-at-home). Some universities would buy 25 to 50 then connect them together to produce a PS3-based super computer. Yikes! Not many people saw this coming.
Jump ahead to 2012 when I was playing Batman: Arkham City borrowed from my nephew. This is also a self-contained digital world to support a game which is more like an interactive comic book where you play the role of either Batman or Cat Woman. Most games are only good for 6-10 hours but Batman: Arkham City and Grand Theft Auto IV can require more than 100 hours if you do all the side missions. Okay, so at the original price of $59 dollars this entertainment will cost you 59 cents per hour. Contrast this to a movie you buy for $25 then watch once for 90 minutes. Now I understand why Warner Bros. published this title.
This got me thinking (the epiphany) about my earlier years...
I was in Sam the Record Man when I first heard, and purchased, Switched-On Bach by W. Carlos. At the time, I was misled into believing this was music produced by a programmed computer ("computerized" was the popular phrase). It turned out that this wonderful album from 1968 was painstakingly assembled, phrase-by-phrase, on the Moog synthesizer. Keyboard, sequencers, Voltage Controlled Oscillators, Voltage Controlled Filters, and multi-track tape recorders: "YES" but computer: "NO". On top of that we must all remember that this was an analog recording of a machine with an analog audio output. Nevertheless, none of the instruments heard were real, yet the associated harmonics could (when cranked up) blow the output transistors of most solid state audio amplifiers which had been designed for natural instruments.
A similar classical music experience occurred a few years later when I heard, and purchased, the 1974 album Snowflakes Are Dancing by Isao Tomita. If you liked Debussy then this album was a must-have.
In 40 years (1970-2010) humanity has gone from "really good fake musical instruments which a few hundred could play (or afford to play)" to "today's (2012) video gaming industry which employs tens of thousands and rakes in $25 billion ($25,000,000,000.00) annually". The total number of XBOX-360 and PS3 machines sold by 2012 exceeds 145 million and this number doesn't include other gaming consoles or the number of people playing 3d games on high end PCs.
- In 2012, video game development employed ~18,000 Canadians and added ~2 billion to Canada's economy. Impressive since Canada is only the number three country in game development behind Japan and USA. Also remember that video game technology spills over into special effects for the movie industry.
- In 2012, Call of Duty: Black Ops II was released and raked in sales of $500 million (yep half a billion) in the first 24 hours. The publisher raked in a second half billion in the next 17 days. If these numbers ever occurred due to movie box-office sales you would read about it in every newspaper and hear about it in every newscast. Most parents hate video games because they see their kids wasting a lot of time playing them (from a parent perspective, today's "video game console" is synonymous with yesterday's BOOB TUBE) but everyone must admit that video game development employs a lot of programmers and sells a lot of computer hardware. Maybe it is better to think of video games more like interactive movies.
Now I could have also mentioned lots of other technological changes including:
...but I think you've already got the idea.
All "C" programming language stories start with the creation of UNIX by employees at Bell Labs in 1969. The original UNIX offering was written using the PDP-7 Macro Assembler and was buggy. On top of this, Bell Labs was already working with multiple computers (starting with an 18-bit PDP-7 but intending to soon move to a 16-bit PDP-11/20 which was a completely different processor architecture from Digital Equipment Corporation). They solved the first (buggy) problem by creating languages "B" (based upon BCPL) then "C" which would allow UNIX to be rewritten using a high (uh, slightly higher than macro assembler) level language. They solved the second problem (different CPUs) by using a CPU-specific code generator out the backend. Now both "C" and UNIX were portable.
comments: perhaps Bell Labs only intended to work with different PDP computers from DEC but here, "portable" means the code can be (relatively) easily moved then to any computer from any manufacturer. And this got me thinking (the epiphany) that no computer manufacturer (many did both hardware and software in those days) would have ever produced a software tool like this since it provides customers with an exit strategy (the customer now can move their business software to any computer platform from any manufacturer; this must be why Ken Olsen hated UNIX and C). While many companies produced ANSI-standard languages, these offerings also included vendor-specific extensions which made moving to another platform difficult and sometimes impossible. On a related note, third-party software vendors working in "C" can more easily move their work to other machines thus supporting a larger base of customers. This is also true for the UNIX operating system which is usually the first OS to be ported to new computer architectures and/or CPUs. "I am convinced" that portable languages and operating systems facilitated the explosive development in computer hardware seen in the past 45 years.Boot-Up of a Portable Software Paradigm +-------------------+ Phase 1 | Assembler -> UNIX +-->+ +-------------------+ | | +<----------------------+ | | +------------------------------+ Phase 2 +-->+ UNIX and Assembler -> B -> C +-->+ +------------------------------+ | | +<-------------------------------------+ | | +---------------------------+ Phase 3 +-->| UNIX and C -> better UNIX +-->+ | +---------------------------+ | | | Note: both totally portable if pure "C" (no assembler) | +---------------------------+ | Phase 4 +<--| UNIX and C -> better C +<--+ +---------------------------+ Notes: 1) Some assembler will always exist but it will be found in the code generator (not shown) 2) Platform specific information (i/o addresses etc.) are found in platform header files
Most people already know the story of how ARPA (now DARPA) funded the development of a data communications network meant to survive a destructive war. This was accomplished by allocating money to universities in exchange for the development of ARPANET. These experiments actually started in the 1950s and 1960s and were meant to pass data messages between a few proprietary computer networks. But things changed in the early 1970s when Bell Labs began licensing UNIX to educational institutions for an incredibly low price to recover their costs (after all, under the monopoly rules Bell Labs was "not supposed to be a software vendor" -or- "make any money vending software") which meant that the majority of ARPA-funded work slowly moved to C on UNIX. This also meant that anyone working on the ARPA project in C on UNIX could easily share their work with peers at other universities. By about 1980 there were several competing data networks (ARPANET, ALOHAnet, etc.) and DARPA wanted...
At this point the story shifts to a gifted programmer at Stanford by the name of Bill Joy who was working with "C" on another DEC platform known as VAX-11. By 1982, Joy had developed all the software necessary to implement what we now refer to as TCP/IP running on IPv4.
By the early 1980s, many universities had modified UNIX sufficiently that they were able to rebrand/republish/relicense it to others. The University of California at Berkeley was one such group to do this by offering BSD UNIX to other universities for free or corporations for $1000.00 (IIRC) which was incredibly low compared to commercial products. Many people today do not give BSD enough credit because one of the things they came up with was Berkley Sockets which allows a programmer to read/write an internet connection in the same way programmers read/write file systems. Bell Labs copied this idea then produced the STREAMs libraries (IIRC) for the AT&T flavor of UNIX.
Some people in the IT industry today are still very critical of "C" (or UNIX/Linux) while they simultaneously promote their favorite language (or OS) but they are fighting a losing battle. Why? When universities became financially squeezed in the early 1970s, many were forced to be more frugal and only consider inexpensive or free alternatives. So most universities went with C and UNIX. Now students had access to all the source code (which meant they could improve the product) which had the unintended consequence of creating a "critical mass" of human talent. In this environment it didn't matter which language was better because a choice had already been made; then students entering the workplace stuck with the software skills they already had. Companies selling software to universities probably saw some short term profits but never had a chance of succeeding in the long run. One day soon even COBOL will fall. FORTRAN is still around but nowhere near as popular as it once was although the libraries for doing math in the complex-plane still remains rather unique.
Question: Is "C" a high level language or a low level language?
Answer: Both. It is a low level language (think portable assembler) which becomes a high level language as soon as your program references the included libraries.
I knew of many Nortel projects (CALRS was one) where conversion to "C" and UNIX increased stability while reducing licensing costs. Nortel's flagship product at the time was DMS which was written in a Pascal variant called Protel (Procedure Oriented Type Enforcing Language). In those days, Nortel was spending a lot of money each year training freshly minted university grads how to program in Protel. Since many of these people already knew how to program in "C", Nortel embarked upon an internal project to convert DMS from Protel to C. They did a fairly good job of this except that the changeover was done "flash style" rather than "gradually". Bugs and delays meant that Nortel's cash cow delivered virtually no revenue for 18 months. Oops!
We now know that 1988 was the year Dave Cutler left Digital Equipment Corporation for Microsoft. Cutler was responsible for the development of Windows-NT (New Technology) which was meant to (and did for a time) run on multiple CPUs including: IA-32, MIPS, and Alpha, with plans for PowerPC, Itanium, AMD64 and ARM. Because this new OS was meant to run on multiple CPUs and computer platforms, "C" was chosen as the language-du-jour because it was portable. Bill Gates (no idiot) was not convinced that 32-bit Windows-NT would be successful -or- would replace 16-bit Windows anytime soon. So unlike the Nortel FUBAR described, Gates funded both projects then ran them in parallel (DECies vs. Microsofties). Perhaps this is where having a technologist at the helm of a company is better than employing a financial person.
comment: click this 2013 link http://www.stroustrup.com/applications.html then hit "control f" to perform a page search for the phrase "Microsoft".
Note: The yellow paragraph mentions C++ which many people consider a better way to use "C". If you don't use streams or objects in your C++ programs then your code will almost look like "C" and will certainly be read by any modern "C" compiler.
No good programmer working for a phone company would ever admit this, but I didn't try learning to program in "C" until the summer of 1988 during a labor stoppage. I was using Lightspeed C on a Macintosh and I remember thinking "this has got to be someone's idea of job protection". But it always produced really small binaries (at least compared to languages) so I thought it might have some advantages. Also, the concept of reusing your own code, or code written by others (free or purchased), via the header mechanism seemed an obvious advantage. In subsequent years I noticed professional programmers getting really impressive results using "C" on 80486 (1989) and 80586 (1993) processors so I picked up these evening classes at Conestoga College:
In 1993, I did some contract work for a local (Kitchener/Waterloo) company described here. I designed the control board which employed a MC68HC11F1 from Motorola. All the software was written using a plain-text editor in 6811 Macro Assembler Notation on an Apple Macintosh. The binaries were generated using the uAsm 6811 cross-assembler from Micro Dialects. This approach worked well until the code exceeded 8K in size which introduced other problems (you always wanted to use branches for improved size and speed but often needed to switch to jumps when the target location was too distant).
Whitesmiths CIn 1995, I rewrote the whole thing for the Whitesmiths 68HC11 C Compiler/Assembler on an IBM-PC. Implementing startup and interrupt vectors was child's play with this package. Although I loved programming in 6811 Macro, Whitesmiths "C" was a much more productive tool. Descendants of this compiler are still available from COSMIC Software ( http://www.cosmic-software.com ) but you can find cross-compilers and cross-assemblers available for every CPU chip still in production. Here are two of many:
C++ introduces object oriented concepts to C which can only result in greater productivity with fewer bugs. For example:
Modern client software, like browsers (especially tabbed-browsers) from all vendors would be impossible without C++. In fact, I suspect the whole client-server paradigm has been taken further with C++ than was possible with C or any other language. Be sure to think about object-oriented technology whenever you see something (JPEG, GIF, Java Plugin, WAV player) sitting in the middle of your webpage.
Staying with Microsoft for a moment, most technology from them is object oriented in order to support COM (component object module) which is the basis for other Microsoft technologies and frameworks, including: OLE, OLE Automation, ActiveX, COM+, DCOM, the Windows shell, DirectX, and Windows Runtime.
Up until 2010, I was able to do all my application programming using HP-BASIC-1.7 Alpha for OpenVMS. But in 2010, I ran into a couple of situations where I had to directly interface with open-source software written in "C". One application involved interfacing an HP-BASIC application to OpenSSL. The second involved interfacing an HP-BASIC application to gSOAP. With most so-called "DEC languages", a developer can supply the compiler with command-line switches to control how variables are written to the symbol table which is used during linking. The appropriate "case control" switch doesn't exist with HP-BASIC-1.7 which means all symbols are up-cased. This means that a programmer needs to write a wrapper in order to facilitate linking. While this is possible, it might be more trouble than it is worth. Add to this the fact that HP-BASIC doesn't have all the data-types available to C/C++ (for example, there are no unsigned variables in HP-BASIC).
For me, it was easier to write the apps in "C" (HP C V7.3-009 on OpenVMS Alpha V8.4) then call the open source software directly.
Now the two C programs I wrote (one client, one server) are fairly ugly because I used pointers to reference the XML structure buried within the SOAP packet. I found a few spare hours in 2013 to go back to gSOAP in order to play with suggestions for a table-walker which can only be done well in C++ (well, you can always do pointer-to-pointer work in C but it looks really ugly; I have also seen table-walkers in C# and Java but those languages are out of scope on this project). Anyway, this time I used HP C++ V7.3-009 for OpenVMS Alpha V8.4 and discovered the resulting source code was smaller and beautiful. Not sure if I will ever be granted time to rewrite the "working" C-based gSOAP apps into C++
This thought continues below: Epiphany-5
As mentioned above, Bell Labs created the "C" programming language with the intent of squeezing the bugs out of UNIX. In case you haven't been paying attention, UNIX is now only written in "C" which may leave you with a chicken-or-egg nightmare if you happen to think about this stuff before falling asleep
After the US government finished (1983-1984) the breakup of Bell system, AT&T inherited Bell Labs then attempted to turn UNIX into a marketable productcomments:
MIT lifer, Richard Stallman, tried to get around the commercialization of UNIX by creating the GNU Project (Gnu Not Unix) which was a total UNIX rewrite. Since writing OS applications is a whole lot easier than writing a kernel, it shouldn't be a surprise to anyone that GNU wasn't entirely free of UNIX until 1992.
Engineering students, specializing in both hardware and software, had studied Bell Labs UNIX kernel "source code" for years and were now worrying about the legality of this practice. Many universities began to look for alternatives and I remember the MINIX kernel (from the "Free University" in Amsterdam, Netherlands) being a popular contender. I might even have a hardcover manual stashed away someplace in my home office.
I sometimes wonder what is in the Scandinavian water supply because
Today, the merger of the Linux kernel with GNU is simply referred to as Linux although some prefer the alternative GNU/Linux (see: GNU/Linux naming controversy)
There are already huge volumes of web information available about Linus Torvolds so let me include one quote from his bio found here:
In 2003, Torvalds left Transmeta to focus exclusively on the Linux kernel, backed by the Open Source Development Labs (OSDL), a consortium formed by high-tech companies, which included IBM, Hewlett-Packard (HP), Intel, AMD, RedHat, Novell and many others. The purpose of the consortium was to promote Linux development. OSDL merged with The Free Standards Group in January 2007 to become The Linux Foundation. Torvalds remains the ultimate authority on what new code is incorporated into the standard Linux kernel.Wow, that is a lot of corporate support (critical mass?).
According to www.archive.org the site www.osdl.org in 2003 mentions these partners (alphabetical order): Alcatel, Cisco, Computer Associates, Dell, Ericsson, Force Computers, Fujitsu, HP, Hitachi, IBM, Intel, Linuxcare, Miracle Linux Corporation, Mitsubishi Electric, MontaVista Software, NEC Corporation, Nokia, Red Hat, SuSE, TimeSys, Toshiba, Transmeta Corporation and VA Software.OSDL is now shut down and everything is referred here: http://www.linuxfoundation.org/ but their corporate member list is still impressive.
Back in 2005, Google wanted to put their Google Talk app on Apple's iPhone but Steve Jobs refused because the app would allow people to make free long distance calls (Jobs was certain this app would cause problems with one of the iPhone's main financial backers, "Cingular Wireless", which was a division of AT&T.
- Even though Apple customers paid big bucks for the iPhone, Apple always controlled what apps the customer put on the customer's phone. They did this by locking the phones so that app installs could only be done through Apple's iTunes store
- This is an example of Karmic Irony because Steve Jobs started off selling Blue Boxes designed by Steve Wozniak and built by both of them to allow people to make free long distance calls over the telephone network.
in 2006, Google made an ultimatum to Apple: either allow Google Talk to be placed on the iPhone or we (Google) will produce a competing product called the gPhone.
Apple refused which caused Google to purchase California Linux vendor Android Inc. Google then created the Open Handset Alliance where member companies would be given the Android OS Software for free provided the manufacturer preset customer modifiable preferences to do searching at Google (where Google makes most of their money).
There isn't much difference between gPhones and tablets (other than the screen size) so it should be no surprise that most tablet manufacturers would power their devices with Android. (er, Linux). Other emerging operating systems, like Chrome OS which is currently only found in Google's Chromebook, and Firefox OS are also just different Linux variants so you can see that Linux is everywhere.
Back in the late 1980s, I found myself in DEC's Field Service Lab (Training Center) at 12 Crosby Drive, Bedford, Massachusetts. I was working on the VAX-8550 in Row-W Bay-4 (IIRC) but noticed people occasionally walking through a curtained-off area in the back corner and wondered what was happening. Upon questioning my instructor I learned that the system hiding behind the curtain featured a new computer module capable of vector processing. He further explained that vector processors were all the rage in various kinds of scientific computing like "computing particle trajectories" or "climate circulation models" because they could perform a single instruction (e.g. multiply) on multiple data points. Those data points can represent anything you wish including a location in 3d (or higher) space. In those days, "vector processing" was available as an option ($$$) but today it is built into all modern CPUs but most people aren't aware of it.
On top of this, modern graphics cards employ 1000-2000 streaming processors so that numerous vector operations may be executing in parallel. If you also remember that graphics cards typically have between 1 and 4 GB of private memory then you come to the realization that graphic cards actually provide a private protected computing environment within your computer platform.
Going even further, specialty companies now produce motherboards which can simultaneously host four graphics cards. Meanwhile, companies like NVIDIA offer TESLA cards which are graphics cards without any video chips or connectors because they are only used for number crunching.
Here's a brief snapshot of vector processing development:One final point. In late 2013 Sony released the PlayStation 4 which is based upon an APU from AMD. What's an APU you might ask? It is an Accelerated Processing Unit which consists of CPU integrated with a GPU (something Intel had already been doing for a number of years without the fancy acronym). The PS4 is built around an APU consisting of two 4-core Jaguar x86-64 CPUs coupled to an equivalent HD 7850 graphics chip. Because the PS4 is build around GDDR5 memory which is only found in graphics cards, it appears SONY built a graphics system with a built-in CPU rather than the traditional processor system with a built-in graphics card.
In the early 1990s, Microsoft was smaller so was "looking for problems to solve" and "markets to expand into". Since many people were attempting to develop computer games, Microsoft informally aligned itself with SIGGRAPH to help produce tools. Next, they offered to do a free port of the game Doom (which only ran on DOS) to Doom95 (to run on Windows95) only for the technical experience. Their first Graphics API (application programming interface) was named DirectX and appeared in 1995 for Windows-95 and 1996 for Windows-NT4.
DirectX is neat because it defines a number of hardware devices in software (including a reference graphics card) then replaces those software devices with hardware when compliant hardware is present. This means that game programmers do not need to worry which CPU, or GPU (if any), is present. Just send your commands to DirectX and it will carry out your wishes.While recently poking around a game programmer site, I noticed this caveat:
quote: Microsoft recommends you call DirectX directly from Visual-C/C++ or indirectly from a .NET wrapper. Doing direct calls will result in the fastest code possible.
While I have used Microsoft Visual Studio for a few corporate projects, I am no expert. I was always under the impression that you could set the build-options of all Visual Studio languages to produce either "x86-binary for Windows" or "MSIL for the .NET framework". I still believe this. So is it possible that DirectX expects to be called from C/C++ for some reason? I don't know but what I do know is that COM (component object module) is the basis for other Microsoft technologies and frameworks, including: OLE, OLE Automation, ActiveX, COM+, DCOM, the Windows shell, DirectX, and Windows Runtime. And that COM is written in C++
Here is the opening paragraph of the Introduction from the book "Introduction to 3D Games Programming with DirectX 11". (which I highly recommend to programmers)
quote: Direct3D 11 is a rendering library for writing high performance 3D graphics applications using modern graphics hardware on the Windows platform. (A modified version of DirectX 9 is used on the XBOX 360.) Direct3D is a low-level library in the sense that its application programming interface (API) closely models the underlying graphics hardware it controls. The predominant consumer of Direct3D is the games industry, where higher level rendering engines are built on top of Direct3D. However, other industries need high performance interactive 3D graphics as well, such as medical and scientific visualization walkthrough. In addition, with every new PC being equipped with a modern graphics card, non-3D applications are beginning to take advantage of the GPU (graphics processing unit) to offload work to the graphics card for intensive calculations; this is known as general purpose GPU computing, and Direct3D 11 provides the compute shader API for writing general purpose GPU programs. Although Direct3D is usually programmed from native C++, stable .NET wrappers exist for Direct3D so that you can access this powerful 3D graphics API from managed applications.
DirectX is a collection of other modules. Direct3D and D3DX (Direct3D Extension) are two of many. D3DX is a math library capable of doing math in 3 (or more) dimensions to support 3d video games but some programmers used D3DX to do scientific work. This led Microsoft to develop XNA (unofficially: DirectX-Nextgen-Architecture) which is a better vector math library.
game vs. non-game
Early in 2013, Microsoft announced that DirectX and XNA will both be folded into Windows-8 and will only be available as a Windows Kernel Service. Oops! Scientific application developers have been told to use move to DirectCompute (but many will move to OpenCL or CUDA)
Most people do not know that the first "X" in XBOX represents DirectX. Yep, the XBOX-360 run a modified version of DirectX-9 (despite what you have read on the web, nothing higher).
Many people do not know that the XBOX-360 is powered via a tri-core PowerPC chip from by IBM rather than an x86 chip from either Intel or AMD.
Now I guess it is no surprise that DirectX is written in C/C++ and is just compiled differently to generate code for different target processors (game console or Windows PC). Doing this in a non-portable language -or- macro assembler would be too labor intensive.
A few months back (May of 2013) I was trying to learn more about parallel programming so was reading a book titled “CUDA Programming: A Developer's Guide to Parallel Computing with GPUs ” where the author gives evidence that any high-end desktop today (2013) with multiple graphics cards (if your motherboard supports them) can out FLOP anything found at the top of www.top500.org twelve years ago in 2001. Wow! Who knew? One restriction here is that the CUDA technology is only available in C/C++ as a bunch of included libraries. Sure I was aware of vector instructions in VAX and Alpha CPUs but these appeared to only provide pseudo-parallel programming capabilities. But graphics-cards from NVidia and AMD/ATI often provide several thousand streaming processors which are available for whatever you wish; this is true parallel programming on the desktop. You needed CUDA to talk to these cards when you wanted to do math but later discovered that lots of people were using the huge amount of vector math libraries created for DirectX/Direct3d as well as OpenGL. Apparently all the modern games would not be possible without these libraries. Talking about DirectX/Direct3d for a moment, I’ve visited a few of the game programmer sites where most people say “Microsoft allows direct communications with the DirectX/Direct3d API’s from Visual-C++ but for all other languages you need to go through a .NET wrapper (which reduces performance)”. Oops! Another plug for C++
I can only recall three interconnecting technologies that made a large contribution to the computing industry
I hadn't given much thought to clustering or parallel software on microcomputers until I received this recent (2013) advert from Intel for two products:
These products were designed to plug into the Microsoft Visual Studio IDE (Integrated Development Environment) targeted at Windows or Linux. However, after visiting the Intel site on 2013-07-20 it appears that these Windows-based tools now only generate code for Linux targets. I'm not sure if a windows flavor is around the corner or not.
Many people do not know that Microsoft introduced changes to Windows-8 requiring Windows RT programmers to only use C++ but not C (yep, you read that correctly).
quote: C++/CX (component extensions) is a language extension for C++ compilers from Microsoft that enables C++ programmers to write programs for the new Windows Runtime platform (although it is still technically possible to call the Windows Runtime from C, it is undocumented, opposed by Microsoft, and less efficient than the C++ extensions), or WinRT. It brings a set of syntax and library abstractions that interface with the COM-based WinRT programming model in a way that is natural to native C++ programmers.
That means the slightly older chart (shown just above) contains errors in the green side)
Okay so no one knows if Windows-RT will be a commercial success (it is targeted at ARM rather than x86; the light-blue blocks (traditional x86 support) above aren't going away anytime soon; the letters "SL" under ".NET" may provide a clue about where this is headed) but I think the handwriting is on the wall. Programmers intending a long career in IT had better learn C++ or perish.BTW, there will always be scripting jobs to do data extracts (until your boss can just ask HAL-9000 or Siri to do the extract) but does scripting count as programming?. Everyone knows that introductory programming classes for the past decade have been based upon Java because students complained that leaning C/C++ was too difficult (and Java was free). Then students complained that Java was too difficult (perhaps this has more to do with the IDE) so many universities switched to PHP which has stopped student complaints. I can tell you right now that you will never see "an operating system" or "Apache web server" written in PHP so decent paying jobs will most likely only go to people able to write software. On top of that, a quick survey of most engineering curricula emphasizes C/C++
Two PS3 games were released in 2013 which were head and shoulders above all others.
The Last of Us - Is a movie-quality experience about future life after a biological holocaust. Your mission is to escort a young girl across the USA The player takes control of Joel who is trekking across a post-apocalyptic United States in 2033, in order to escort the young Ellie to a resistance group, the Fireflies, who believe Ellie may be the key to curing an infection that has ravaged the world.
Grand Theft Auto V - is played from a third-person perspective in an open world environment, allowing the player to interact with the game world at their leisure. The game is set within the fictional state of San Andreas (based on Southern California) and affords the player the ability to freely roam the world's countryside and the fictional city of Los Santos (based on Los Angeles). The single-player story is told through three player-controlled protagonists whom the player switches between, and it follows their efforts to plan and execute six large heists to accrue wealth for themselves.
Note: in this game "open world environment" translates into approximately 49 square miles (127 square km).
One can only wonder what these games will look like when next-gen consoles (PS4 and XBOX-One) appear later this year.
Everyone reading this will have their own examples. My first memories involve VAXclusters which consisted of multiple VAX computers running the VMS operating system. They could be tightly coupled through a common memory interface, or medium coupled through network communications. Applications were programmed in such a way that the loss of one of the computers does not cause the loss of any storage or transactional data. In fact, the recommended way of performing an OS upgrade was to roll one computer out of the cluster, do the upgrade, roll the computer back into the cluster then repeat the operation on the next VAX.
32-bit VAX evolved into 64-bit Alpha which meant that this technology was referred to by the lesser known name VMS Cluster. Improvements allowed the distance between clustered processors to increase, and such a cluster could be seen in operation during the 9/11 attacks on New York when one VMS Cluster processor was destroyed with one of the twin-trade towers while its partner in New Jersey continued transactional processing without dropping a single transaction. (not something any company with a conscience would want to advertise)
brief historical overview
|domain name service
berkley internet name domain
|translates names into I/P addresses||high|
|smtp||simple mail transfer protocol||email OUTBOX||medium|
|pop3||post office protocol||email INBOX||medium|
|http||web server||transfers (usually html) formatted data||low|
Most technical people know that protocols like telnet and ftp are connection oriented, and that connection stays up until it is terminated by the client (via user command) or server (timeout). Most people do not know that http (the protocol to support www and/or web) is connectionless. Yep, you read that correctly; Before Y2K, a browser opened a connection to a web server, retrieved a page of data then closed the connection. If there were multiple pictures on the page, a separate open-close transaction was necessary for each one.
caveat: what I am describing here is HTTP/1.0 which still works that way. A second newer protocol called HTTP/1.1 was added in 1999. The keep-alive feature of this protocol keeps the TCP/IP connection open for a short time (programmable by the server) while the client makes multiple requests of the server.
Experiments in Secure Network Programming beginning in 1993 result in Netscape developing SSL v1.0 in 1994 which was never released. SSL v2.0 was released in 1995 with a number of security flaws which resulted in the release of SSL v3.0 in 1996. And now the story takes a strange twist.
- non-secure web transactions usually occur on port 80
- secure transactions usually occur on port 443 using (https = http with security)
One programmer, or perhaps it was a team, wanted to triple encode session keys in SSL 3.0 and so wrote "C" routines to do so. But they made a mistake in the declaration of one variable making it a "long" rather than a "long long". This had the effect of reducing the resultant key space to a much smaller (and now crackable) size. No one knows how much of this open source code mad it into other products.Two Security Forks
The IETF improved upon SSL 3.0 and might have called their new protocol SSL 3.1 or SSL 4.0 but, since they did not want people to continue to use the old libraries or even accidentally link against them, they named their new protocol TLS 1.0 (Transport Layer Security). They also modified the calling structure to prevent accidental linking. Security improvements continued with TLS 1.1 which morphed into TLS 1.2Conclusions
Not only has security allowed consumers to securely purchase goods from the sites like Amazon an eBay using credit cards and PayPal, it has allowed many companies to put their corporate records into computers located in the cloud. One neat feature of cloud computers is their ability to automatically backup data to other cloud computers located around the world. Companies would only do this if it was secure.
Almost anyone alive today will recognize that Oracle has been very successful in getting their flagship database product connected to communications networks, including the internet. The following timeline may shed some light on Oracle's view of these phrases.
|Oracle 8i||1999||i = internet (implemented by incorporating a built in JAVA VM)|
|Oracle 10g||2003||g = grid computing|
|Oracle 12c||2013||c = cloud computing|
this Epiphany is under construction
That last item should raise a few eyebrows for several reasons:
Okay so up until 2013, video cards were something you added to a computer system. In November of 2013, Sony released their PS4 (Play Station 4). All of main memory is composed of GDDR5 memory and the ATI portion of the 8-core Jaguar CPU has full-direct access to memory (as does the CPU). It is almost as if Sony put a CPU inside a video card rather than a video card inside a CPU-based computer system.
Back in 2005, Microsoft released the XBOX-360 sporting a tri-core PowerPC CPU built by IBM. Around the same time, Sony released the PlayStation 3 which employed an 8-core Cell Processor (7x SP6E; 1 x PPE) built by IBM. This doesn't sound like a big deal until you realize there were no multi-core CPU systems available in the retail marketplace. Yep, the fastest retail hardware was only available as a gaming console.
In 2013, Microsoft released the XBOX-One and Sony released the PlayStation 4 and both platforms are based upon an 8-core Jaguar APU from AMD. What's an APU? It is a CPU and Video Card Controller integrated into one chip (or chip carrier). I guess I do not need to point out that 8-core chips are not yet available in the retail market. Video consoles still lead the way
In 2016, Intel released a new core-i7 desktop processor featuring 10 cores (this extreme edition was aimed at the gaming community)
caveat: some of the following facts come from the book Thank You for Being Late (2016) by Thomas Freidman
The Integrated Circuit (chip)
|32||2,147,483,648||2011||last square of the first half of the chessboard|
|33||4,294,967,296||2013||first square of the second half of the chessboard|
Back to Home
Kitchener - Waterloo - Cambridge, Ontario, Canada.