Introduction About Site Map

XML
RSS 2 Feed RSS 2 Feed
Navigation

Main Page | Blog Index

Archive for the ‘Programming’ Category

GNU Project Turning 39

gnu-39

Summary: This coming Tuesday is a special day; 39 years since the message (announcement) below, so next year it’s 40 (a time leap in the context of software development; not much stuff lasts this long)



From CSvax:pur-ee:inuxc!ixn5c!ihnp4!houxm!mhuxi!eagle!mit-vax!mit-eddie!RMS@MIT-OZ
From: RMS%MIT-OZ@mit-eddie
Newsgroups: net.unix-wizards,net.usoft
Subject: new Unix implementation
Date: Tue, 27-Sep-83 12:35:59 EST
Organization: MIT AI Lab, Cambridge, MA

Free Unix!

Starting this Thanksgiving I am going to write a complete
Unix-compatible software system called GNU (for Gnu's Not Unix), and
give it away free(1) to everyone who can use it.
Contributions of time, money, programs and equipment are greatly
needed.

To begin with, GNU will be a kernel plus all the utilities needed to
write and run C programs: editor, shell, C compiler, linker,
assembler, and a few other things.  After this we will add a text
formatter, a YACC, an Empire game, a spreadsheet, and hundreds of
other things.  We hope to supply, eventually, everything useful that
normally comes with a Unix system, and anything else useful, including
on-line and hardcopy documentation.

GNU will be able to run Unix programs, but will not be identical
to Unix.  We will make all improvements that are convenient, based
on our experience with other operating systems.  In particular,
we plan to have longer filenames, file version numbers, a crashproof
file system, filename completion perhaps, terminal-independent
display support, and eventually a Lisp-based window system through
which several Lisp programs and ordinary Unix programs can share a screen.
Both C and Lisp will be available as system programming languages.
We will have network software based on MIT's chaosnet protocol,
far superior to UUCP.  We may also have something compatible
with UUCP.


Who Am I?

I am Richard Stallman, inventor of the original much-imitated EMACS
editor, now at the Artificial Intelligence Lab at MIT.  I have worked
extensively on compilers, editors, debuggers, command interpreters, the
Incompatible Timesharing System and the Lisp Machine operating system.
I pioneered terminal-independent display support in ITS.  In addition I
have implemented one crashproof file system and two window systems for
Lisp machines.


Why I Must Write GNU

I consider that the golden rule requires that if I like a program I
must share it with other people who like it.  I cannot in good
conscience sign a nondisclosure agreement or a software license
agreement.

So that I can continue to use computers without violating my principles,
I have decided to put together a sufficient body of free software so that
I will be able to get along without any software that is not free.


How You Can Contribute

I am asking computer manufacturers for donations of machines and money.
I'm asking individuals for donations of programs and work.

One computer manufacturer has already offered to provide a machine.  But
we could use more.  One consequence you can expect if you donate
machines is that GNU will run on them at an early date.  The machine had
better be able to operate in a residential area, and not require
sophisticated cooling or power.

Individual programmers can contribute by writing a compatible duplicate
of some Unix utility and giving it to me.  For most projects, such
part-time distributed work would be very hard to coordinate; the
independently-written parts would not work together.  But for the
particular task of replacing Unix, this problem is absent.  Most
interface specifications are fixed by Unix compatibility.  If each
contribution works with the rest of Unix, it will probably work
with the rest of GNU.

If I get donations of money, I may be able to hire a few people full or
part time.  The salary won't be high, but I'm looking for people for
whom knowing they are helping humanity is as important as money.  I view
this as a way of enabling dedicated people to devote their full energies to
working on GNU by sparing them the need to make a living in another way.


For more information, contact me.
Arpanet mail:
  RMS@MIT-MC.ARPA

Usenet:
  ...!mit-eddie!RMS@OZ
  ...!mit-vax!RMS@OZ

US Snail:
  Richard Stallman
  166 Prospect St
  Cambridge, MA 02139

shingledecker

10+ Years in the Same Company, Focusing on Free Software

Roy Schestowitz

DECADES ago somebody told me that changing employers very often is a sign of weakness. Several times later I’d hear the same thing, which follows common sense. Loyalty to an employer or devotion to some particular path shows both a careful choice (of employer) and persistence rather than adventurism. The same goes for housing or residency. Some people move from place to place very often, having to relearn locations of things, spending a lot of time on paperwork, having to meet new people (and losing touch with old friends and colleagues).

When it comes to my current employer, this past week marked 10 years of me working there. There were better times and worse time, both for myself and for the employer.

For the first time in my life I can say that I’ve worked in the same company for over a decade. For just over a year (or about 2 years) I’ve been able to say that I’m the most “senior” (in terms of duration) regular employee there, sans the founder/CEO, who established the company way back in 1998. In a sense, this also means that when I joined the company (with about 20 people in it back then) I was the “latest recruit” and all those people whom I joined are now gone, except the CEO. It’s an interesting situation to be in.

Will I work another 10 years in the same company? It’s hard to tell. The thing I do like about it is that it respects my freedom of expression (it tells off Microsoft when they try to cause issues by phoning the CEO!) and software freedom in general. I realise that many people are forced to use Windows, at least sometimes, and not everyone is permitted to work from home all the time. I’ve worked from home for 14 years now.

How to Delete Your GitHub Account to Tell GitHub What You Think About Their Decision to Sell Out

IT IS now pretty much confirmed that GitHub has sold out to help Microsoft cause further damage to Free software (FOSS). In a nutshell, Microsoft’s motivation is shallow enough to see:

  1. Microsoft wants to pretend FOSS was never the competition (this causes confusion which serves Microsoft’s bottom line)
  2. Microsoft will lie to officials who sign contracts about being an “open source company” (all of Microsoft’s core software remains proprietary with malicious features like surveillance and DRM)
  3. Buying out, controlling the competition
  4. Patent blackmail, bribery and other attacks on FOSS carry on while Microsoft pretends that all is well (“we come in peace”)

So it’s time to devalue GitHub; it won’t make it any cheaper for Microsoft to buy at this stage (they agreed on the price).

If you have substantial work on the site, migrate away. Here, for example, is how to import your project from GitHub to GitLab.

Then it’s time to delete.

Log in, then enter the following address: https://github.com/settings/admin

Follow these steps:

delete-github-1

delete-github-2

delete-github-3

They then send out an E-mail:


Subject: [GitHub] Account deletion

This email is to confirm that you’ve deleted your account ‘schestowitz’ from GitHub. Your repositories and content have been deleted from the system. If you were on a paid plan, you will not be billed again. We’re sorry to see you go. You can reply directly to this email if you have any questions or feedback, we’d love to hear from you.


Tell others to do the same thing. I will soon urge my wife (when she wakes up) to do the same. Only fools (not her) believe lies like “Microsoft loves Linux”.

A Weekend of Wrestling With PHP

YESTERDAY I ranted about PhpWiki, blaming PHP for the most part. Why? My Web host has ‘broken’ a lot of the software that I run in this Web site. Some software has relentlessly and happily been running for a decade or more. It is a lot of software (all in all about 20 databases), some of which I have manually patched or changed/hacked whenever the host upgraded PHP. It is a lot of work. It is a lot of inevitable maintenance. I blame PHP. The latest upgrade is to PHP 5.3. The host reverted back to the older version (5.2) for two weeks (a sort of an ultimatum) to help me sort things out before this upgrade is permanently imposed. PhpWiki was not the only cause of issues, but it was part of it that took a whole noon plus afternoon (almost as much time as it would take to just rebuilt it all manually). While I was able to (eventually) make a minor upgrade (from a 2006 version to a 2008 version, not to the current or even recent versions) it remains unclear why PHP decided to not be backward-compatible. It is a total nightmare for sites for have a lot of PHP code, especially if their maintainers are not full-time PHP developers or are ingratiating components of software which is no longer actively maintained. PHP is risky to choose or work with. I learned this the hard way. It may be normal for proprietary frameworks to do this, but why FOSS?

Today I successfully upgraded two PHP-Nuke sites (thankfully there were upgrade scripts which worked reasonably well) and then I struggled for a whole with Gallery 2, where the upgrade process is complicated and very long, resulting in a sub-optimal outcome (e.g. no thumbnails and no tolerance of a perfectly fine ImageMagick installation). People without very advanced knowledge of UNIX and other such skillsets won’t manage to keep their photo galleries up to date. This is a real travesty. This is the catalyst of ‘Web rot’.

What I’ve identified and am eager to summarise after two days of frustrating work is this:

  1. PHP-based software cannot be counted on, especially if it’s intended to run for years (the long run)
  2. Choosing less established PHP-based software is risky as it might cease being maintained
  3. cPanel does give access to PHP error logs, but this is not too trivial to find
  4. Internal server errors can be due to restrictive Web hosts who deny access to scripts based on their UNIX-style permissions
  5. It is always better to install software from front-end scripts, such as those found in Fantastico
  6. Don’t use too many pertinent bits of software; diversity can be a nightmare to deal with
  7. When patching existing software, keep a log/record of everything that has changed
  8. If a lot of people across the Web complain about upgraders, importers, exporters, etc. then it’s better not to bother with them at all as they won’t work correctly and just waste time
  9. Check carefully and exhaustively a good test set of data following upgrade, or missing data will only be identified several years down the line when backups are too hard to find and revert to (I just found out that this happened to me)
  10. Use static HTML where you deem it suitable because the cost of maintaining/upgrading PHP is often too high to justify such a reliance

I am fed up with PHP. One cannot just install something and let it run along for years. It’s a lot of work to maintain and sometimes there’s loss of data, induced by improper upgrade paths and mistakes/accidents.

Splitting SQL Loads to Multiple CPU Cores

Foday I wrote the following bash script (note: written for 16 cores although it can be modified for more or for less), which splits SQL operations, preceded by “ [NUMERIC WEIGHT] |“. This helps assure a nice distribution of load on the bare metal. This might be reusable, so I decided to post it on my site.


IFS=$'\n'

CORE0LOAD=0
CORE1LOAD=0
CORE2LOAD=0
CORE3LOAD=0
CORE4LOAD=0
CORE5LOAD=0
CORE6LOAD=0
CORE7LOAD=0
CORE8LOAD=0
CORE9LOAD=0
CORE10LOAD=0
CORE11LOAD=0
CORE12LOAD=0
CORE13LOAD=0
CORE14LOAD=0
CORE15LOAD=0

WEIGHT=0;

echo Starting...

for line in $(cat ~/Desktop/input)
# while read line < ~/Desktop/input
# for line in `cat ~/Desktop/input`
do
# echo -e line="$line"
# $line="$line"
# echo $line
# exit
	if [ $CORE0LOAD -lt $CORE15LOAD ]
	then
# echo $line
		echo $line > current_line
		cut -b 1-13 current_line > current_number
		read SCORE < current_number
		echo $(($CORE0LOAD+$SCORE)) > total
		read SCORETOTAL < total
# echo $SCORETOTAL
		CORE0LOAD=$((SCORETOTAL))
		cut -b 16-10000 current_line >> core0.sh



	elif [ $CORE1LOAD -lt $CORE2LOAD ]
	then
		echo $line > current_line
		cut -b 1-13 current_line > current_number
		read SCORE < current_number
		echo $(($CORE1LOAD+$SCORE)) > total
		read SCORETOTAL < total
		CORE1LOAD=$((SCORETOTAL))
		cut -b 16-10000 current_line  >> core1.sh
	elif [ $CORE2LOAD -lt $CORE3LOAD ]
	then
		echo $line > current_line
		cut -b 1-13 current_line > current_number
		read SCORE < current_number
		echo $(($CORE2LOAD+$SCORE)) > total
		read SCORETOTAL < total
		CORE2LOAD=$((SCORETOTAL))
		cut -b 16-10000 current_line  >> core2.sh
	elif [ $CORE3LOAD -lt $CORE4LOAD ]
	then
		echo $line > current_line
		cut -b 1-13 current_line > current_number
		read SCORE < current_number
		echo $(($CORE3LOAD+$SCORE)) > total
		read SCORETOTAL < total
		CORE3LOAD=$((SCORETOTAL))
		cut -b 16-10000 current_line  >> core3.sh
	elif [ $CORE4LOAD -lt $CORE5LOAD ]
	then
		echo $line > current_line
		cut -b 1-13 current_line > current_number
		read SCORE < current_number
		echo $(($CORE4LOAD+$SCORE)) > total
		read SCORETOTAL < total
		CORE4LOAD=$((SCORETOTAL))
		cut -b 16-10000 current_line  >> core4.sh
	elif [ $CORE5LOAD -lt $CORE6LOAD ]
	then
		echo $line > current_line
		cut -b 1-13 current_line > current_number
		read SCORE < current_number
		echo $(($CORE5LOAD+$SCORE)) > total
		read SCORETOTAL < total
		CORE5LOAD=$((SCORETOTAL))
		cut -b 16-10000 current_line  >> core5.sh
	elif [ $CORE6LOAD -lt $CORE7LOAD ]
	then
		echo $line > current_line
		cut -b 1-13 current_line > current_number
		read SCORE < current_number
		echo $(($CORE6LOAD+$SCORE)) > total
		read SCORETOTAL < total
		CORE6LOAD=$((SCORETOTAL))
		cut -b 16-10000 current_line  >> core6.sh
	elif [ $CORE7LOAD -lt $CORE8LOAD ]
	then
		echo $line > current_line
		cut -b 1-13 current_line > current_number
		read SCORE < current_number
		echo $(($CORE7LOAD+$SCORE)) > total
		read SCORETOTAL < total
		CORE7LOAD=$((SCORETOTAL))
		cut -b 16-10000 current_line  >> core7.sh
	elif [ $CORE8LOAD -lt $CORE9LOAD ]
	then
		echo $line > current_line
		cut -b 1-13 current_line > current_number
		read SCORE < current_number
		echo $(($CORE8LOAD+$SCORE)) > total
		read SCORETOTAL < total
		CORE8LOAD=$((SCORETOTAL))
		cut -b 16-10000 current_line  >> core8.sh
	elif [ $CORE9LOAD -lt $CORE10LOAD ]
	then
		echo $line > current_line
		cut -b 1-13 current_line > current_number
		read SCORE < current_number
		echo $(($CORE9LOAD+$SCORE)) > total
		read SCORETOTAL < total
		CORE9LOAD=$((SCORETOTAL))
		cut -b 16-10000 current_line  >> core9.sh
	elif [ $CORE10LOAD -lt $CORE11LOAD ]
	then
		echo $line > current_line
		cut -b 1-13 current_line > current_number
		read SCORE < current_number
		echo $(($CORE10LOAD+$SCORE)) > total
		read SCORETOTAL < total
		CORE10LOAD=$((SCORETOTAL))
		cut -b 16-10000 current_line  >> core10.sh
	elif [ $CORE11LOAD -lt $CORE12LOAD ]
	then
		echo $line > current_line
		cut -b 1-13 current_line > current_number
		read SCORE < current_number
		echo $(($CORE11LOAD+$SCORE)) > total
		read SCORETOTAL < total
		CORE11LOAD=$((SCORETOTAL))
		cut -b 16-10000 current_line  >> core11.sh
	elif [ $CORE12LOAD -lt $CORE13LOAD ]
	then
		echo $line > current_line
		cut -b 1-13 current_line > current_number
		read SCORE < current_number
		echo $(($CORE12LOAD+$SCORE)) > total
		read SCORETOTAL < total
		CORE12LOAD=$((SCORETOTAL))
		cut -b 16-10000 current_line  >> core12.sh
	elif [ $CORE13LOAD -lt $CORE14LOAD ]
	then
		echo $line > current_line
		cut -b 1-13 current_line > current_number
		read SCORE < current_number
		echo $(($CORE13LOAD+$SCORE)) > total
		read SCORETOTAL < total
		CORE13LOAD=$((SCORETOTAL))
		cut -b 16-10000 current_line  >> core13.sh
	elif [ $CORE14LOAD -lt $CORE15LOAD ]
	then
		echo $line > current_line
		cut -b 1-13 current_line > current_number
		read SCORE < current_number
		echo $(($CORE14LOAD+$SCORE)) > total
		read SCORETOTAL < total
		CORE14LOAD=$((SCORETOTAL))
		cut -b 16-10000 current_line  >> core14.sh
	else
# echo $line
		echo $line > current_line
		cut -b 1-13 current_line > current_number
		read SCORE < current_number
		echo $(($CORE15LOAD+$SCORE)) > total
		read SCORETOTAL < total
		CORE15LOAD=$((SCORETOTAL))
		cut -b 16-10000 current_line >> core15.sh
	fi
done
echo Ended...
 

Now, each file contains operations to be run on one core, without conflict (order or load imbalance).

Car Navigation Single Car Classifier

With a training set of just a dozen positives from a single car I have let the experiment run. The purpose of this experiment is to test the alarm (collision) mechanism for short-range D alone.

Car Navigation Version 6.3 (Android)

Dashboard and tracking enriched somewhat, footage on Motorola Droid (captured by someone else). I’ve not gotten around to implementing better tracking yet.

Retrieval statistics: 21 queries taking a total of 0.119 seconds • Please report low bandwidth using the feedback form
Original styles created by Ian Main (all acknowledgements) • PHP scripts and styles later modified by Roy Schestowitz • Help yourself to a GPL'd copy
|— Proudly powered by W o r d P r e s s — based on a heavily-hacked version 1.2.1 (Mingus) installation —|