10 July 2006

What is an Integrated Development Environment?

At my job there are a number of proprietary applications written in Visual Studio. Visual Studio is a Microsoft package of compilers/interpreters and debugging aids, collectively known as an "integrated development environment" (IDE).

Computer hardware responds to a type of computer language called machine code, which is expressed in strings of ones and zeros (binary code). Assembly languages, such as C, use symbols like conventional numerals and letters; in programming parlance, such symbols are called mnemonics, because they can be memorized. A program called an "assembler" translates assembly code for the computer processor. A compiler renders high-level programming languages such as Pascal, BASIC, or COBOL into machine code.

Assemblers tend to be specific to one particular processor; the assembler converts symbols into machine code in a general one-to-one correspondence; an analogy can be made to converting Imperial units of weights and measures into their metric equivalents. Compilers tend to interface with the OS kernel, so they are not so processor specific, but their output must be compatible with that particular kernel, while the compiler can only recognize code from a particular programming language (of which there are many). I say this because assembly languages and their assemblers are often referred to by the processor they served, while compilers are typically known for the language (and operating system) they were written for. The appropriate analogy here is that of translating from, say, English to mathematical notation. There is hence a correspondingly greater range of flexibility and functional specialization.

Very few programs today are written entirely, or even predominantly, in assembly code. Instead, programmers normally use a "high-level" language, such as C, Pascal, BASIC, or FORTRAN to write applications. "High-level" means that the programming language uses more familiar words as commands. Today, compilers and assemblers are typically so fast that there is relatively reason to use a lower-level language to program.

(main article)
An "interpreter" is a program that executes another program line by line, rather than translating it into assembly or machine code. When an interpreter runs a program, it responds to errors differently than would a computer running the compiled version of the same program. Since the compiled program is merely a translation, an error would potentially cause the computer running the program to crash. An interpreter can stop and send an error message.

Debuggers are programs that can identify problems in a program they are "running." They can also supply the programmer with clues as to the error in the program, such as, indicaticating where the error occurred in the program and a general diagnosis of the problem. Debuggers can also be used to defeat a program, such as those providing copy protection.

Screen capture of Macro Debugger, MS Word

Visual Studio is a common form of IDE, obviously; it supports several different computer languages: C#, J#, and Visual Basic. Another IDE that supports multiple programming languages is Sun Microsystem's NetBeans IDE (J2SE, web, EJB and mobile applications) and the open source Eclipse (which can potentially support C/C++, CFML, Fortran, Lua, PHP and Perl, Ruby, Python, telnet and database). Sybase Powerbuilder is both a type of computer language and an IDE for building Powerbuilder applications.

In the past, it was more common for IDE's to support a single programming language (e.g., Borland's TurboPascal). Multi-language IDE's typically include additional tools that help port an application to a different language, such as database mapping tools.

Labels: , ,

04 July 2006

Telecommunications Act of 2006 (Part 2)

(Table of Contents--Part 1)

Net Neutrality

Net neutrality is the concept under which internet service providers (ISP's) are treated legally like common carriers. As a "common carrier," they are legally required to provide access to all; they may not exclude anyone. In contrast, ISP's want to be accorded "free speech rights" that allow them to exclude digital signals to which they object.

The real motivation for challenging network neutrality is as follows: digital packets of data are transmitted on a "first-come first serve" basis; the internet is allegedly biased against large packets, as on voice or video. Hence, the legal principle of network neutrality was challenged on the grounds that, in the technical sense it was applied, it wasn't really neutral--it made voice-over-internet protocol (VoIP) and IPTV costlier than they out to have been. So the FCC rephrased its regulatory principles to declare that customers were entitled to the lawful Internet content of their choice.

So ISP's have lobbied for a two-tiered system of charging for internet transmission to alleviate congestion and finance infrastructure; the goal would be to reconfigure packet switching so that voice and video packets would reliably move through the system on time, i.e., allowing real-time transmission of data. This would alter the internet from a "dumb" network, in which data flows according to the relentless application of simple rules, to an "intelligent" network, like telephones, in which traffic is controlled and managed through human selection. It would increase the applications available online, and increase the opportunity for price discrimination by ISP's (thereby allowing customers desiring premium services to pay more for them).

However, there has been considerable speculation about how ISP's might abuse the power of discrimination--or an alternative definition of net neutrality. Finally, price discrimination would tend to replicate the economics of other kinds of broadcast networks. The ability of blogs to act as a countervailing voice online would be jeopardized as multi-tiered internet delivery systems essentially reduced the blog to an online personal file storage system, accessible only to the editor and her associates.
Wikipedia: Network Neutrality

Labels: , , , ,

02 July 2006

Common Gateway Interface (CGI)

The article is not related to computer graphics

This is a type of open standard* for web-based applications created in 1993. CGI applications may be written in several different languages, although the great majority are written in Perl or PHP. Indirectly, the most famous CGI is probably MediaWiki, the WikiEngine used to create Wikipedia. Another very popular CGI application is Movable Type, a stand-alone blogging engine. CGI applications are also used for e-commerce and digital news media, such as newspaper websites.

CGI applications are programs designed to be accessible from any platform. Unlike Java applications, however, they don't run from the web browser; they run from the web host. CGI applications accept input from users and use that to generate new webpages, such as archive pages on a weblog, or entries in a wiki. These are examples of content management softwares (CMS); Flickr.com is another example of a CMS implementation [*].

For the purposes of this article, a "user" is either the webmaster or someone authorized by the webmaster to manipulate the website's contents. For example, if the application is Movable Type, then the user is the one who logs in and posts articles. I use the term "visitor" to refer to people who don't have any special authorization, such as the usual readers and viewers of the page. In the case of wikis, any visitor may become a user by registering and logging in. An application is the program that generates web pages for the site; so, for example, an installation of the application Movable Type would be used to maintain one or more blogs. A user can access the application from any web browser, but the application resides on the server where the website is hosted. Like a queen ant or queen bee, the application remains eternally in its CGI bin (a folder on the webserver), spawning pages. When users update them with fresh information, the CGI application overwrites them.

CGI applications are also used for e-commerce because of their ability to interact with forms filled out by visitors. Database management is an integral part of the CGI standard, and it's immanently compatible with the entire concept of a server-based application. MediaWiki is an example of a CGI application that stores its contents in tables, and generates
*standard: more specifically, this is an application programming interface (API).
SOURCES: "The Common Gateway Interface," National Center for Supercomputing Applications (NCSA)--not especially helpful, actually; "An Introduction to The Common Gateway Interface," University of Toronto; Wikipedia entry;

Labels: , , , ,

Some notes on Java Generally

Caveat: this website is NOT an authoritative source of information. Notes and links are for my own education. I do not profess to be an expert.

Java is a programming language developed by Sun Microsystems in the early 1990's. It was unusual in that it was designed to be platform-independent, which is to say, it could run on any type of computer without any modification. The only requirement was that the computer had to have a type of program called a "Java virtual machine," which is something built into the web browser. Careful readers will point out that Java really wasn't platform-independent at all, it just had a platform which used the web browser as an operating system. Getting the browser to run on Macintosh, Windows, or whatever else one used, was someone else's problem.

Java is not to be confused with JavaScript, which is something else entirely.

Java is designed to run on the browser, so that the host for the website merely delivers the code and program-related data to the browser; the browser then creates the website "experience." This is in contrast to CGI applications, which are also dynamic, but which run entirely on the host. It is also designed to be very similar to C++, which was then the most commonly-used object-oriented programming language. Its developers argue that it was optimized for speed and reliability, too. Java is designed to support multithreading.

In Java, all source code is first written in plain text files ending with the .java extension[*]. Those source files are then compiled into .class files by the compiler[*]. A .class file is written in bytecodes — the machine code of the Java VM. The java launcher tool then runs your application through the site visitor's web browser. There is an integrated development environment (IDE) available to Java programmers called NetBeans (a cute allusion to coffee, again); however, it's not absolutely necessary for developing in Java.

In addition to the more conventional Java arrangement, in which a website is delivered as an executable program and automatically run by the browser, there is the CGI-like Java Servlet. An installation of Java Servlet uses information input by the user to create temporary pages.
web browser: programs such as Microsoft Internet Explorer, Netscape Navigator, Mozilla Firefox, Apple Safari, NCSA Mosaic, and so on. Browsers are, naturally, a large collection of simple programs which allow a computer user to navigate the world-wide web.

code = instructions that collectively make up a computer program; data = information that the program performs operations on; for example, a database management software (DBMS) has the program that manages data, and the data being managed. Website "experience": not a formal term of art, as far as I know; but while some websites (like this one) are mostly static and just display words and pictures, others may be interactive, or animated.
ADDITIONAL READING & SOURCES: Java Online Tutorial, downloaded here; The Java Language Environment, by James Gosling & Henry McGilton (1996); "Beginning and Intermediate-LevelServlet, JSP, and JDBC Tutorials," ${coreservlets.com};

The Java NetBeans IDE may be downloaded for free here.

For a critical view of Java, "Why Java Sucks," B. Jacobs. I freely admit the criticisms were too recondite for me to understand, and are from the point of view of a developer. See also "Java sucks," Jamie Zawinski, which is easier to understand.

Labels: , , ,