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).

Compiler
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.

Interpreter
(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
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

VARIETIES OF IDE's
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.
SOURCE:
Wikipedia: Network Neutrality

Labels: , , , ,