Librenix
Headlines | Linux | Apps | Coding | BSD | Admin | News
Information for Linux System Administration 

C Source Code Example: Multithreaded RPC Server

Up
vote
Down

This can be considered an example, how to build multithreaded RPC Server for White Box Linux 3. Actually, approach described is universal , i.e. doesn't depend on particular code has been modified.

[Update June 26, 2005: Librenix is now featuring a C language multithreaded network socket programming game server project for Linux called Space Tyrant. As of June 26, there have been four code releases and the game is already playable from telnet.]

(here are some white canvas prints) read more...
mail this link | permapage | score:9055 | -Boris Derzhavets, May 14, 2005 (Updated: April 24, 2012)

Scripting: Put a clock in your bash terminal

Up
vote
Down

In the original version, the cursor positioning didn't work on my Mac OS X system. If that happens to you, try this simplified variant:
  #!/bin/bash
while true
do
tput sc
tput cup 0 60
echo -en `date +"%H:%M:%S %F"`
tput rc
sleep 1
done
Also, note that you'll need to run either script in the background to use your terminal.
The script saves the current cursor position with an ANSI escape sequence instruction. Then, using the tput command, the cursor is sent to row 0 (the top of the screen) and the last column minus 19 characters (19 is the length of HH:MM:SS YYYY-MM-DD). The formatted date command is displayed in green inverted color. The cursor is then sent back to its original position with another ANSI sequence that restores the original saved position.
read more...
mail this link | permapage | score:9050 | -Ray, January 22, 2008

Unix signals list

Up
vote
Down

Processes are required to respond to signals sent to them. This is one way a user can communicate with signals and control them.
Signals are asynchronous events that can occur to a running process and may be caused by hardware, software or users. Signals are numeric integer messages that have been predefined so they understand what these signals mean. When a process receives a signal, that process must respond to the signal. Uncaught signals will cause default actions to take place, which often means the process is terminated. If you use “kill -l”, or “trap -l” you can get a list of available signals:
read more...
mail this link | permapage | score:9046 | -aweber, December 31, 2010

Vim Plugins: matchit.vim

Up
vote
Down

This is the third post in the article series "Vim Plugins You Should Know About". This time I am going to introduce you to a plugin called "matchit.vim".

Matchit extends the existing functionality of “%” key (percent key). I'll first briefly remind you what the original “%” does and then explain how matchit.vim enhances it. read more...
permapage | score:9041 | -pkrumins, February 6, 2009

Space Tyrant Index Page: Linux game server development project

Up
vote
Down

This page links to the various articles that have been published about Space Tyrant, a multithreaded, network socket programming Linux game server project in C.

[Update: 07Jun2014 You can play a development version of an upcoming MMORPG in text mode at telnet://textMMOde.com:2323
or, on a command line, enter:
telnet textmmode.com 2323
to log in and play. This game is based on Space Tyrant and the scenario is based on a modified Starship Traders.]

[Update: 03Jun2014 Starshiptraders, the parent of Space Tyrant, and the descendant of Czarwars, Lives Again]

Read below for the history and overview or just click these links for the articles:Space Tyrant is a C language Linux game server development project. It started out in February, 2005 as a humble echo server with high ambitions. On March 18, ST had its design and intentions announced to the world.
Today we kick off a new multithreaded, network socket programming project which we will call Space Tyrant. Our mission is to write an open source, multiplayer, networked, strategy game in the C programming language. The goal of this project is to make a solid code base which implements a simple space trading game upon which other games can then be built. The game will be a subset of The Last Resort (TLR) that currently runs at Ioresort.com. This project will be a learning exercise for me as well as for any interested readers. The current state of the source code will be released with each article update.
Source code to ST, then just an echo server, was not released.

Then, on March 27, 2005, ST was promoted to a crude chatserver.
This is the first code release of Space Tyrant. This is an early stage of development and, at this point, only implements the listening thread, the two IO threads for each player connection, and a skeletal game logic thread that does little beyond proof-of-concept code.
Next, on May 30, 2005, ST started to resemble some sort of incomplete text game.
It’s now possible to connect to the game via telnet and to create an account, log in, and be issued a ship. Once you’re logged in, there is a universe to explore filled with ports for buying and selling goods and planets for scooping free goods. From those trading activities you can earn money, called microbots. Other than trading to earn more money, you only use your microbots to buy fighters -- which you can use to attack other players or the neutral fighters that guard some sectors.
As of this release, the source code was placed under the GPL, version 2.

On June 26, 2005, Space Tyrant was released with many shiny new abilities. Players can now deploy fighters to guard sectors, navigate with the aid of an autopilot, rank the various players in the universe, and sleep peacefully knowing their alternate universe is being backed up constantly by a sporty new backup thread. Yes, good times are surely upon us.
If you’re looking for a planet, type the ‘L’ command that you would normally use to land on a planet in your sector. In the absence of a planet, the L key will engage the autopilot which will search for the nearest planet and give you a ‘/’ command to autowarp to it.
There is normally a copy of the development version of the server running on my decTOP on port 23. To access it, type (or click, if it works for you) the following command:

(telnet to my ST server)

The current development version of the code is usually at http://librenix.com/st/st.c but the individual articles link to the specific versions discussed in each article.

You can mail me about the project at spacetyrant [at] librenix.com -- or you can just telnet into Space Tyrant, as listed above, and send me a radio message. I'm likely to get that faster. ;)


The Space Tyrant project has a new website, SpaceTyrant.com, where the latest source code is always available. Also, new articles about ST programming and about ST gameplay will be posted there as they come available.


Information on The Last Resort follows. TLR is one of the two games that Space Tyrant is intended to replace someday. Space Tyrant has a long way to go before it replicates TLR's 25,000 lines of C code. So far, it has reused only about 40 lines of TLR code, a handy 'bit-plane' sort dating back to 1998.

  • TLR Survival Manual
  • Is this game for you? read more...
  • mail this link | permapage | score:9041 | -Ray, June 25, 2005 (Updated: June 7, 2014)

    Programming the Sony PS3 SPE cores under Linux

    Up
    vote
    Down

    Take even greater advantage of the synergistic processing elements (SPEs) of the Sony PS3 in this installment of Programming high-performance applications on the Cell BE processor. Part 2 looks in depth at the Cell Broadband Engine processor's SPEs and how they work at the lowest level, while Part 1 showed how to install Linux on the PS3 and explored a short example program. read more...
    mail this link | permapage | score:9027 | -Ida Momtaheni, February 21, 2007

    Import XML into OpenOffice Calc with XSLT

    Up
    vote
    Down

    When it comes to importing generic XML into OpenOffice, the user is on his own. This article offers a quick XSLT tool for this purpose and demonstrates the Calc import of records-oriented XML. In addition to learning a practical trick for working with Calc, you might also learn a few handy XSLT techniques for using dynamic criteria to transform XML.
    The popular open source office suite OpenOffice.org is XML-savvy at its core. It uses XML in its file formats and offers several XML-processing plug-ins, so you might expect it to have nice tools built in for importing XML data. Unfortunately, things are not so simple, and a bit of work is required to manipulate general XML into delimited text format in order to import the data into its spreadsheet component, Calc.
    read more...
    mail this link | permapage | score:9019 | -solrac, April 4, 2005

    Space Tyrant: A threaded C game project: First Code

    Up
    vote
    Down

    First code: This is the first code release of Space Tyrant. This is an early stage of development and, at this point, only implements the listening thread, the two IO threads for each player connection, and a skeletal game logic thread that does little beyond proof-of-concept code.

    The design of the code was discussed in this article so you should probably go back and read that article if this is your first brush with this project.

    The first code release -- what we will be discussing in this article -- is online as spacetyrant1.c. Download it as well as the shell script you’ll need to compile it: makeit1.sh. The script should work under both Linux and Mac OS X. The code will require a single line change to compile under Mac OS X. Search the code for the string OSX to find the line to decomment and the corresponding line to comment out.

    Currently, the program allows multiple people to connect using telnet and echos anything they type to all other connected sessions. Some familiarity with the C programming language will be assumed in this article and those to follow.

    Configuration constants: There are several ‘configuration constants’ defined by #define statements. The key constants and their meanings are:

    MAXTH: This number represents the maximum number of users that can connect simultaneously. This constant is used to set limits on loops and to define the number of elements in various arrays. This number must be a power of 2.

    MAXTHBITS: This is simply the number of bits necessary to form an unsigned int to index into arrays of MAXTH size. This number is used to declare bit fields for use with various items that occur MAXTH times. In the code we use a MAXTH of 256 and since 2^8 equals 256, MAXTHBITS is set to 8. Note that if you change MAXTH, you must make an appropriate change to MAXTHBITS!

    MAXBUF: This is the number of buffers used in various places. For example, the input threads each get MAXBUF numbers of buffers.

    MAXBUFBITS: This number matches MAXBUF in that it is the number of bits necessary to express the number MAXBUF in the same way that MAXTHBITS relates to MAXTH.

    MAXLINE: This is the maximum length (in bytes) that is allowed for network input and output. The IO buffers, for example, are declared to be size MAXLINE + 1. The ‘+ 1’ is to allow room for a terminating 0.

    RADPAD: This is added to MAXLINE to determine the length of a radio buffer. Radio buffers need to be larger than IO buffers since they must allow room for headers.

    Data structures: Next, we declare a struct to contain most of the data associated with each thread. Note that this struct contains no player-specific data; it is used only to contain the data necessary to define an input thread and an output thread used to define one user connection. ‘threc’, as we will call the struct, will be an array with MAXTH elements. It will contain the thread ID of both the input and output threads, the timestamp of the last input from the input thread, the number of the socket descriptor, and various flags and indexes that will be used to coordinate the activities of the input, output, and game logic threads. Look at the code comments themselves for details on the variables.

    Note that MAXBUFBITS is used to declare the size of inndx, outndx, inptr, and outptr. These variables, when incremented past the number of buffers, wrap back to zero, making it easy to implement ring buffers. That is why the MAXBUF number must be a power of 2.

    The thread functions: In this program main() has two primary functions. First, it calls any initialization functions and clears the various data structures and spawns any other permanent threads. Second, it goes into an endless loop of accepting user connections and spawning IO threads to handle the newly connected users.

    The next thread function, gameloop(), has the hard job. It constantly loops though the input buffers, looks for input that needs to be processed, and does it. While looping around the buffers, it also looks for input threads that have gone idle and terminates (‘reaps’) them. Currently, the only input processing it does to call a function named broadcast() with any data it finds in the input buffers. The broadcast() function simply copies the input to output buffers. This bit of processing is for proof-of-concept purposes only and will be replaced by actual game logic as it is developed.

    The last important thread functions, userin() and userout(), exist in multiple pairs to perform network input and output duties for each connected user. The userin() thread reads the network connection and loads data into the next available input buffer (‘inbuf’). It then timestamps it, and goes back to waiting for more input. The userout() thread loops continously waiting for anything to appear in the next output buffer (‘outbuf’). When new data is placed in an output buffer by the gameloop() thread, userout() writes it to the user’s network socket.

    Note that because userout() and gameloop() loop continously, they sleep after each ‘idle’ loop. That is, when they pass through their logic loop and find no actual work to do, they call the usleep() function to sleep a tiny fraction of a second. This sleeping prevents them from consuming unnecessary processor cycles.

    [Update, June 25, 2005: A Space Tyrant home page has been created as a central index to the various ST articles, links, and files.]
    mail this link | permapage | score:8993 | -Ray, March 27, 2005 (Updated: June 25, 2005)

    PowerPC assembly language

    Up
    vote
    Down

    The POWER5 processor is a 64-bit workhorse used in a variety of settings. Starting with this introduction to assembly language concepts and the PowerPC instruction set, this series of articles introduces assembly language in general and specifically for the POWER5. read more...
    mail this link | permapage | score:8987 | -solrac, April 4, 2007

    Tutorial: Linux Dialog Boxes

    Up
    vote
    Down

    Dialog lets you create dialog boxes from Unix/Linux shell scripts...
    'dialog' is a utility for building console-based 'front ends' in UNIX like operating systems.

    In this brief tutorial I am mentioning the usage of few important basic controls available with this 'dialog' utility and later I have created a very simple front end application in UNIX bash scripting using dialog.
    read more...
    permapage | score:8971 | -Ray, January 1, 2010

    The Real Microsoft Monopoly

    Up
    vote
    Down

    The courts have ruled that Microsoft holds a monopoly position in Intel PC Operating Systems. Business users have long been aware of Microsoft's lock on office productivity applications that require them to use MS Office in order to remain compatible with their business partners and customers. And web-surfing users are now using Internet Explorer in a ratio of about 8:1 over alternative browsers.

    But one aspect of Microsoft's monopoly is more fundamental than any of those; the investment in skill, experience, training, and tools of Windows software developers themselves.

    Those programmers, who have logged many long sessions of coding for the Windows environments, and with their deep immersion in its assumptions, tools, and API's, represent millions of person-years of Microsoft assets.

    For years it has been a difficult decision for a professional developer to choose an environment other than Windows. The scale of that market dwarfs its competitors and opens to developers many more specialty markets than any alternative platform. Further, the sheer size of the Windows installed base is seen as a hedge against market change. Windows is perceived as a platform that will be with us for a long time to come.

    Because it can take years of effort to reach the highest levels of productivity in a complex development environment, Windows-specialized programmers have, through economic necessity, been unable to switch to a different platform. With a large majority of developers writing code for Windows, the continued dominance of Windows applications was also assured. The monopoly was elegantly self-perpetuating.

    Many companies, failing to appreciate the depth of Microsoft's monopoly and its determination to defend it, squandered valuable resources probing Microsoft's markets for an opportunity. After several spectacular failures, it seemed nearly impossible for such a locked market to break free of this cycle.

    It seemed impossible, that is, until recently. Windows is no longer leading the growth curve among operating systems. The near perfect seal at the margins of the monopoly, it turns out, is only effective against competitors with a requirement to make money.

    While Microsoft once made the fending off of mighty IBM look easy, the Linux phenomenon presents a very different kind of challenge. It needs no profits, corporate partnerships, or investors in order to succeed. Linux depends only on hobbyists' passion for programming and their self-imposed standards of quality in their own work. Further, the Linux community seems to draw motivation from its dissatisfaction with the computing landscape that Microsoft has created.

    This noncorporate juggernaut has grown so large that it is spilling into commercial markets on many fronts. Now, with the additional support of several large corporations, the expansion rate of Linux could actually accelerate.

    Much of the continued growth of Linux will come at the expense of Microsoft. Others will lose business along the way, of course, but the ubiquitous presense of Microsoft astride the market presents many targets that are simply too broad to miss.

    Unfortunately for Windows programmers, at some point the rapid growth of Linux will force the saturated Windows market to start shrinking. Soon thereafter, the seller's market for Windows programming services will become a buyer's market -- and pay scales will begin to drop. Although the computer industry has experienced many of these disruptions in the past as new competition entered the market, this will be the largest such contraction by far.

    Confidence in the impenetrable market lock of MS Windows is slowly fading. Some years from now when this trend reversal is complete and documented, we will look back to a single turning point to call the end of Windows' dominance. I'm making my pick a little prematurely. I think the critical point was IBM's decision to support and invest heavily in Linux.
    mail this link | permapage | score:8958 | -Ray, July 9, 2001 (Updated: April 18, 2007)

    Online Ruby Interpreter

    Up
    vote
    Down

    Try Ruby online with this online tutorial / interpreter. It runs in your browser.
    Ruby is a programming language from Japan (available at ruby-lang.org) which is revolutionizing the web. The beauty of Ruby is found in its balance between simplicity and power.

    Try out Ruby code at the prompt above. In addition to Ruby's builtin methods, the following commands are available:
    read more...
    permapage | score:8949 | -Ray, November 30, 2005

    Space Tyrant: A threaded game server project in C

    Up
    vote
    Down

    [Update, June 25, 2005: A Space Tyrant home page has been created as a central index to the various ST articles, links, and files.]

    [Update, March 21, 2007: A Space Tyrant has its own website! It's small but growing and will provide quick access to the latest code and developments in the ST universe.]

    Space Tyrant: Today we kick off a new multithreaded, network socket programming project which we will call Space Tyrant. Our mission is to write an open source, multiplayer, networked, strategy game in the C programming language. The goal of this project is to make a solid code base which implements a simple space trading game upon which other games can then be built. The game will be a subset of The Last Resort (TLR) that currently runs at [offline]. This project will be a learning exercise for me as well as for any interested readers. The current state of the source code will be released with each article update.

    The game design: While my TLR game consists of over 25,000 lines of C source code and supports a web interface as well as telnet and a graphical client, this code will be far smaller and simpler. It will initially only support telnet and will implement a far simpler game design.

    Players will be able to telnet into the game, create an account, and play in a universe that contains ports, planets, as well as other players. Each player will be issued a starship, some cargo holds, and an amount of starship fuel. Additional fuel will be issued hourly and will accumulate in the starship. Fuel will be used to move the ship between sectors -- locations within the game universe -- and to dock with ports. Once a ship runs out of fuel it can't move at all until new fuel is issued.

    Players will be able to buy and sell commodities (Iron, alcohol, and hardware) between the three different kinds of ports. Each port type will sell one of the three commodities and buy the other two. Prices will be based on supply and demand with rarely-used ports offering the better prices.

    With the money players earn trading they will be able to buy more cargo holds to make their ships more efficient for trading. They will also be able to buy fighters -- small military drones -- that can be used to attack other ships or deployed to guard a sector and its contents. The fighters carried with a ship will guard it against attacks from other players.

    Games will run for a predetermined length of time, then reset and start anew.

    The programming model: Now, on to the software design. I've compared and considered various models for the server design. TLR is based on the forking model using inetd or xinetd to handle the listening and forking. While the forking model is inherently distributable to multiple processors, it introduces inefficiencies (forking multiple processes) and makes interprocess communications more difficult and slower.

    Next, I considered a non-blocking, single process model. In this approach, one process handles everything in a single thread. It would use non-blocking IO (read and write functions that never wait for completion but, rather, return immediately if they aren't ready to read or write actual data). The thttpd web server is an example of a non-blocking, single process server. It's extremely fast and efficient. However, this model is quite complicated to code, and, I believe would make it more likely to introduce subtle timing bugs.

    Next, I considered a pure multithreaded, single process model with a thread for each player. While appealing in many ways, this model would require the same kind of coordination between threads that the forking model requires between processes. Such interprocess communication would be simplified in that the various threads share memory, but the coordination issues otherwise remain the same.

    Last, I considered another multithreaded model, this time with only IO threads for each user and a single thread that implements all game logic. While that one central thread might someday be a bottleneck that limits scalability on large SMP systems, it does distribute the IO on any additional processors that might be present, and requires minimal coordination. In short, this model combines the logic simplicity of the non-blocking single process model with the coding simplicity of the threaded model, while separating the IO from the main logic. There will also be two other simple threads in this model. There will be a thread that listens for new connections and spawns the IO threads for each new connection. There will also be a thread that writes the data to disk periodically.

    This is the approach that I intend to take for this project. The code will be written for both Linux and Mac OS X.

    More info: I have set up an email address for programmers following this series to provide recommendations, bug reports, and other feedback. Send email about this project to spacetyrant [at] librenix.com.
    mail this link | permapage | score:8946 | -Ray, March 18, 2005 (Updated: July 26, 2008)

    Tutorial: Build your first application with Spring Framework

    Up
    vote
    Down

    Learn how to create a simple application on Apache Geronimo using the Spring Framework, a layered Java Platform, Java EE and J2EE application framework. Develop, configure, and deploy your first application based on the Spring Framework. You'll also see how Geronimo's Web Console simplifies deploying and managing Web applications. read more...
    permapage | score:8896 | -solrac, October 3, 2006

    Mono-culture and the .NETwork effect

    Up
    vote
    Down

    Consider a future where Microsoft has succeeded in migrating most Windows development to the .NET framework. With the considerable power that Microsoft wields over corporate desktop computing, the success of .NET is easy to foresee.

    Now, imagine for a moment that Mono, following in .NET's footsteps, is also hugely successful. Further, imagine that, in its success, Mono displaces a large portion of traditional Linux software development over the next few years.

    I believe that if the above scenario becomes reality it could lead to a disaster for Linux. In such a future, Microsoft would have tremendous leverage over Linux, Linux programmers, and businesses using Linux.

    Microsoft can, at a carefully selected time, change key interfaces, sue for patent infringement, and release otherwise standard .NET components that break or obsolete pieces of Mono. They can also use the powers of the DMCA to prevent Mono developers from gaining access to obfuscated components of .NET technology. While hobbyists and Linux-centric companies will be able to withstand such inconveniences (with the possible exception of patent suits, of course), general businesses and organizations will not be able to resist such pressure.

    Of course, Microsoft is well aware of how this scenario could unfold and has thought of many more exploitable details than a casual observer such as myself.

    Mono, if successful, is a gift from heaven to Microsoft that, when the timing is right, can be used to set Linux deployment back years, or worse, depending on the devastating psychological and economic effects such a maneuver would have on Linux developers and businesses.

    For Microsoft, their best strategy to do real damage to Linux is to make it easy for Mono to succeed while carefully laying their traps. They can quietly go about the business of patenting all of the key functions of .NET. Anyone who has followed the trend of software patents must realize that Microsoft could have dozens of patent claims covering .NET before Mono rises to prominence.

    Then, Microsoft need only wait. The optimum time to shut down Mono will be after much Linux development has committed to it. By then, Mono technology will have infected many projects. Perhaps worse, it will be easier for Mono programmers to simply switch platforms and become Windows developers rather than learn alternative methods and tools of Linux development. Programmers have to eat and software development houses must pay the bills. In such a scenario, there is not a year to burn while everyone ramps up their skills with new tools and practices.

    Meanwhile, businesses will be forced to abandon any Linux packages that are .NET-encumbered. Since a .NET version of each Mono-based program would already exist, it would take only a few such packages to convince a business to migrate off of Linux. The headaches of replacing such packages under Linux need only exceed the alternative headache of simply switching to Windows.

    A company with their own custom Mono-based software would have fewer options. Microsoft, however, would likely provide an easy solution; simply move the Mono software to .NET and it will all be legal.

    I am not the first person to have thought about this. Several Slashdot users have posted cautionary messages about developers placing their trust in the good intentions of Microsoft. [1, 2, 3, 4, and 5].

    Dave Winer also seems to wonder about Microsoft's oddly open behavior:
    The first clue should be that Microsoft is not protecting the source of .NET, in fact they're publishing it, with some constraints, but if you want to see how they do it, they say there will be no mysteries and no poison pills. So they're making it not impossible to clone. Why are they being so generous? (A little sarcasm, sorry.)
    Even Miguel de Icaza1, the founder of the Mono project, acknowledges the compatibility hazards:
    If Microsoft decided to make our life really hard in terms of compatibility, it would also hurt its own customers. If it changes the APIs, that affects its customers as well. So I think the APIs will remain fairly stable, and I hope that Microsoft won't go into proprietary protocols or protocols that would make it really hard for us to implement Mono. There's is always the possibility it will do so. Microsoft has some strange patterns in terms of how it competes. I really hope it will "behave like a good citizen," as Steve Ballmer said recently it would.
    What I've described here is probably a worst-case scenario; in all likelihood Mono will not be so successful as to cause a large problem for Linux if and when Microsoft decides to kill it. However, even in a favorable sequence of events, Microsoft will still hold the power to cause a large amount of open source effort and code to be lost.

    1. Miguel rebuts one of my points here.
    mail this link | permapage | score:8853 | -Ray, October 13, 2003 (Updated: October 14, 2003)

    Porting C / C++ code from Windows to Linux / Unix

    Up
    vote
    Down

    Software programs are often made to run on systems that are completely different from the system in which the program is coded or developed. This process of adapting software across systems is known as porting. This article shows you how to port your software from one environment to another. read more...
    permapage | score:8851 | -BlueVoodoo, September 20, 2007

    Build Apps with Android SDK, Eclipse, PhoneGap (Ubuntu 10.10)

    Up
    vote
    Down

    This tutorial describes how you can set up a development environment for building Android apps on an Ubuntu 10.10 desktop using Eclipse, the Android SDK, and PhoneGap. I will describe how to build Android apps from the command line with PhoneGap and from the GUI with Eclipse and PhoneGap and how to test them in an Android emulator and on a real Android device. PhoneGap allows you to develop your Android applications using web technologies such as HTML, CSS, and JavaScript (e.g. with JavaScript libraries such as jQuery/jQTouch), and it will turn these web apps into native Android apps (in fact, PhoneGap supports multiple platforms such as Android, iPhone, Palm, Windows Mobile, Symbian, so you can use the same sources to create apps for multiple platforms). read more...
    mail this link | permapage | score:8839 | -falko, January 27, 2011

    Review: DevelopGo: A Linux Live CD for Programmers

    Up
    vote
    Down

    DevelopGo is a special Live CD released by the Onebase Linux Project. As the name indicates, it is meant exclusively for programmers.

    Although I am a Windows Programmer, I was searching for such a Live CD that would allow me to experiment with different types of toolkits and IDEs available in Linux. DevelopGo matched exactly what I wanted with a suite of developer tools and compilers.

    After downloading and trying it, I found it very useful and would like to share my thoughts with other Linux programmers who might be interested.

    About the DevelopGo Live CD
    The booting speed of the Live CD was fast and it loaded into a full blown KDE desktop. I liked the theme, as it gave a 'Programmers' look and feel.

    On the Desktop there were many icons like Editors and Utilities which contained shortcuts for accessing programs. Another Icon, named Getting-Started, was a single page catalog of all the software present in the Live CD.

    The list was huge and covered most of the popular tools available for Linux. It was a total development environment that included header files and libraries of all the compiled applications. It included other features of Onebase Linux like Hard-Disk Installer, Docking, USB disk save, etc., which are beyond the scope of this article.

    Languages and Toolkits
    As mentioned in the Onebase's Website, the user is to ready to program by simply booting a CD in over 11 languages and 5 toolkits. The following programming languages are supported in DevelopGo 1.0:
    • High-level Languages: Java, C, C++, Obj C, Mono C#, Boo, COBOL
    • Scripting Languages: Perl, Python, BASH, TCL, Ruby, LUA
    • Toolkits and Bindings available in this Live CD
    • Toolkits: QT, GTK+, TK, Lesstif, FLTK
    • Bindings: Ruby-Gnome2, KDEBindings, PyKDE, PyQT, PyGTK, Gnome-Python
    This gave me the opportunity to learn and program with many languages and toolkits.

    Since my programming interest is based on scripting, the different bindings helped to select a suitable toolkit for my software development right away. But there were tradeoffs like an old GCC version 3.4.3. This is understandable as the new GCC 4.0 provides many new changes and features but is not quite stable. A major Perl GTK binding was not included with DevelopGo.

    IDE and Editors
    DevelopGo comes with a number of Editors and Integrated Development Environments to choose from.
    • Java Programming - The Popular Eclipse IDE version 3.1
    • Mono C# Programming - MonoDevelop .NET development environment with API documentation
    • C, C++, Obj, QT, TK, Perl, Python, Ruby - KDevelop 3.1.2 IDE
    • GTK and GNOME programming - Anjuta 1.2.2 Development studio
    • Web Programming - BlueFish Editor
    • Python and Ruby Programming - Eric IDE
    • GUI Designers - QTDesigner, Glade and Kommander
    • Apart from this list, there were also other console based editors and compilers.
    The Loading time of these applications were good. Most of these editors were stable and ran without problems. Except, BlueFish could have been replaced for Nvu, Otherwise the inclusion of editors like MonoDevelop, Eclipse was great.

    Utilities
    Many useful developer utilities were present such as CVS, a version control system, Debugger (GDB), and a Project Management Tool called Planner.

    There is also DistCC for performing distributed compilation of code and ccache which caches object files and compiles only the changed files making compilation faster.

    Another interesting part of DevelopGo is that it includes lots of offline developer documentation on various subjects, despite most of them have been taken from the Internet. These documentation includes guides, API Reference and Code Examples for various compilers and IDEs.

    There were firefox bookmarks to Linux based Programming Websites and Pages.

    Conclusion
    I felt that the main missing factor from this Live CD was the non-availability of DataBase Languages like MySQL. However this can be overcome by installing it to Hard-disk and downloading the available Database servers from the Onebase Software Gallery.

    Overall I feel DevelopGo is complete and valuable for a Linux Programmer and a good starting point for building Linux Applications.

    Visit the Onebase Website for more information and to download the DevelopGo ISO.
    mail this link | permapage | score:8809 | -kumpd, August 25, 2005 (Updated: March 21, 2007)

    String matching in regular expressions

    Up
    vote
    Down

    Use parentheses to create the string matches you need in regular expressions. Parentheses allows you to use pipes for multiple matches. read more...
    permapage | score:8798 | -aweber, September 12, 2011

    Why Programmers are not Software Engineers

    Up
    vote
    Down

    People toss about the term 'software engineering' as if programming were just another engineering discipline.

    Programming is 100 percent design. And that design is vastly more complex than the typical true engineering effort of comparable cost. Said another way, an engineering project of similar logical complexity to a software program is far more expensive.

    Much of the reason for that low cost is that programming has no comparable build phase that, in some other field, might consume the vast majority of the total cost.

    Programming is dramatically cheaper than a similarly complex physical project.

    Programming doesn't fail in the same sense that an engineering project can fail. Programs never fail because of faulty materials or shoddy workmanship -- except in the compilation phase, perhaps, but in that case the program doesn't even exist. Programs don't fail because of use beyond their rated capacities, although they may fail because they foolishly accept input or a load beyond their capacities.

    Programs only fail due to design flaws.

    Ignoring terminology for the moment, the reason that software quality is so much lower than one might expect is fundamentally economic. The 'engineering' phase, the design, represents nearly the entire cost of the actual development. The only place where costs can be shaved is design. The building blocks of the actual construction, opcodes, are essentially free.

    Software doesn't meet engineering standards, largely for economic reasons.

    And, lastly, an engineer is one so designated by government. With that title comes certain legal responsibilities. 'Software engineers' are neither designated as such nor are they held to engineering standards.

    Engineer is a title conferred by the state and it may not even be legal to call yourself a 'software engineer'.

    On the other hand, the best programmers I've met don't call themselves engineers at all. They call themselves programmers, coders, and hackers. Evidently, there is no shame in that. Let's leave the engineering title to those who have earned it and accept the responsibilities that come with it.

    We should be thankful that we aren't held legally responsible for the performance of our designs.
    mail this link | permapage | score:8786 | -Ray, November 25, 2002
    More coding articles...
    Abstract Art by Ray Yeargin

    coding headlines

    PHP: Associative Array Tricks

    Ten more One-Liners from CommandLineFu explained

    Tutorial: UDP socket based client server C programs

    Tutorial: Write your own operating system

    Create native looking Firefox web apps

    I wrote my first programming e-book: Awk One-Liners Explained

    Vim Plugins: ragtag.vim

    Why software sucks

    Tutorial: Write a Qt program with Qt Designer

    Java: Real numbers

    Quick and Dirty Vimdiff Tutorial

    Tutorial: Android app development environment on Debian 6

    Tutorial: MySQL Select statement

    Tutorial: MySQL Linux C API

    13 Regex Features

    PHP vs. ASP

    Development tools: Autotools vs. CMake

    Tutorial: Install SVN, Configure multi-protocol access (Ubuntu 11.10)

    Parsing a Web Form with Shell Scripts

    Secure String Coding in C and C++

    Art animation with the Java 2D API

    Tutorial: Write a PHP wiki

    Comparison: Zend PHP vs. Symfony vs. CakePHP

    The life cycle of a programmer

    Dzil: a casual walkthrough of Dist::Zilla

    Tutorial: Android development environment on Fedora 14

    Command line functions

    strace tutorial

    Download, Tutorial: Cell Processor SDK

    Programming Language Tradeoffs: 3GL vs 4GL

    HTML5: Drag and Drop to a webpage

    Perl tips

    Python for Kids

    Build an OAuth-enabled Twitter client

    Tutorial: Install the Aptana AJAX IDE on Ubuntu

    libhugetlbfs: Using transparent pages on Linux

    Tutorial: How to use named pipes

    Linux Debugging Tools for C

    OS Development Tutorials

    Best practices for XML in Java programming

     

    Firefox sidebar

    Site map

    Site info

    News feed

    Features

    Login
    (to post)

    Search

     
    Articles are owned by their authors.   © 2000-2012 Ray Yeargin