Title photo
frugal technology, simple living and guerrilla large-appliance repair

Regular blog here, 'microblog' there

Many of my traditional blog post live on this site, but a great majority of my social-style posts can be found on my much-busier microbloging site at updates.passthejoe.net. It's busier because my BlogPoster "microblogging" script generates short, Twitter-style posts from the Linux or Windows (or anywhere you can run Ruby with too many Gems) command line, uploads them to the web server and send them out on my Twitter and Mastodon feeds.

I used to post to this blog via scripts and Unix/Linux utilities (curl and Unison) that helped me mirror the files locally and on the server. Since this site recently moved hosts, none of that is set up. I'm just using SFTP and SSH to write posts and manage the site.

Disqus comments are not live just yet because I'm not sure about what I'm going to do for the domain on this site. I'll probably restore the old domain at first just to have some continuity, but for now I like using the "free" domain from this site's new host, NearlyFreeSpeech.net.

Fri, 25 Dec 2015

Generate a random number between 1 and 100 in JavaScript, Ruby, Python, Groovy, Perl and Bash

News that the random number generator in JavaScript was fixed (I didn't know it was broken) prompted me to wonder how easy (or hard) it is to generate a random integer between 1 and 100 in as many languages as I could.

Of course I used Google and the sites it found for me to come up with these methods.

Generating random numbers is important in programming, and it's very important that those numbers be truly random. That's why the problem with JavaScript's random numbers seems so serious, especially with JavaScript's ubiquity not just on the client (where it's carrying a heavier load than ever) but now the server via Node.js.

So you want to generate a random number between 1 and 100? Here are n ways to do it:

Random numbers in various computer languages:

JavaScript

Use node to run this line in your terminal (you do have node installed on your computer, right? If not, you should):

Math.floor(Math.random() * 100) + 1

Ruby

It's even easier in Ruby (use irb to run this in the console):

rand(100) + 1

Python

In Python, it takes a couple of lines. You can run this in the python console (type python at the command line, then start typing your commands):

import random print(random.randint(0,100))

Groovy

I have been experimenting with Groovy, a dynamic language that uses the JVM (the Java Virtual Machine). If you have Groovy installed, start the graphical Groovy console with the command groovyConsole.

Math.abs(new Random().nextInt() % 100 + 1)

Perl

While Perl doesn't have an interactive shell like Ruby and Python, you can run a one-liner from a terminal using the perl command. Here is a random number between 1 and 100 in Perl:

perl -le 'print int(rand(100)) + 1'

Bash

You can also do it in the Bash shell with $RANDOM:

echo $RANDOM % 100 + 1 | bc


Analysis: Ruby offers the easiest, most elegant way to generate a random integer from 1 to 100 with a one-liner. But you can do it in most every dynamic language.

Notes: I'm sure this can be done in a Perl one-liner

Tue, 22 Dec 2015

Own your social entries, create them from any device

The ideal is a free, open, federated social-media platform like Identi.ca or Status.net, but even those services, when run by others, are subject to a certain bit rot. They're here today, but will they be tomorrow?

We live in a world of mega-services like Twitter and Facebook. Multi-billion-dollar important companies. And in our zeal to communicate, we spend hours creating free content for them in exchange for free service.

Still, they offer value. If the few people we want to share our thoughts with also subscribe to a given service, there is value. That's how Facebook grew.

On Twitter, I can tell you that having 900 followers does not provide a lot of eyeballs for my tweets. I'm lucky if 40 people see them. Twitter is all about the now. A tweet's sell-by date is maybe a half-hour after it's created.

I think short, social-media-style updates are valuable.

But I want them to be my own. I have that, pretty much, when I create them through my blog and distribute to social-media services from there.

From my laptop, I'm about 90 percent of the way there. I'd like sharing links to be a little more automatic. Like on mobile devices. Android has "intents." Apple has the same thing, but I don't know what they call it.

And mobile is the place where I have the furthest to come.

If I were using WordPress, I bet the WP app for Android (and iOS, too) hooks into "intents" and allows link sharing.

But I don't use WordPress.

My Ode blog works off of a traditional filesystem on the server. There is no database. Create files, and with a few tweaks and pokes, you have a live blog entry.

I don't want to go back to a database. Flat files on a server is not just Ode's but every static-blogging tool out there's killer app.

So what I need is a mobile app that hooks into "intents" to allow link sharing and produces the files I need, gets them on the server and does what I need to make those files appear on the live site.

It shouldn't be too difficult. (Famous last words.)

It's what's driving me to learn Java and Android development. That and everything else.

Having a problem to solve and making something to do that. What could be better?