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

Nuvola Player: Enjoy all your Cloud music services from one interface

Up
vote
Down

And with tight integration with the Linux desktop (multimedia keys, system tray, media player applets, dock menu, notifications and more), it provides a better user experience when compared to using the same Cloud music services from a Web browser. read more...
permapage | score:9969 | -finid, August 21, 2013

Python Client/Server Tutorial

Up
vote
Down

A tiny Python tutorial...
This application can easily be coded in Python with performance levels of thousands of transactions per second on a desktop PC. Simple sample programs for the server and client sides are listed below, with discussions following
read more...
permapage | score:9614 | -Ray, June 22, 2009

Currency Traders Telnet Game

Up
vote
Down

A new, large Currency Traders game is up. To connect enter the following command from an xterm, konsole, or other terminal/command line window:

telnet teotwawkigames.com

It runs on port 23, just like traditional telnet. It's free to play and no software is required to play. All you need is an internet connection.

This is an old-school, no-graphics strategy game. All you need is a telnet client to play -- and every modern operating system comes with one. It's free and you can play anonymously. Just choose a name and a password and log in. If you don't know what to do, just press your H key for a Hint and a context-sensitive Tip.

This game is played in a persistent world where whatever you build, buy, or otherwise 'acquire' in the game will still be there tomorrow. Unless you make an enemy of another player, that is. PVP (player-versus-player) is always enabled here so other players can attack your deployed fortifications -- or even, heaven forbid, you.

This is a turn-based game that can be played any time of the day, night, or week. Each player is issued a certain amount of energy (turns) per day that is used to travel, trade, or play at the arcade in the several Malls. If you don't use your turns, they accumulate for as much as several months -- so there's no disadvantage to skipping a day or even a few weeks.

A slightly longer description of Currency Traders is here.
mail this link | permapage | score:9534 | -Ray, January 23, 2013

Apple DIY Repair

Up
vote
Down

I won't be buying any more Apple products. Here's why:

I'm generally capable of repairing my own equipment and can recognize when self-repair has been deliberately undermined. I recently had to replace a hard drive in an early generation white Intel iMac. Innocently, I believed the interior was accessible and serviceable in the manner of the externally identical white PowerPC iMacs.

No such luck. Not only do you have to remove the LCD to get to the hard drive, but you must also remove shielding around the LCD -- mostly by tearing it to bits. No doubt it is attached this way so that an authorized Apple technician will be able to confidently void your warranty if you've ever worked on the system yourself.

You'll also need a #10 torx magnetic screwdriver. And, no, #10 torx bits just won't do due to the narrow and deeply recessed screw holes. Also, since most torx screwdrivers aren't magnetic, you'll probably need to tape the screws to the screwdriver to reattach the LCD. Good thing there's a hardware store near you.

Oh, and don't forget to pick up some rubber cement to 'properly' reattach the hard drive temperature sensor while you're out looking for magnetic torx screwdrivers.

Considering the logical design of its predecessor and the tamper-evident shielding, I'm certain that this machine has been deliberately designed to prevent the owner from performing DIY upgrades and repairs.

While that is all quite annoying, at least working on the system is possible for someone with experience and determination.

Now, Apple has improved their anti-customer techniques with the 'Pentalobe' screw. It doesn't solve any problem but one: it'll keep customers from even being able to open the case.

If you're curious about Apple's evil new invention, you can read its rap sheet and view its mug shot here.
mail this link | permapage | score:9472 | -Ray, January 25, 2011

VPS: Xen vs. OpenVZ

Up
vote
Down

This is a short overview of the key differences between OpenVZ and Xen that you might consider when choosing a VPS. Note that this article is based on my opinions and that you must do your own research to determine which, if either, technology is best for you and your application.

First, some terminology. OpenVZ isn't fully virtualized and could be more properly referred to as a 'container', not a VPS. That shouldn't affect your choice. It's the technical differences that matter.

Cheap VPS offers are everywhere lately, it seems. However, upon closer inspection I saw that almost all of the low-priced offers were for OpenVZ. While both Xen and OpenVZ offer their advantages, I chose Xen. So, there's my first bias, right up front. :)

OpenVZ advantages:

  • Efficient (fast)
OpenVZ disadvantages:
  • Shared kernel (no custom kernel)
  • Shared memory with other users
  • Vendor can easily oversell, killing performance
Xen advantages:
  • Dedicated memory
  • fully virtualized (can run other kernels or even OS's)
  • vendor more limited in overselling
Xen disadvantages
  • Less efficient (more overhead due to a kernel-per-VPS)

You'll notice I left price out of the above comparison. In theory, there should be a small price advantage for OpenVZ. I don't know how big it should be but it pertains to two things: 1) Xen uses more memory due to each VPS having its own kernel, and 2) Xen uses more CPU, also due to the additional software layer required to virtualize the kernel.

In practice, however, the price gap appears larger than the above technical differences suggest it should be. I think the remainder of OpenVZ's price advantage is based on 1) the ability for a vendor to easily oversell OpenVZ, and 2) The price competition that results from some vendors overselling OpenVZ.

OpenVZ doesn't encapsulate its containers into a fixed amount of memory, so it runs processes in the host environment to monitor memory usage and kill processes as a container allocates more than its assigned amount.

As a result of this difference, loading down an OpenVZ container is problematic. To partially offset this disadvantage, most OpenVZ vendors offer 'burst' memory in addition to 'dedicated' memory. That is, the monitor process is set to allow the container to use more than its allocated memory -- for a short period of time. This messy situation results in a potentially unreliable environment as some of your processes may be arbitrarily killed -- at the busiest times.

Xen, on the other hand, allows the use of a swap space and excess memory allocation results in (hopefully) idle segments being rolled out to the swap area. While this is good for the memory-hungry VPS user, it can consume significant I/O capacity when memory is overallocated to the point of busy segments getting swapped out. This is bad for everyone sharing the underlying hardware.

I see Xen as clearly the superior technology. A Xen VPS feels and behaves more like a dedicated server. However, I still would have purchased OpenVZ at some price difference. After a bit of research, however, I located Xen VPS's at practically the same price as the cheapest OpenVZ containers. That made my decision easy.

With that said, keep in mind that a bad hosting vendor can ruin either technology through various means. Both technologies share the disk drives and I/O paths as well as the processor cores. Hardware can be poorly configured and managed in any case. A reputable vendor is probably the single most important consideration in choosing a virtual server.

Lastly, carefully check the 'allowed use' policy. Make sure your application is allowed on the server you intend to purchase. Note that due to their different characteristics, the allowed use policy may differ between OpenVZ and Xen for the same host. Also, it's good to understand the memory usage characteristics of your applications. If you know how much memory/swap they require on a physical system, it'll probably work with that same amount of memory/swap on Xen.

[I'll post a review shortly of my current VPS vendor and I will then add a link to that article here.]

mail this link | permapage | score:9465 | -Ray, June 13, 2011

Linux file manager comparison review

Up
vote
Down

Reviewing and rating six of the best Linux file managers...
The litmus test for any file manager, then, is its ability to manage large numbers of files efficiently, and this is one of the two main criteria for the applications in this roundup. Our other primary concern is advocacy. Could each file manager here help convince inexperienced Linux users that the OS can be either familiar and easy to use, or different in that it's much more flexible than what they've previously experienced?
read more...
mail this link | permapage | score:9430 | -Ray, April 20, 2011

Linux network tools: iptstate and pkstat

Up
vote
Down

Two small Linux tools for network stats...
iptstate displays information held in the IP Tables state table in real-time in a top-like format. Output can be sorted by any field, or any field reversed. Users can choose to have the output only print once and exit, rather than the top-like system.

Refresh rate is configurable, IPs can be resolved to names, output can be formatted, the display can be filtered, and color coding are among some of the many features.
(here are some red prints) read more...
mail this link | permapage | score:9391 | -Ray, March 4, 2011 (Updated: April 24, 2012)

CMS: Serendipity 1.0

Up
vote
Down

If you're looking to start a new website, take a look at Serendipity...
Serendipity is a PHP-based content management system (CMS) for powering blogs and other sites, and has a feature set that should make any blogger happy. After several years in development, the Serendipity team hit the 1.0 mark on June 15. Let's see how the 1.0 release shakes out.
read more...
permapage | score:9390 | -Ray, July 18, 2006

Ubuntu 11.04 Preview

Up
vote
Down

An early look at the next release of Ubuntu Linux...
Ubuntu 11.04 (Natty Narwhal) Beta 1 is powered by Linux kernel 2.6.38, GNOME 2.32.1 and X.Org 7.5. It will included applications such as LibreOffice 3.3.2 as the default office suite, Banshee 1.9.4 as the default audio player/organizer and Mozilla Firefox 4.0 as the default web browser.

A set of seventeen new and beautiful wallpapers will also be present in the Beta release, to please every Ubuntu user out there. And now, the features we've promised...
read more...
mail this link | permapage | score:9373 | -Ray, April 1, 2011

Linux dominates Windows

Up
vote
Down

Linux dominates Windows -- and everything else -- on supercomputers in 2010. Microsoft's renowned engineering quality and down-to-earth pricing shows brilliantly in its capturing 1% of the top 500 supercomputer projects. Perhaps next year, utilizing all the organizational pressure they can bring to bear, they can retain 0.8%.

Formal Unix, now long dead*, controls 4.4%. Meanwhile, Linux is now installed on 91% of the remaining 95% of top systems. Add in the single BSD system and you have Unix-like systems (Unix+Linux+BSD) accounting for 95.6% of the top supercomputer projects. The remaining 3.4% of are 'mixed' systems and may also contain significant percentages of Unix and Linux.

There are many reasons for Linux' success. Among the top factors are surely these four, in no particular order:
  • Price (starting at free)
  • Quality (excellent code, Unix-based design)
  • Hardware Support (most all modern quality gear is supported)
  • Open Source (open to tinkering -- and redistributable)
Check my math on the top 500 systems here.

*Of course, counting functional Unix systems while ignoring the trademarked term, Unix is clearly not dead since Linux is one of the truest of the true Unix work-alike systems. Linux is, of course, the reason formal Unix has suffered such a precipitous decline. Many Unix users just switched flavors -- and Linux was a most appealing flavor.
mail this link | permapage | score:9356 | -Ray, June 2, 2010

Linux Top command examples

Up
vote
Down

Fifteen examples of Linux usage of the top command with short explanations...
In this article, let us review 15 examples for Linux top command that will be helpful for both newbies and experts.

1. Show Processes Sorted by any Top Output Column – Press O

By default top command displays the processes in the order of CPU usage. When the top command is running, press M (upper-case) to display processes sorted by memory usage as shown below.
read more...
permapage | score:9345 | -Ray, January 12, 2010

MultiSystem: Live USB MultiBoot

Up
vote
Down

Put more than one bootable Linux distribution on that big USB flash drive...
Installation instructions can be found at http://liveusb.info/dotclear/index.php?pages/install, where several install methods are available. After installing MultiSystem, open it, and follow the steps. I received an error message in French saying that Multiboot does not like spaces in the USB Stick's name. I renamed the stick and then logged out and back in to make it work. Below are screenshots of the whole process.
read more...
mail this link | permapage | score:9336 | -Ray, April 19, 2011

How to customize your Linux system

Up
vote
Down

Ubuntu, Arch, Suse, and Linux from Scratch are covered in this multi-page article...
You can install and remove packages as and when you want to, and you can choose whether to install free or non-free software on your system. Why should you have to live with community decisions when you can make Linux work your way?

However, the distribution you install will likely contain drivers and components that you don't really want or need on your system.
read more...
permapage | score:9312 | -Ray, December 4, 2009

UnixLite: A Light GPL Unix in C++

Up
vote
Down

You can browse the source code right on the website. I'm not sure how long they will be able to use that name though...
UnixLite is a lightweight unix/linux compatible operating system written in c++, it is open source and released under the GNU General Public License.The complete operating system is made up of kernel and applications, just like linux, unixlite is only the kernel. The kernel itself is written from scratch and the most part is written in c++, however, the library used by unixlite comes from uClibc and applicaitons running on unixlite comes from GNU project.
read more...
mail this link | permapage | score:9303 | -Ray, June 13, 2006

Librenix T-Shirts and Coffee Mugs!

Up
vote
Down

For today's example of my (semi)elite C programming skilz, I submit for your inspection the Librenix T-Shirts! Yes, I created the images on these shirts and coffee mugs entirely with C code. While the code isn't up to the standards *cough* of my open source Space Tyrant project, at least the output is colorful and not entirely textual!


click either image to see the T-Shirts, Coffee Mugs, etc.

(If you like the images but don't care for 'librenix' on your shirt, these same styles are available for all 50 US state names as well as with the signs of the zodiac here)

(and here are some modern prints)
mail this link | permapage | score:9282 | -Ray, June 6, 2010 (Updated: April 24, 2012)

How to install Ubuntu Linux on the decTOP SFF computer

Up
vote
Down

I recently bought a decTOP small form factor (SFF) computer. My goal was to build a cheap, fanless, quiet, and low power consumption Linux server. For $99 plus the cheapest available shipping, $40, my machine arrived 11 days after I placed the order.

This is a tiny computer, about the size of a Mac Mini. But, because it has no fan, it runs a bit quieter and, with the help of a 1-watt, 366 MHz CPU, consumes only 8 watts. For comparison, the G4 Mac Mini consumes about 20-30 watts, depending on load.

The decTOP comes with 128 MB of RAM in its sole SO-DIMM slot and a 10 GB 3.5 inch hard drive. I understand that it's a simple matter to replace the drive and to upgrade the memory to a maximum of 512MB.

It also comes with no operating system and the ability to boot only from a USB drive. This article details the steps I used to build the USB boot/installation drive and install Ubuntu 6.06 on the decTOP.

There is another article -- with additional decTOP links -- here on installing Ubuntu 6.06 on the decTOP with the aid of a Windows system. Fortunately ;), I run Mac OS X and Linux (Ubuntu 7.04), so that article didn't work for me. I did the installation of the Ubuntu 6.06 LTS Server Edition using my Ubuntu Linux box and a 1 GB USB flash drive -- although a 512 MB USB drive should work as well.

  1. Download the Ubuntu 6.06 server ISO image from the Ubuntu download page. Depending on your plans for the decTOP, you might want to choose the desktop version. Unless you have already upgraded your decTOP's memory, however, you'll want to stick with the 6.06 releases.

  2. Install the mbr, mtools, and syslinux packages on the Linux system you'll be using to prepare the USB drive. If you run Ubuntu or some other Debian-derived system, the following commands may do the work for you.
    apt-get install mbr
    apt-get install mtools
    apt-get install syslinux
  3. Partition the USB drive with a single FAT-16 partition. I used the fdisk 'n' command to make the new primary partition 1. The fdisk 't' command can be used to change the partition type to FAT-16. My device name was /dev/sda.
    fdisk /dev/sda
  4. Make the FAT-16 partition the active partition. I used the fdisk 'a' command.

  5. Install a master boot record on the USB drive.
    install-mbr /dev/sda
  6. Install syslinux on the USB drive. Note that the USB drive should not be mounted when you do this.
    syslinux -s /dev/sda1
  7. Create a mountpoint and mount the ubuntu ISO image using the loopback device.
    mkdir /iso
    mount -o loop -t iso9660 ubuntu.iso /iso
  8. Create a mountpoint and mount the USB flash drive.
    mkdir /usb
    mount /dev/sda1 /usb
  9. Copy the contents of the ISO image to the USB drive. This will take some time.
    cd /iso
    cp -r . /usb/
  10. Copy the /usb/dists/dapper directory into a new /usb/dists/stable directory.
    cd /usb/dists/
    cp -r dapper/* stable
  11. Copy several files from /usb/install to the /usb root directory.
    cp /usb/install/vmlinuz /usb/
    cp /usb/install/mt86plus /usb/
    cp /usb/install/initrd.gz /usb/
  12. Install the following text into a file named syslinux.cfg in the /usb root directory.
    default vmlinuz
    append initrd=initrd.gz ramdisk_size=24000 root=/dev/ram rw
  13. Flush all writes, unmount, and remove the USB drive. After the sync step, wait for all of the data to be written to the USB drive.
    sync;sync
    umount /usb
  14. Connect the ethernet adapter to the decTOP and connect it to your network to allow automatic configuration of the network interface.

  15. Insert the USB drive into the decTOP and power it up. The decTOP should automatically boot from the USB drive and start the Ubuntu installation.

  16. Answer only the first two questions concerning language selection and go to the next step, below.

  17. Press Alt-F2 (hold down the Alt key and press the F2 function key) to open a shell. Then press enter to start the shell.

  18. Create a /cdrom and a /dev/cdroms directory in the installation ramdisk
    mkdir /cdrom /dev/cdroms
  19. Go to the /dev/cdroms directory and build a symlink from /dev/sda1 (that is likely the device name of your USB boot partition) to /dev/cdroms/cdrom0.
    cd /dev/cdroms
    ln -s ../sda1/cdrom0
  20. While still in the shell, mount the USB drive to mimic an installation CD-ROM.
    mount -t vfat /dev/cdroms/cdrom0 /cdrom
  21. Return to the installation program with Alt-F1 and continue the installation.

From this point, the process should be identical to a routine CD-ROM installation.

For a grand total of $140 and 8 watts of power consumption, I now have a near-silent Linux server running 24/7. You can telnet to it here and marvel at its blinding speed running a 250,000-sector Space Tyrant game.

mail this link | permapage | score:9273 | -Ray, August 16, 2007 (Updated: April 26, 2011)

Top BSD distributions

Up
vote
Down

Here are the top five BSD's...
As some of you may know, Linux is not the only Unix-like operating system available. There are other UNIX derivatives, and one of the most popular among them is called BSD. If you have been to Distrowatch, you will see different BSD distributions listed in there.
read more...
permapage | score:9272 | -Ray, April 5, 2009

Expect Script Examples

Up
vote
Down

Expressions, if statements, for loops, and while loops examples are covered in this mini-tutorial:
This article explains the following in the expect scripting language.
  • Expressions – arithmetic operation
  • if construct in expect
  • looping constructs
read more...
permapage | score:9223 | -Ray, January 21, 2011

Space Tyrant: Multithreading lessons learned on SMP hardware

Up
vote
Down

There is much to report in this update of Space Tyrant. Before getting into the new features and functions, I’ll dispense with the crisis of The Bug.

For a couple of weeks, we had been noticing odd anomalies with Space Tyrant (ST) running on the virtual server at Ioresort.com (now offline -Ed.). We never saw the problem on any other box -- and it was tested on at least four other Linux boxes and a Mac OS X system. We did all manner of stress testing, locally and over the Internet, script based and even feeding the game the output of /dev/random. Nothing caused the anomaly on any other box.

At first, I suspected that it might just be an obscure problem with the virtual server itself; after all, I had been forced to modify the TLR code to get it to run properly there. That problem turned out to be merely a limitation of NFS, not a bug with the virtual server software. However, the environment was clearly different from any other system I had used which raised my suspicions -- and reduced my urgency about looking for the bug.

While the bug wasn’t frequent, it was persistent. The bug appeared to be related to corrupted buffers or corrupted buffer indexes. Out of idle curiosity, I lowered the number of buffers used by ST to see if that affected the bug. Somewhat counter-intuitively, it substantially raised the frequency of the problem.

Brian Estabrooks (the hero of this release) and I spent more and more of our efforts hunting this incredibly elusive bug until that was all we were doing. I implemented various diagnostic routines hunting for clues. The all seemed to point to buffer indexes being changed incorrectly. Both Brian and I audited the code. It seemed impossible for the indexes to be changed improperly. Brian even went so far as to replace the ring buffer scheme with a high watermark approach but to no avail.

While I continued to suspect it to be a simple logic error in the code, Brian turned his efforts elsewhere. What he came up with was quite interesting. It seems that on many hardware architectures (most? all?), modifying a bit field can temporarily modify other bit fields in the same word! Now, this isn’t a problem on a single-CPU system; it repairs the damage in the same operation, making it, effectively, atomic. On an SMP machine, however, two different CPU’s working on different bit fields of the same word simultaneously create havoc. The operation isn’t really atomic and it doesn’t work.

Did I mention that the virtual server is a 4-way Xeon system?

The ring buffer indexing in ST relies on unsigned integer bit fields to automate wrapping back around to the first buffer after using the last one. My parsimonious programming, of course, packed all the bit fields together, several to a word. Brian’s test version of ST added a pad after each buffer index to round it out so that each bit field lived alone in its own complete word. We abused the new version for nearly an hour before either of us would dare say it. The bug was gone.

Yay!

So, the moral of this story is: Operations on sub-word fields affect other bits in that word (at least on many hardware architectures). Tread very carefully if multiple threads are accessing different bits in shared words. It may appear to work perfectly, only to crumble into a pile of smoldering rubble the first time it's loaded on a multiple CPU system!

Other than the primary lesson, some other good things came out of (the search for) the bug. Several other latent bugs were found and fixed and Brian and I are both much more intimate with the code.

And, on to the enhancements. ST is starting to look like an actual playable game. The following functions implement the new major features.

players(): We now have player rankings. It works by adding all the players’ ship resources to an integer array. Then it scans the universe looking for deployed fighters and adds those to the array as well. Currently, those two items comprise the total strength of a player.

It then sorts the array with a recursive bit-plane sort that I wrote for Starship Traders in 1998. The qsort() function in the C library was plenty fast, but took too much memory for my taste. Memory was a bit scarcer in those days and, worse, the SST software model gave each player his own copy of the server.

The sort reorders the array in place as follows. It scans the high-order bit in each element of the array. It then moves all elements starting with ‘1’ bits to the top and all starting with ‘0’ bits to the bottom. Next, it calls itself twice to reorder the first and second chunks of the array on the second bit. Each of those two instances of the sort then call the sort twice again, now giving 4 new sorts for the third bit, and so on. When all 32 bits are accounted for, the array is in the correct order with the top player on top, etc.

Scanning the entire universe can be expensive with a large map. Therefore, the player rankings function keeps the result and time stamps it. If another player asks for a player ranking within five seconds, the system just gives them the old one. After five seconds, however, any new request triggers a fresh listing.

autopilot(): We’ve added an autopilot to let a player find a specific sector -- or to locate the nearest planet. If you type a ‘0’ (zero), you’ll be prompted for a sector number within 1000 of the sector you’re currently in. You then will have the option of pressing ‘/’ to automatically warp to the destination sector.

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.

The new autopilot function consists of two other functions in addition to autopilot(), which is merely a control function. I had intended to use the old shortest path algorithm function from TLR but it was big and complicated. I decided to try to write a simpler, recursive shortest path algorithm instead. The new recursive function is much simpler but not quite as efficient as the giant for loop in TLR.

The actual algorithm is implemented in two functions called pathdepth() and pathcalc(). The pathdepth() function repeatedly calls pathcalc() with an increasing ‘depth’ parameter. ‘Depth’ tells pathcalc() how many levels deep to search before giving up.

The pathcalc() function simply looks to see if the sector it is looking at is the target sector. If not, it calls itself for each new sector that the current sector connects to. If the current sector is the target sector, it starts filling in an array for the autowarp() function to follow to reach the target sector. As the previous recursive calls to the pathcalc() function exit, they fill in the remainder of the path array.

And, yes, I seem to like reinventing the wheel. ;-)

The other interesting addition to the code is the backup thread. It is implemented by a function called backupdata() and works as follows: It scans the player data, the map data, and the history data looking for ‘dirty’ flags. (Whenever any persistent data is changed anywhere in the game, a dirty flag is set to tell the backup thread to write it out to disk.) This process is quite fast for a small game, but for a game with millions of sectors, it’s a significant waste of resources to scan the dirty flag array frequently.

Therefore, for the map and history data, I’ve implemented a ‘dirty block’ scheme as well. When a dirty flag is set, its corresponding dirty block flag is set too. Then, the backup thread need only scan the dirty block arrays, typically only about one percent the size of the arrays it represents. When a dirty block is found, only the hundred or so records it points to are scanned to find the actual dirty records for backup.

The backup file, named ‘st.9999.dat’ -- where ‘9999’ varies with the port number you run the game on -- goes into the current working directory from where you start the daemon. If the file doesn’t exist, a new game is started. Also, if you’ve modified the game in a way that changes the size of the data -- by increasing the map size, for example -- it will start a new game upon startup.

The game can be shut down from the command line by sending a signal 15 (kill -15 pid) or by the admin with the ^ command. Note that the first player to create an account in a new game automatically becomes the admin of the game!

makehistory(): The storing of historical data is new as well. Whenever another player attacks your ship while you’re logged off, you’ll get a report of the action and any losses when you next log on. Also, for remote deployed fighters, you never get immediate notification, so that information is stored in the history log even if you're logged on when it happens. You can view any accumulated event information since your login time by pressing the ‘e’ key.

deploy(): This simple function allows a player to deploy, or retrieve, guard fighters in a sector. Those fighters will not let another player pass through or view any of the contents of that sector. Any ships parked under the fighters are automatically protected against all attacks except for an attack by the fighters’ owner. Once the fighters are destroyed, of course, all ships there are visible and can be attacked.

There is also a newly implemented time limit in the game to limit the total online time of a day’s sessions to 4 hours. Like most other parameters, it can be changed by modifying a #define statement near the top of the code.

command(): The help page, a menu of available commands that a player can perform, has been redesigned and rewritten. This menu is attached to the '?' key.

The old debugger thread is gone, replaced by an in-game command function called showdata(). Press the ‘z’ key to see information on buffers, buffer indexes, and the backup thread’s state and history. Only if you’re serious about modifying the code will this information be useful.

The section of the gameloop thread that broadcasts radio and news messages has been modified to show only one of each type of message per pass. That way, replaying a long radio history won’t flood the output buffers and longer radio and news histories can therefore be retained.

The old jumprtn() movement function has been consolidated into the warprtn() function. It’s only slightly more complicated than having them separate.

The current source code can be downloaded from http://librenix.com/st/st.158.c. and the original article in this series is here. As usual, the compile script is embedded in the comments at the top of the source file. You’ll have to rename the source st.c for the script to work unchanged.

[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:9163 | -Ray, June 26, 2005 (Updated: July 26, 2008)

Download: Ubuntu Linux Live CD ISO

Up
vote
Down

Here's a downloadable .iso image of Ubuntu's new Live Linux CD. There is a direct download link as well as a bittorrent link available.
This CD will allow you to try out Ubuntu before installing it, without repartitioning or overwriting any existing software or data. Just place it in the drive and reboot your computer.
[Alternatively, you can download the latest release directly from Ubuntu. -Ed.] read more...
permapage | score:9157 | -Ray, October 11, 2004 (Updated: March 19, 2007)
More articles...
Buy Large Wall Art on Canvas

Selected articles

Currency Traders Telnet Game

MiniLesson: An introduction to Linux in ten commands

The Supreme Court is wrong on Copyright Case

The Real Microsoft Monopoly

The short life and hard times of a Linux virus

Closed Source Linux Distribution Launched

Space Tyrant: A threaded C game project: First Code

Space Tyrant: A multiplayer network game for Linux

Why software sucks

The Network Computer: An opportunity for Linux

Scripting: A parallel Linux backup script

Download: Linux 3D Client for Starship Traders

The life cycle of a programmer

Linux vs. Windows: Why Linux will win

Why Programmers are not Software Engineers

Linux dominates Windows

Hacker Haiku

Microsoft to push unlicensed users to Linux

Librenix T-Shirts and Coffee Mugs!

Shadow.sh: A simple directory shadowing script for Linux

Programming Language Tradeoffs: 3GL vs 4GL

VPS: Xen vs. OpenVZ

Mono-culture and the .NETwork effect

Apple to Intel move no threat to Linux

Tutorial: Introduction to Linux files

Apple DIY Repair

Beneficial Computer Viruses

Space Tyrant: Multithreading lessons learned on SMP hardware

No, RMS, Linux is not GNU/Linux

Graffiti Server Download Page

Missing the point of the Mac Mini

Space Tyrant: A threaded game server project in C

How to install Ubuntu Linux on the decTOP SFF computer

 

Firefox sidebar

Site map

Site info

News feed

Features

Login
(to post)

Search

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