Planet Linux Australia

Syndicate content
Planet Linux Australia - http://planet.linux.org.au
Updated: 8 min 2 sec ago

Simon Rumble: XRay for CSS

1 hour 31 min ago

Very very cool little bookmarklet that shows loads of cool info about the styles of an element you click on a page. Wow!

Contact me

Colin Charles: Silona speaks about grids, databases, and open government

2 hours 42 min ago

Silona Bonewald, the lady always in a hat (she says that it’s just become an extension of her). Describe her, by her tags: open government, open data, open standards, and databases.



(watch the video if your feed reader strips it out)

Silona’s the founder of The League of Technical Votes, which allows technical people to be more involved in voting process. As part of this, she created the Transparent Federal Budget, with Bill Bradley and Jimmy Wales.

On top of all that, she’s also the open source evangelist for grid.org. The focus there is a social network for grid, cluster, and cloud computing folk - a community of communities. Best of all, this was just launched on Tuesday!

It’s also the home to UniCluster, and they’ve recently struck a deal which Intel to pop UniCluster in BIOSes. UniCluster works with Sun’s Grid Engine, as well.

She’s interested in Drizzle, for the same reason that she likes Drupal. She likes the decorator model, and she thinks its a great way to get the parallel computing solutions fixed.

Needless to say, all of the stuff she works on currently, is powered by MySQL.

Michael Davies: LCA2009 CFP Closing Soon

Thu, 2008-07-24 13:26

So, you contribute to Open-Source? Got something to say? Want to recruit others to your project? Want to spread the word about cool stuff? Looking for recognition for your contribution? Then you should consider responding to the Call For Presentations for linux.conf.au 2009!

Submissions close in about a fortnight, so you need to get your skates on and read up on making a submission, and then submit your proposal. You won't regret it - being a speaker at linux.conf.au is very worthwhile :-)

linux.conf.au 2009 - Monday January 19 to Saturday January 24, 2009 - the conference you want to go (and be a speaker at if you've got the stuff to say!)

Michael Davies: LinuxSA August 2008 - Interesting stuff to do with MySQL and Drizzle

Thu, 2008-07-24 13:26
Hi all, Time for the August meeting announcement. Note that everything has changed: date, time, and location... Arjen Lentz is in town for the SAGE-AU conference, so we're going to run the meeting one week earlier than usual so we can fit him in. Ian Pilkington has organised for space at Prince Alfred College (Dequetteville Terrace, Kent Town) for us to meet at (thanks Ian!). Car parking should be easier than EXCOM, and it's not far from the city. There are buses that go from the Adelaide train station to right outside PAC for people who were training it into town. And, we're going to try a 6:30pm start this time. The start times people wanted ranged from 5:30pm to 7:30pm, so there's no way we're going to make everybody happy, but 6:30pm seems like a reasonable compromise of balancing too-early vs. too-late. The usual details: When: 6:30pm-8:30pm on Tuesday, 12th August, 2008 Where: Room G05/G06 Gerard Innovation Centre Prince Alfred College Capper Street, Kent Town SA Cost: FREE Who: Anyone and everyone. No pre-registration necessary. Presentation: Arjen Lentz was employee #25 at MySQL AB (2001-2007), and then founded Open Query in September 2007 which focuses on modular MySQL training (developed in-house) and consulting in the Australia and New Zealand region. Arjen also co-authored the 2nd edition of the new O'Reilly High Performance MySQL book. Originally he was a C programmer, with coding experience going back to the early 80s. In his spare time, Arjen likes to cook, walk, read, grow herbs/veggies, and explore RepRap. Arjen will be talking about interesting stuff to do with MySQL and Drizzle. Getting to the Venue: Prince Alfred College faces Dequetteville Terrace, but you need to enter from Capper Street. Parking is available on-street or maybe off-street (adjacent to the Sports Centre). Look for the two storey stone fronted building with sign "Gerard Innovation Centre". Enter through the double doors, first room on the right hand side of corridor (ground floor). The external door automatically locks at night. Should it not be propped open please be ready to knock loudly. There are buses that go along Dequetteville Terrace, with a stop adjacent to Capper Street. The 143, 145, and 146 buses leave from North Terrace, and the 141 and 142 buses leave from Currie Street and Grenfell street. If you are in the city, you could also catch the 99C bus to East Terrace, then take a 10-15 minute walk to the College. Pizza: After the meeting, please join us for pizza at San Georgios (cnr. Frome Street and Rundle Street in the city). For more information: Email: organisers@linuxsa.org.au Web Page: http://www.linuxsa.org.au/ Mailing List: linuxsa@linuxsa.org.au IRC: #linuxsa on irc.freenode.net

Chris Samuel: Changing a Mailman list subscribers email address

Thu, 2008-07-24 12:13

Just had to figure out how to change the email address for a subscriber to a Mailman mailing list, and couldn’t find anything obvious saying it so having figured it out I thought I’d blog it for future reference.

It’s actually pretty easy, and fairly obvious once you know how:

clone_member -n -r user@old.address.com user@new.address.org

In other words, for all the mailman lists on this system go through and clone the old, non-working address user@old.address.com as user@new.address.org and then the -r option tells it to remove the old address.

The -n option is there to stop you shooting yourself in the foot and tells it to only tell you what it would do without actually doing it, so you’ll need to remove that to get it to actually take the action.

Caveat - as the manual page says:

Note that this operation is fairly trusting of the user who runs it — it does no verification to the new address, it does not send out a welcome message, etc.

a

Changing a Mailman list subscribers email address

Steven Hanley: [leisure/food] Wines from Plonk!

Thu, 2008-07-24 07:32
So I had been wondering what to get my mother for her 60th birthday celebrations, the actual celebration is tomorrow even though her birthday was yesterday. However I will give her a gift tomorrow, I feel I can safely write about it here as she never actually reads this unless bludgeoned with a link to a particular entry.

It occurred to me that Mum and her partner drink wine with food and like to try out a variety of different wines. After getting some wine recommendations from Jane I set about finding somewhere to buy some nice wines from knowledgeable staff. I had Plonk at the Fyshwick Markets suggested and they sounded good as they focus on smaller labels and more variety than you may find from a large bottle shop chain.

I grabbed my car from home at lunch today and drove over to have a look, I walked away with what I think will be a reasonably nice gift of 8 bottles of wine from them, 6 whites and two reds. The wines I got are.

  • Lake George - Pinot Gris
  • Lake George - Shiraz
  • Brindabella Hills - Chardonnay
  • Pikes Clare Valley - Reisling
  • Krinklewood - Verdelho
  • Pizzini - Sangiovese
  • Tohu - Sauvignon Blanc
  • Garden Gully - Sparkling Shiraz

The Tohu comes from Marlborough region of New Zealand, apparently this is quite an award winning wine. Three of the wines as you can see are very much local and the others are all Australian. I liked the guys I talked to in the shop and we even talked about the possibility of them supporting some mountain bike stuff with CORC.

Russell Coker: SE Linux Policy Loading

Thu, 2008-07-24 07:21

One of the most significant tasks performed by a SE Linux system is loading the “policy“. The policy is the set of rules which determine what actions are permitted by each domain.

When I first started using SE Linux (in 2001) the kernel knew where to find the policy file and would just read the data from disk as soon as it had mounted the root filesystem. Doing such things is generally considered to be a bad idea, but it was an acceptable mechanism for an early release.

One issue is that the policy needs to be loaded very early in the system boot process, before anything significant happens. In the early days the design of SE Linux had no support for a process to change it’s security context other than by executing another process (similar to the way a non-root process in the Unix access control system can not change it’s UID, GID, or groups). Although later on support for this was added, it was only available as the request of the application (an external process could not change the context of an application without using ptrace - a concept that is too horrible to contemplate) and I am not aware of anyone actually using it. So it’s almost a requirement that there be no more than one active process in the system at the time that policy is loaded, therefore it must be init or something before init that loads the policy.

When it was decided that a user-space program had to instruct the kernel to load the policy we had to determine which program should do it and when it should be done, with the constraint that it had to be done early. The most obvious solution to this problem was to load the policy in the initramfs (or initrd as it was known at the time). One problem with this is that the initramfs is limited in size by kernel compilation options and may need to be recompiled to fit a bigger policy. As an experiment to work around this limitation I had a small policy (which covered the domains for init and the scripts needed for the early stages for system boot) loaded in the initramfs and then later in the boot process (some time after the root filesystem was mounted read/write) the full policy was loaded.

A more serious problem with including policy in the initramfs was that it required rebuilding the initramfs every time the policy changed in a significant way, of course scripts could not determine when a change was significant (neither could most users) so that required needless rebuilds (which wastes time). Even with a small policy for early booting loaded it was still sometimes necessary to change it and update the initramfs. I believe that as a general rule an initramfs should only be rebuilt when a new kernel is installed or when a radical change is made to the boot process (EG moving from single disk to software RAID, changing between AMD and Intel CPU architecture, changing SCSI controller, or anything else that would make the old initramfs not boot the machine). The initramfs that was used to boot my machine is known to actually work, the same can not be said for any new initramfs that I might generate.

But the deciding factor for me was support of machines that did not use an initramfs or initrd (such as the Cobalt machines [1] I own).

To solve these problems I first experimented with a wrapper for init. The idea was to divert the real init to another file name (or use the init= kernel command-line option) and then have the wrapper load the policy before running the real init. I never intended that to be a real solution, just to demonstrate a point. Once I had proven that it was possible to load the policy from user-space before running the real init program it was a small step to patch init to do this.

One slightly tricky aspect of this was in getting the correct security context for init. The policy has always been written to allow a domain transition from kernel_t to init_t when a file of type init_exec_t is executed. The domain kernel_t is applied to all active processes (including kernel threads) at the time the policy is loaded. So init only has to re-exec itself to get the correct context. Fortunately init is designed to do this in the case of an upgrade so this was easy to manage.

Since that time every implementation of SE Linux apart from some embedded systems has used init to load the policy.

The latest trend in Linux distributions seems to be using upstart [2] as a replacement for the old SysV Init. The Fedora developers decided to make nash (a program that comes from the mkinitrd source tree in Fedora and is a utility program for a Red Hat based initramfs) load the SE Linux policy as it would apparently be painful to patch every init to load the policy.

As far as I am aware there are only three different init programs in common use in Linux, the old SysV Init (which used to be used by everyone), Busybox (for rescuing broken systems and for embedded systems), and now Upstart (used by Ubuntu and Red Hat since Fedora 9). Embedded systems need to work differently to other systems in many ways (having the one Busybox program supply the equivalent to most coreutils in one binary is actually a small difference compared to the other things), and modifying the policy load process for embedded systems is trivial compared to all the other SE Linux work needed to get an embedded system working well. There are at least two commonly used initramfs systems (the Debian and Red Hat ones) and probably others. As one init system (SysV Init) already has SE Linux support it seems that only one needs to be patched to have complete coverage. I’ve just written a patch for Upstart (based on the version in Debian/Experimental) and sent it to an Ubuntu developer who’s interested in such things. I also volunteer to patch any other init system that is included in Debian (I am aware of minit and will patch it as soon as it’s description does not include “this package is experimental and not easy to install and use“).

It seems to me that repeating the work which was done for SysV Init and upstart for any other init system will be little effort, at worst no greater than patching an initramfs systems (and I’ll do it). As the number of initramfs systems that would need to be patched would exceed the number of init systems it seems that less work is involved in patching the init systems.

The amount of RAM required by the initramfs is in some situations a limitation on the use of a system, when I recently did some tests on swap performance by reducing the amount of RAM available to a Xen DomU [3] it was the initramfs that limited how small I could go. So adding extra code to the initramfs is not desired. While this will be a small amount of code in some situations (when I patched /sbin/init from Upstart it took an extra 64 bytes of disk space on AMD64), dragging in the libraries can take a moderate amount of space (the fact that an LVM or encrypted root filesystem causes SE Linux libraries to be included in the initramfs is something that I consider to be a bug and plan to fix).

Finally not all boot loaders support an initrd or initramfs. I believe that any decision which prevents using such sweet hardware as Cobalt Qube and Raq machines from being used with SE Linux is a mistake. I have both Qube and Raq machines running fine with Debian SE Linux and plan to continue making sure that Debian will support SE Linux on such hardware (and anything with similar features and limitations).

Andrew Pollock: [life] Three years later

Thu, 2008-07-24 05:21

Today is our third wedding anniversary.

We're marking the occasion by having a night at the Tickle Pink Inn, which I can vouch for as being very nice indeed.

Unfortunately I ended up on-call this week, so my day off tomorrow isn't going to be as idyllic as it could have been.

It's hard to believe we've only been married three years. I think we've already been through more than a lot of married couples would have to go through in a lifetime.

Here's to at least another 50 years.

Arjen Lentz: PHPUnit, Selenium... Sebastian's workshops in Australia

Thu, 2008-07-24 03:04
Sebastian Bergmann's slides of his presentation at OSCON this week. Quality Assurance in PHP Projects is a workshop by Sebastian (author of PHPUnit) in Melbourne (4-6 August) and Brisbane (11-12,14 August), on my invitation. This was triggered by meeting up with him earlier this year at the MySQL Conf in Santa Clara, and a discussion I had a month or so later with Jonathan Oxer of IVT.



I've been promoting various aspects of development process improvements through the keynote selection at OSDC 2007, the distributed revision control talk at the combined MySQL/PHP user groups in Brisbane by Ian Clatworthy (Canonical/Bazaar), and of course test-driven development for PHP is another key aspect. PHP is pupular (essentially it runs Web 2.0) but so easy that coders can get very slack. On a larger project, this can become disastrous. I don't believe that PHP is fundamentally bad; given the right development environment, it's fine. It's just that what's regarded as standard in the Java and Ruby/Rails world, has been nonexistent, hard to use, or optional in the PHP realm.



Anyway, both workshops are almost full now, just one or two places still available. No this is not marketing blah to just make you think it's popular ;-) If I say almost full, I do mean just that. I gave Jonathan a place for the Melbourne workshop, as it's his birthday coming up this Saturday (Unfortunately I can't make it to the party next week). Jonathan is a special friend to me and Open Query as we bounce around ideas and exchange interesting books. IVT also happened to be Open Query's first customer.



Speaking of gifts, consider donating something for little Ivan Nikitin's operation: http://www.mysql.com/about/help-ivan.html. This is not another random sad chainletter, this is a real small smurf, son of a MySQL support engineer. Ivan and his parents have now already arrived in Germany for the tests and procedures that Ivan needs, however additional financial help is still very important.

Jacinta Richardson: OMG I won a white camel

Thu, 2008-07-24 01:31

Unfortunately, despite plans, I wasn't able to attend OSCON this year even though my husband, Paul Fenwick has made it. It would have been my first time out of Australia, but I'll have to wait for that.

Still, I asked him to bring me home a present, and last night he sent me:

You asked me to bring you home a nice present. I'm actually bringing home a present from the entire Perl community for you!

You're the recipient of one of the three White Camel awards!

I struggled at first to take him seriously.

Wow.

Really, Wow.

I didn't even know I was nominated. Thankyou to the unknown person or persons who nominated me.

Someone asked me what a white camel award was; and I struggled to answer the question to my satisfaction. So I searched and found:

The White Camel reward recognises the Perl community's "unsung heroes"--those who have devoted extraordinary creativity, energy, and time to the non-technical work that supports Perl's active and loyal user community.

I think originally it was divided into three areas: Perl Advocacy, Perl User Groups, and the Perl Community with one award each; but I suspect that distinction has since been dropped.

I join a very short list of very impressive people who've also earned one of these awards and share this year with Gabor Szabo and Tatsuhiko Miyagawa who most certainly deserve their awards.

Thanks again to those who nominated me; to the judges who've honoured me; to Paul for accepting the award on my behalf and to everyone else who's offered me such lovely and sincere congratulations!

Kim Weatherall: UK to announce three-strikes scheme for ‘curbing’ downloaders’ internet access

Thu, 2008-07-24 00:49
The Times today is reporting that ‘[p]arents whose children download music and films illegally will be blacklisted and have their internet access curbed under government reforms to fight online piracy’. According to the report: The measures, the first of their kind in the world, will be announced today by Baroness Vadera, who brokered the deal [...]

Kim Weatherall: A Balanced Interpretation of the Three Step Test

Thu, 2008-07-24 00:39
A group of European IP Professors have drafted a Declaration, available from the Max Planck Institute, which offers ‘a balanced interpretation of the “three step test” in copyright law’. The Three Step Test is a provision found in various treaties on IP and particularly copyright - the Berne Convention, TRIPs, and the Australia-US Free Trade [...]

Daniel Stone: some metrics

Thu, 2008-07-24 00:27
Make of them what you will.



daniels@psyence:~/x/xorg/xserver% wc -l **/*.[ch] | tail -1

  730420 total

daniels@psyence:~/x/xorg/xserver% git diff -p xorg-server-0_99_1.. | diffstat | tail -1

 2747 files changed, 178062 insertions(+), 628051 deletions(-)

daniels@psyence:~/x/xorg/xserver% echo $((628051-178062))

449989

Kim Weatherall: UK Professors’ Open Letter on Copyright Term Extension

Wed, 2008-07-23 23:56
This is a brief, excellent statement on why copyright term extension is a bad idea, written by a very authoritative, and not-at-all-radical-lefty-commie-pinko, law professors. As an Australian, I read it with interest, and some sadness - we are already protecting the ‘record companies, ageing rock stars or, increasingly, artists’ estates’ via a term extension agreed [...]

Hugh Blemings: Ottawa Linux Symposium Presentation

Wed, 2008-07-23 23:28

Thankyou to the folk that attended my presentation at OLS this afternoon, a good crowd and some excellent suggestions from the audience.

As I mentioned in the talk, I've put my slides up here and have made some additions based on discussions during and after the session. Starting to think this might be worth putting in a Wiki or sommet like that.

Thanks again to the folk here at the conference, those around the OzLabs lunch table and from elsewhere that contributed :)

Colin Charles: Brian, Monty and Tim O’Reilly at OSCON 2008 Keynote

Wed, 2008-07-23 19:36

Interested in MySQL? Drizzle? How the Sun acquisition is going for MySQL? Listen to Brian, Monty, and Tim speak about this, at the OSCON panel. Watch the video, its 20+ minutes, it starts off a bit shaky (oops), but I’m mostly happy with the rest. Enjoy.

Glen Turner: Autodeath

Wed, 2008-07-23 17:34

When I saw Paul Fenwick's blog on autodie my soul leapt towards Nirvana, since I've wanted an autodie facility in Linux for a long time. Then I read the article and found it wasn't what I thought it was at all.

Let me explain.

Linux works. So some people don't update it. There's nothing wrong with that -- unless the machine on the Internet. In that case older and unsupported machines are very vulnerable to misuse. There's a lot of those machines about. I unplugged a machine running Red Hat Linux 5.2 the other day.

I'd love for all distributions to ship with an autodeath cron job. Ship the operating system with an expected expiry date, when that date arrives delete any default route. If the vendor extends maintenance then they can update the autodeath package as part of that maintenance. Similarly for an distribution "legacy" maintenance project.

Deleting the default route is sufficient. Standalone machines won't have a default route, so autodeath will have no effect, which sounds correct. Internet-connected machines will lose Internet connectivity, which sounds right. Especially if booting into single user mode and manually starting the network still works so the machine's owner has a path to doing a network-based OS upgrade.

Simon Rumble: All CMSes suck

Wed, 2008-07-23 14:50

I have a slide I use when presenting about content management systems to manglement types. Content management systems suck. They're designed that way. The main idea behind them, in a corporate context, is to allow content to be published quickly by people who don't know (much) HTML so that it fits within the existing structure. The trade-off is that it's a whole lot less flexible. Anything you want to do that doesn't fit into the built-in templates and structure is going to require some development.

The reason I use this slide is to explain that there's a middle ground in there. If you're an enormous publishing organisation with daily deadlines and a team of editors, sub-editors and content approvers, then the top-end systems are necessary. For most corporate web sites though, somewhere in the middle makes more sense.

When you demonstrate the idea of approvers and workflow that's built into most CMSes, manglement types start getting ideas. They love the idea of a defined workflow, with things getting signed off as they go through the workflow. Yet I've never worked in an organisation where the workflow features work. You always end up with one or more approvers who constantly forget their logins, forget what they're supposed to do to approve, or do the wrong thing when they're in there. It always ends up reverting to a paper-based system, printing out the content for approval. In most situations, it's a better approach. The workflow systems in most CMSes get turned off pretty quickly in most implementations.

I'm about to start specifying a new content management platform for my employer, so it's got me thinking about the complexity level we're going for. Parts of our site are quite tricky, technical bits of code and integration with other systems. But most of it is just plain content. Our current CMS is a little too far to the right on the axis I've drawn above, with seemingly-simple changes quite hard to make, involving digging through templates, schema definitions and template elements. I need to find a middle ground for the next crack at it.

Looking around at the free software content management systems, it's pretty difficult to compare them in any meaningful way. And more important to me is the company we end up using to build the thing. I'd really rather not have a PHP/MySQL platform, but two off the seemingly best-supported CMSes (Joomla and Drupal) are just that. I love the look approach taken by the Perl+XUL cyclone3, but the only companies supporting it seem to be in Europe.

So, lazyweb, can you recommend any good CMS development companies who are interested in a pretty big project? I'd like a small, nimble, free software-loving group who are well-versed in Agile development. Sydney ideally, but elsewhere in Australia is okay. Let me know.

Contact me

James Morris: Notes from the SELinux Developer Summit 2008

Wed, 2008-07-23 13:13
The SELinux Developer Summit went pretty well yesterday. It was a long day: 10 hours of talks and discussions with about forty developers attending.



I've just uploaded slides from the talks, which may be found next to their respective entries in the schedule.



Some of the talks I found particularly useful/interesting:



  • Josh Brindle on SELinux in Ubuntu. They're making good progress, although the idea of SELinux is to introduce ubiquitous, generalized MAC security, so he is advocating they enable SELinux by default as is done in Fedora, and as you typically do with other OS security layers.


  • John Weeks from Sun talking about OpenSolaris FMAC (introducing Flask/TE to their OS). It was interesting to see a dtrace graph of the AVC operating—a kernel mechanism for which I've developed an abstract mental model but never "seen".


  • Dan Walsh Talking about his ongoing work in utilizing SELinux to create practical security features for everyday users.





    The above is from a demonstration where nsplugin (the framework for Firefox plugins, i.e. where flash etc. is run) is being sandboxed by SELinux, so that a flawed or malicious plugin cannot be used to snoop your keystrokes. In this case, a simulated (and trivial) exploit was blocked from capturing internet banking passwords by SELinux.



    Btw, Dan will be demonstrating this today during his OLS talk on Confining the User. There's a lot of really cool stuff coming in this area & the talk should be well worth attending.




  • Karl MacMillan on alternatives to comprehensive least-privilege, where he described some ideas and plans for simplifying the way SELinux policy is deployed for general purpose use. He has some really promising ideas on reducing the granularity of the policy while still maintaining strong security. This can lead to simpler and smaller policy, which is important for all kinds of users.


  • Peter White talked about two higher-level languages being developed to express SELinux policy, Lobster and Shrimp, which will introduce features such as type checking and object orientation to the policy language area. Peter is a Haskell guy, and it all looks very promising.






***







Yuichi Nakamura talking about embedded systems and SELinux.

The format worked reasonably well—a series of short talks and discussions—although it would have been nicer to have a more relaxed schedule and more time for deep discussions on specific issues. There's already been discussion of what to do next year, and we may move it to a two-day event. Certainly, I think we'll want to have it again in conjunction with a major developer conference, which makes it a good environment for collaboration with the wider FOSS community.



For those that couldn't make it this year, I believe notes were taken and will be sent out to the mailing list. There are more photos here.

Michael Still: The Stainless Steel Rat Series

Wed, 2008-07-23 13:11
I am increasingly becoming obsessed with science fiction from 1950s and 1960s. Again stolen from Wikipedia, here is a list of all the Stainless Steel Rat books:



YearTitleNotes 1985A Stainless Steel Rat Is BornPurchased from Powell's Books 1987The Stainless Steel Rat Gets DraftedIn poor condition. Purchased from bookstore in a basement, Curtin 1994The Stainless Steel Rat Sings the BluesPurchased from bookstore in a basement, Curtin 1961The Stainless Steel RatPurchased from Gaslight Books 1970The Stainless Steel Rat's RevengeIn poor condition. Purchased from bookstore in a basement, Curtin

In good condition. Purchased from Gould's Books 1972The Stainless Steel Rat Saves the WorldPurchased from Gould's Books 1978The Stainless Steel Rat Wants YouPurchased from Bookbuyer's 1982The Stainless Steel Rat for PresidentPurchased from Bookbuyer's 1996The Stainless Steel Rat Goes to HellPurchased from Bookbuyer's 1999The Stainless Steel Rat Joins the Circus 1993The Golden Years of the Stainless Steel Rat



Additionally, there is: YearTitleNotes 1993Stainless Steel VisionsContains one Stainless Steel Rat shortstory. Purchased from bookstore in a basement, Curtin



Tags for this post: book() Harry_Harrison() Comment