3 posts tagged “open source”
One of the most fantastic things about desktop software is that it's completely editable. If you get inside the source code you can change variables, edit displaying content, change the way it looks, and add any number of features of your own to create an amazing experience for yourself. The main reason why the computer science industry thrives is because programmer's like to mess with other programs. We are at a point in our industry where the web should come this way to us as well. Extending the web world could in fact be the next age in our software industry. Let's take a look at a few examples and how we might want to change a few things or add a few things about it.
Google Presentations
Now, I'm no expert, but I've made use of javascript for quite some time now. And like any developer, I know how to modify code and change it do what I need it to do. Wouldn't it be great if we could do this in the way we modify desktop applications to create mods?
There's more to creating a euphoric web than just allowing custom themes... etc. One reason why any product will never be able to please the end-user to their very perfect needs is: our needs are always changing!! Making an application extensible and customizable is going to take more than building a plug-in framework with some theme templating system. It's going to take code, all of it realistically. Once more, getting to the point of complete modification of our online applications will mean that the community as a whole can come up with far greater additions to the web application than the original developers could ever think of.
I'm not saying open-source ports for web-applications, what I'm actually saying is that we can provide this kind of a system on our existing technologies. All it takes is a few new approaches in development.
- Component Based Development
if each component can function on it's own, adding components should be just as easy. - Create a well written MVC design.
having a separated view allows for the modifications to become even easier to the community. For instance, adding animations to the presentations would be really easy if the model allowed it. All it takes is another view that can resolve to a presentation item of some kind.
As apart of my 'Using Modern Operating Systems' class we're going into the core pieces of operating systems. One nice thing about this class is that the next time you approach an issue with a decision of performance you can actually make a legitimate comparison between operations on a computer. For instance, the argument for using a database over straight xml files. Of course, it will depend on the application, but in most cases you will want to use a database over straight xml files if you have a lot of input and output. However, if your data has little to no changes over time, you can be sure that caching the data via xml files can be much faster in your program.
At any rate, let's take a close look at modern operating systems and what each one is actually composed of. In today's world we have a lot of options for operating systems.





Of course including server systems like Unix... etc. But basically what we have in the modern world is usable graphical user interfaces layered on top of core operating systems. If you could take a look at the real differences between say Windows XP and Windows Vista, there are very few changes being made to the core system. In Windows Vista we have what's known as Process Protection. Process protection is really centered around DRM (or digital rights management). Normally when a process starts we can inject things like threads, and perform other various functions like debugging... etc. Process Protection doesn't allow us to perform these operations.
Nevertheless, let's go back for a moment. What is an operating system?
An operating system is nothing more than a set of software routines that sits between the application program and the hardware. While we create applications for our users, the operating system handles all the hardware functions like I/O to networking. What makes an operating system able to work on any number of hardware platforms is based on the principle of black-boxing. In other words, the operating system is just a layer of abstraction interfacing with essential black box hardware layers. While the application layer communicates with the operating system on services like: user interface (shell), file management, device management, processor (or process) management, memory management, and communication services. Each service communicating with hardwarde layers to perform said actions.
* It wasn't always this easy.
The first operating systems consisted of little more than collections of device management routines that supported input and output operations. Over time, it was us (the creative programmers) that developed file management routines, and while other programmers recognized the value, incorporated them into their own programs. After a while, standards evolved and joined with the various other management routines. The same was for management routines like networking. Once the operating system incorporated this feature, it made it easier to develop and practice new evolving standards.
Windows got it's start when it put a gui on top of MS-DOS. The modern Windows is really about the applications and services running on the system, much less than about the interfacing with the hardware components. Perhaps we will see some future enhancements when it becomes a standard to interface with technologies like voice input or multitouch.
Open Source!
Guess what? What's probably the main reason why open source works? Well for one, it opens up all those sub-routine tasks that we perform on a daily basis and it allows us to improve upon them; even standardize them.
Processors
What can we look forward to? Well for starters we can finally say that whatever intelligence a computer has, it's derived from the software not the hardware. After all, a CPU, a component who's primary job is to manipulate data, can do nothing without a program to provide control. So then what defines a program?
A series of instructions that tells the computer to perform one of its basic functions: add, subtract, multiply, divide, compare, copy, start input, or start output.
Each instruction has an operation code and one or more operands. The operation code points to the function to be performed and the operands identify the memory locations (data) that are participating in the operation.
In C# terms, int x = 2 + 3; The operand here is the + (or in instruction terms ADD) and the operands are 2, 3.
The processor has 4 key components:
-
ICU (instruction control unit) fetching instructions from memory.
-
ALU (arithmetic and logic unit) holding or activating the computer's instruction set
-
the circuits that add, subtract, multiply, divide, compare, copy, start input, start output
-
Registers (temporary storage devices that hold control incormation, key data and intermediate results)
-
clock (typically a seperate chip of its own to generate precisely timed electronic pulses)
While the arithmetic and logic unit executes the instruction in the instruction register, the actual instruction is fetched during instruction time and executed during execution time. Together, both steps make up a single machine cycle. This process is repeated over and over until the program is finished. The clock drives the process by generating pulses at precisely times intervals.
* These time intervals depend on the speed of the processor.
* For instance, a 1.5 gigahertz processor is driven by a 1.5 gigahertz clock that "ticks" 1.5 billion times per second or effectively executing 1.5 billion instructions per second.
Now that's a lot of processing! Imagine what you could accomplish in 1.5 billion instructions every second. Take that and compound it with every machine you own or you can come in contact with. This only re-evaluates the obvious that I tried to make clear in my post on "what is a web application?". Think about what we should be doing when we create technologies and applications more so than what we can create.
However, actual processing speed is typically less than the theoretical limit, since many instructions need more than a single machine cycle to execute. Coprocessors help this since they serve a special purpose in assisting the main processor. Like a math coprocessor for performing floating-point computations and a graphics coprocessor for manipulating graphics.
Microcode
There is a layer that exists between memory and the processor. Microcode or essentially firmware works with machine-language instructions, which subsequently translate into lower-level microinstructions before they are executed by the processor. Since microcode insulates the software from the hardware, hardware changes can be accommodated without affecting the operating system or the software. In some cases, operating system routines are actually implemented in microcode to improve efficiency.
* Introducing, the .NET Micro Framework
In our modern world of C#, we can now access core hardware components that would normally seem impossible to code to with our lovely .net language. Although the micro framework is relatively new, it opens up a lot of opportunities for coding on embedded systems even without an operating system to run on top of. It even handles interrupts like event handlers. :D
The last of this article is about input/output devices, storage and communication and linking them all together.
Input and output, access for people
Basic input devices on most computers are obviously keyboards and mouses. As each character is typed, they are stored in memory and then copied from memory the basic output device, a display screen.
* In the older days with MS-DOS, you could only store up to about 20 or 30 characters, after that the screen would stop reading your keyboard. It's similar to when you open up IE and start typing and after a few seconds of pause it puts all the characters into the textbox, some but perhaps not all.
The screen serves as a window on memory, giving the user the ability to view content. Display units traditionally relied on CRT technology but flat-panel LCD screens became popular as they continue to drop in price.
The image displayed on a screen is temporary; it fades as soon as the power is cut. Computers are obviously not limited to displaying characters, graphics, output in color and black and white can be routed to printers. Even more interesting about our printers is that we can use them to print out more than a display image like we can on our monitors. Several attempts have been made to create producable materials and real world objects with the advancing techniques with laser and ink jet printers.
![]() A circuit pattern printed on to plastic using an ink-like
substance |
Manufacturing computers is a costly and time-consuming undertaking. A microprocessor fabrication plant costs $2 billion and takes two full weeks to produce one silicon-based microprocessor. Few computer enthusiasts have the resources to make their own computer chips. However, researchers are developing ways to allow anyone to become their own microprocessor fabricator. Users will simply download microchip designs from the Internet and print out a working ink-based, plastic processor on a desktop fabrication machine, similar to an ink jet printer.
Several common input media rely on magnetic properties. For example, the characters on the bottom of most checks are printed with a type of magnetic ink called MICR (magnetic ink character recognition) tha tcan be read electronically. On a magnetic strip card, the strip of magnetic tape holds such data as a customer's account number and credit limit, and is read much like sound recording tape. A smart card uses an embedded integrated circuit chip to hold data. You can see how this process can be improved (unless otherwise easily hackable :P)
Other media are read optically like standardized test forms. White paper reflects light, black spots reflect much less, and variations in the intensity of the reflected light can be converted to an electronic pattern. OCR equipment uses the same principle to read typed or even handwritten material. Bar codes, like the UPC printed on most retail items, can be scanned at a checkout station. General purpose scanners are used to convert a hard copy to a bit pattern that can be manipulated by a computer. We can translate bit patterns to represent a printed page into descrete letters even.
Modern software will use multimedia, mixing text, graphics, sound, animations, and other elements to form an integrated interactive environment. Not too long ago, such processor- and memory-intensive apps would have been impossible, but increased processing speeds and memory have made them common. Today, most computers are sold with sophisticated sound systems, advanced graphics features, and other multimedia tools, and electronic gamers often enhance their systems with special joysticks and even tactile feedback devices.
In many ways, you could say that multimedia represents the state of the information technology art.
I'd like to go into storage but I'll leave that for another post, along with communication since those can go even futher in depth. But I would like to leave off with a note on opportunities to advance our current technologies. Just remember that if it's big enough to be a common software routine, you can be sure that it will be an integral part of our every day lives in the modern systems we use today.
Until next time
- Thomas
