Just a test - this is only a test.


The 1999.io blogging tool has a feature supporting redirection of domains for a weblog. However, there are a few other steps that are needed to use the feature and have a URL that does not contain a port number. This post offers some tips in this area. I am using John Philpin's weblog URL as an example.

1.  Set up an A record

Using your DNS provider, create an A record pointing to the IP address for your server. Here is an example of what it would look like on my provider:

Domain: beyondbridges.net

Host record: river

Points to: 123.234.345.456 (fill in the IP address of your server here)

2. Enter command on your server to redirect port 80 to port 1999

The default setup of 1999.io is that the application runs on port 1999. Enter the following command in a terminal window on your server while logged in as root:

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 1999

Normally, when you go to a website like river.beyondbridges.net, the response comes over port 80. When this command is entered, the server will map port 80 to port 1999. This makes it look like your app is running on port 80, but it is really running on port 1999.

Reference: http://blog.1999.io/2016/05/07/0020.html

3. Updates to config.json

An addition to config.json is needed to use the domains feature in 1999.io. Here is an example of the text to add to your copy of config.json:

"where": {

       "flUseLocalFilesystem": true,

       "publicPath": "publicFiles/",

       "privatePath": "privateFiles/"

},

"domains": {

        "river.beyondbridges.net": "/users/jgphilpin"

},

Typical config.json setups should already have the "where" part, I just included it to provide a reference for where to add the domains entry. There is also an example config.json at the reference URL below.

Reference: https://github.com/scripting/1999-project/blob/master/docs/domains.md

4. Restart your server

After performing steps 2 and 3, you will need to stop your server and start it again.

I have an example server running on http://node2.andysylvester.com:1999 (my 1999 editing environment) and the redirected blog at http://newblog.andysylvester.com. The RSS feed is at http://newblog.andysylvester.com/rss.xml.

I would be interested in feedback from other 1999.io users on this topic - let's hear from you!


I have set up my own instance of Federated Wiki at http://fedwiki.andysylvester.com using these instructions, looking forward to getting started with this tool!

Here are some instructions for learning how to use Federated Wiki.

Dave Winer hosted a meetup in Portland, Oregon for readers of his weblog, Scripting News. This was my first time to meet Dave Winer in person. He was interesting and full of ideas and stories, we had a lot of good discussion. The first discussion topic focused on getting credit for one's work, and how to reward creators without using patents or similar vehicles. Next, discussion turned to non-technical users and how they view their data. Ward Cunningham get stuff from computers (consume (my word)), but don't create stuff. Several people gave examples of how earlier work they created could no longer be consumed (Ward Cunningham, Dave Winer). Next, discussion moved on to how to create languages/systems/technology that lasts. Ideas suggested included JSON, IRC app development, and use of Creative Commons. The final area of discussion was what vision motivates people when they develop new things. Allen Wirfs-Brock challenged the group to think about what a world in which we are surrounded by digital devices should look like.

At the dinner following the meetup, I spoke with Ward Cunningham about Federated Wiki and also heard about Mike Caulfield's Wikity project, which is based on Federated Wiki concepts. Over the past few days, I watched some videos on both Federated Wiki and Wikity, and I want to try them out. Mike Caulfield has an excellent presentation on how using Federated Wiki can support and facilitate the discovery of knowledge. His videos on his Wikity tool also demonstrate the potential richness of connections between ideas and topics entered into these tools. I am looking forward to setting these up and trying them out!

Additional resources:

Podcast - Dave Winer and Ward Cunningham

Podcast - Dave Winer and Allen Wirfs-Brock

Post: Blogs and Wikis - All about people (Dave Winer)

Post: Dave Winer Meetup Notes - liveblogging of meetup (Andy Sylvester)

Post: Preserving Content (Ted Bergeron)


These are my liveblogging notes of Dave Winer's meetup in Portland, Oregon. Keep refreshing...the RSS feed probably will not be current.

Opening

Dave Winer intro - giving history of how he runs meetups, Bloggercon ground rules 

Our agenda

Attendees:

Dave Winer

Allen Wirfs-Brock

Ward Cunningham

Morgan

Emily

Ben Keep

(total of 15)

Discussion:

Dave - referring to SN post on podcasting, would like to see people get credit for developing new technology without a patent

Morgan - How is giving credit different from starting an open source project?

Dave - It's not different

Allen - Brought Dave W and Ward C together last year to discuss collaborations, many people don't know the innovations that these two have contributed

Dave - Went to YC College, had lots of people asking me how to do the things I did , would love to come up with a way to reward young people for creating new things

Morgan - People give stuff away for free and others profit off of it, ethical dilemma

X - Getting credit for what you do is important. I can point to my software, since it is open source. 

Y - If you are writing words, copyright is important to you

Dave - I copyright all my writing

X - Don't confuse copyright and credit

Ward C - You have to protect your trademark (if you have a trademark)

Ward C - Tektronics did not pay their employees to make them famous, but I did work on a lot of neat things

Allen - Credit is something you get from your peers, impact is different

Dave W - When you have interop, someone was generous

Allen -  What do we want as users? I want my stuff available to work with and not stuck in a silo, maybe we need to come up with a vision for non-technical users?

X - We talk to Firefox users about sync, and it bothers them where their data is

Ward C - Most people get stuff from computers, they don't create stuff. Hypercard story - made stuff for my kids. I would love to pull these up, but I can't because Hypercard is no more

Dave W - We need durable languages/systems/technology that lasts 

Discussion around Javascript, Web Assembly, emulators

Ward C - I vote for JSON

Dave W - Let's create some best practices for information xxx, recounted XML-RPC and SOAP development

Ward C - We need continuity. I am starting a new implementation of Federated Wiki, maybe should plan to reimplement every 5 years.

Dave W - I want to work on the platform that Ward works on

Ward C - JSON and Creative Commons

Emily - Why not develop apps on IRC?

Dave W - Programming becomes fun when I can plug my stuff into yours

Z - Feels like people want to own the whole stack. I am excited about Solid (TBL project)

Allen - What is our vision now that is motivating us as we develop new things

Morgan - People want to have a conversation

Ward C - and something comes of it

Allen - We are going to be surrounded by digital devices, what do we want that world to look like?

Lots of discussion

Allen - Worse is better


I am trying to learn more about RSSCloud and PubSubHubbub by playing around with example apps. I tried to run a test app to check for updates to my 1999 blog, but the RSSCloud server created by Andrew Shell did not seem to like a feed URL that has a port number in the URL. I sent him a note, hope to hear something soon. 

I am taking a look at PubSubHubbub. I dded a WordPress plugin to my main site, and I can see that that there is a link in the RSS feed to a PuSH hub. I tried some experiments to see how fast a reader could update when I make a post. The Old Reader did not seem to do well. I tried Inoreader next, and it picked up the updates right away, but I had to refresh the screen to get the update.

I am going to start playing with a NPM module as well, will comment on that in another post.

When I was growing up, I had severe allergies (food, animal dander, dust, pollen, etc). As a result, the only pets that I had were fish or gerbils. Over time, most of those allergies faded away, except for the pet-related ones. When we started our family, we started getting back into the pet business (I started taking allergy medicine again...). In the past year, we added a dog to a cat that we already had. He was an older dog (7) and we got him at a shelter. As a first-time dog owner, I have spent a fair amount of time walking our dog Arlo and taking him to a local dog park. In helping with the walking chores, I tried to give Arlo the chance to visit other dogs that we meet on our walks. As the walks have continued, I have learned the names of quite a few dogs in our neighborhood, and met their owners as well. I would not have met them except through the act of dogwalking. To me, this has become a way of building community, of connecting to my neighborhood. It has become part of my life.

In this post, I am going to talk about one of the areas that I think appeal to Twitter users - Twitter as a conversational tool, and how that works.

When someone posts a tweet, and it appears in your tweetstream, there is a link to reply to the tweet. If the original tweeter is online, they can easily and quickly respond, and a conversation can start. To me, that ability to have a conversation is one of the key benefits of Twitter. The back-and-forth is something more like a IM chat than exchange of postings. To support that, Twitter is using their servers to support the back and forth such that the lag can be quite short. This would not be the case for a blog and comment exchange. Also, the replies can be viewed almost immediately after sending (I am speaking about the web version of Twitter). In a weblog post/comment, you would need to keep refreshing to see if there was any response.

So, another aspect of the Internet Twitter would be - how to provide that interaction? In Dave Winer's post, he mentioned that someone had recommended XMPP as a protocol for  this Internet twitter. Another possible technical solution might be based on RSS Cloud, which is supported by several of Dave Winer's tools. 

More to come...


Continuing with thinking about how an Internet Twitter would work, I am going to look at what I do with Twitter and what happens

1. Post tweets - tweet goes to everyone who is following me, shows up on a tab of a Twitter user if I mention their Twitter handle in the tweet, appears in my account's public tweetstream

2. Retweet tweets - same as if I posted the tweet (see 1.)

3. Direct message - send a message to a Twitter user (like a text), hoping that I will hear back from that person

4. Search - can search for a search term (hash tag) in other tweets

5. Follow - get a list of tweets for someone I am following, the list appears in my reading tweetstream

6. Like - indicate that you "like" a particular tweet

How can I do this stuff if I don't want to use Twitter?

1. Post - use a weblog, followers have to subscribe to my RSS feed

2. Retweet - use a weblog, copy text from tweet or source into my weblog post, my followers have to subscribe to my RSS feed

3. Direct message - use IM app

4. Search - use a search engine for what I am interested in, not sure if people can search Twitter without using Twitter's search

5. Follow - Can use TweetsToRss to get a list of Twitter tweets that I can following using RSS reader, can follow people posting from weblogs using RSS reader

6. Like - Not sure how to "like" a tweet without using Twitter. Can post comments to weblog posts, Webmention would be another way to leave comments if the other site supports Webmention

This is just a start, will be posting more on this subject soon.


On my business trip to Canada, I finally made it to Montreal! I enjoyed a wonderful dinner at the Upstairs Jazz Club and heard a great jazz quintet - Masson Stomp. I also had a great ride on the Metro, was able to figure things out even though everything was in French. I also bought some excellent chocolate at Suite 88 - everyone at home loved it! It was well worth the wait, I hope to experience it again sometime.

Here is my response to Dave Winer's post on developing the Internet Twitter.

I agree with the premise – I think there should be an open alternative to Twitter.

It should be NEA – No one owns it, everybody can use, anybody can improve it (referring to two Doc Searls pieces on social media  and Internet infrastructure).

There are at least two systems that I know of that meet these criteria – Pump.io and GNU Social. However, I have never used these, and I don't know how much other people use these. I have looked at a number of other projects attempting to replicate Twitter, but I don't think many of those have achieved much traction. There are also some IndieWeb efforts underway, time will tell if they make an impact.

What makes Twitter a more appealing service than setting up your own thing? Well, easy to start (just sign up), generally people you know are using it, it's easy to find them if you don't know their Twitter handle...and by the way, it's free (like Gmail, Facebook, and every other Internet service that is provided at no direct cost, but where the user is the product).

I have been an early user of the 1999.io blogging tool created by Dave Winer (the software I am using to publish this post), and I can tell you that it can be difficult for people who have not set up something like this before to do so (I have helped several people myself). However, 1999.io is right in line with the NEA principles, which is great. Also, anyone who takes the time to create a new product and bring it to completion deserves our praise, if for no other reason that they took the time and did something, instead of just talking about doing something, that they dared greatly.

At the dawn of the Internet, Apache was not easy to setup, nor email servers, or FTP servers, yet people persevered, and the Internet grew. Since the rise of the silos, people have moved aware from taking responsibility for their Internet presence and given it to other organizations. There have been benefits, to be sure, but some losses as well.

I would like to be involved in the development of a open Twitter system. My bigger contribution might be in the documentation area (I feel like I have made a good effort for River4 and 1999.io), but I would like to think I can make a contribution on the technical side. I can't say I am going to start a Twitter effort on my own, but I am going to start writing about what I think it should look like, and see where that takes me.


I am on a business trip in Quebec, Canada. Quebec uses French as a primary language (all street signs are in French, most people speak French, schools are taught in French, etc.). I know a little French, but not much, so I speak English in stores and restaurants. The workers can instantly respond in either French or English, depending on how you address them. As a result, I don't want to say "Bonjour" because I might end up starting a conversation in French that I can't finish....


I decided to take Little Outliner 2 for a stroll this morning, and it seems to be working fine with my nodeStorage server. At first, I thought the switchServer command was not working correctly, but then I saw this post on the Little Outliner blog that files are private unless you make them public. I then checked in my privateFiles folder and found the files I was looking for - whew!

My wife and I went to the Waterfront Blues Festival in Portland, Oregon over the July 4th weekend. The event is organized by the Oregon Food Bank, and attracts tens of thousands of music lovers over four days. Our goal was to see a zydeco band, Steve Riley and the Mamou Playboys. We had seen then 18 years ago at Mulate's Original Cajun Restaurant in New Orleans,  and they were just as good as  back then, even though I think everyone in the band had changed except for Steve Riley. We even took in a zydeco dance lesson (will post pictures later). After their set, I went to buy a copy of their CD and get it signed by the band. I told Steve Riley about the last time we saw him, and he looked surprised. We're glad they came to Portland!

One more interesting computer note this week - a microcomputer built from discrete transistors. Of course, it is not micro-sized - it fills the inventor's living room! Another testament to the inventiveness of computer enthusiasts....

Continuing this history thread, my wife and I are binge-watching a FX series called “The Americans”. In the final episode of season 2, FBI Agent Stan Beeman gets an Air Force official to show him where a program called “Echo” is run. The Air Force person gets a 5.25 in floppy disk from a safe, then inserts it into what looks like the floppy disk drive in a PC XT or PC AT machine. The camera cuts to a closeup of the monitor presumably either running or displaying source code. It is hard to tell what the text is, but to me it doesn't seem like source code (I would guess it would be in FORTRAN, but perhaps it was ALGOL...). In the scene, Agent Beeman is suppposedly videotaping the source code scrolling on the screen, but in the end, he does not give it to the Russians – whew! There are also plenty of big tape drives as well in the scenes in this episode. I think it is funny that the program does not run on a mainframe, but a PC. There weren't that many PCs in the early 80s (the timeframe for this series). Oh well....

In my last post, I derided the creators of AsteroidOS, saying that the world did not need another smartwatch operating system. However, I saw a story on Quartz that caught my eye – someone has created a Github archive of the software for the Apollo Guidance Computer (AGC). Now, you may ask, why do this project as opposed to AsteroidOS? Well, I think there is some historical significance here. I attended a presentation by Richard Battin, one of the engineers who worked on the design of this computer and its software. The constraints that this computer placed on the software were severe – limited memory, all programming in assembly language. I think that the group of engineers and scientists were trailblazers in the field of software development.

References:

Quartz - Article that caught my eye

Ibiblio - Home page for AGC software and info

Github - AGC source code

YouTube - Video on how the AGC was developed and built

ComputerWeekly - More details on specifics of the AGC

"Computer" - Wikpedia on a former NASA employee whose job it was to do calculations (job title was "Computer")

I noticed an article recently about AsteroidOS, an open source operating system for smartwatches (I guess this means Android smartwatches). My first reaction was - do we need this? A short search shows that there is already an existing development evnironment - Android Wear. Was there a market need desire for another way to create smartwatch apps? I don't know, but it seems unlikely to me. This probably won't get to the point of Javascript framework fatigue, but sometimes I think developer time would be better spent in other areas. My two cents on this one.....

I am working on how to copy my 1999.io blog files to my main hosting account from the server that runs the nodeStorage software. These are quick notes, if anyone has questions, leave a reply.

Logged into the server on which I am running 1999.io

Entered the following command:

ssh-keygen -t rsa

The following response appears:

Generating public/private rsa key pair

Enter file in which to save the key (/root/.ssh/id_rsa):

Press enter to save the key file as id_rsa

The following response appears:

Enter passphrase (empty for no passphrase):

Press the Enter key (indicating no passphrase), the following response appears:

Enter same passphrase again:

Press the Enter key again (indicating no passphrase), the following response appears:

Your identification has been saved in /root/.ssh/id_rsa

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

(some text string)

The key's randomart image is:

(some lines of text)

The path shown is for my server, the path on your server may be different.

Next, I copied this file to the .ssh folder on my destination server. I used the scp command, but you could use a FTP program or some other application to transfer the file. After transferring the file, I logged into the server and navigated to the location where I transferred the file id_rsa.pub. I then entered the following commands:

$ cat id_rsa.pub >> /path/to/.ssh/authorized_keys

$ chmod 700 /path/to/.ssh/authorized_keys

In these command /path/to/ is the path to the .ssh folder on your server. You can get this by typing cd .ssh and then entering the command pwd to get the full path to the folder.

After entering these commands, you can then create a script to use scp to copy your 1999.io files to the other server, like this one.

#!/bin/bash

scp -r /path/to/nodestorage/publicFiles/users/YourUserName/* login@yourhost.com:/path/to/your/directory

The above statement is all on one line.

After creating this script on your server, enter the following command:

chmod +x filename

where filename is the name of the script file

You can then set up a cronjob as follows:

Enter the command “cronjob -e”. An editing program will start (vi or nano or whatever you might have configured).

Enter the following command to copy files every 5 minutes:

*/5 * * * * /path/to/script

where /path/to/script is the full path to your script and including the script name at the end. An example could be:

*/5 * * * * /bill/scripts/mycopyscript

You can check the file /var/log/syslog to see if your cron job is running correctly (can view the end of the file by typing “tail /var/log/syslog” at the prompt)

References:

https://blogs.oracle.com/jkini/entry/how_to_scp_scp_and – general method outlined in this blog post

http://www.thegeekstuff.com/2011/07/cron-every-5-minutes/ - item 1 in this post is the cron command for executing a script every five minutes

http://askubuntu.com/questions/229589/how-to-make-a-file-e-g-a-sh-script-executable-so-it-can-be-ran-from-termina – how to make a script executable

I have created a page on my main site for 1999.io resources (http://andysylvester.com/1999-io-resources/). I have added a draft user guide, and also included a link to Ron Chester's 1999.io resources page. I am planning to review this guide over the weekend and make some updates.

I would be interested in feedback on a more traditional guide (like a book or document). This guide is mostly a collection of links to posts on the 1999.io support blog. However, I can see the value of presenting the information in a more organized/integrated fashion (like a book).

Earlier this week, I published a Kindle book on setting up an Ubuntu server (How to Set Up An Ubuntu Server on Amazon Web Services). I put this together after working with John Philpin to help him start migrating his 1999 blog to his own server. We did not finish, but I saw an opportunity to get this setup information to a wider audience. I also included information on setting up the River5 RSS aggregator on the server. I thought briefly about including the 1999.io setup info, but the setup notes in the main Github repo are pretty complete. The big area that is not documented well on the 1999 support blog is setting up a server, so I focused on that topic. Hopefully this will be a help to others in getting started in hosting their own 1999.io servers.


When I start to create some software, I usually do not start from scratch/nothing. I start with modifying a project I have already created, or use some example code from another project online, or use a template generator to create a starter project. Even with using all of those things, eventually I get to the point of creating something new. When I get to that point, I am creating code line by line. I may be using API calls for functionality, but I am creating software from the ground up. As a contrast, when construction workers build a house, they are using standard parts (screws, nails, pipes, connectors, fixtures, wiring, switches, etc.) to assemble the house. There is some amount of rework of the parts (cutting and trimming of wood), but most of the work is assembly. The workers are not creating nails and screws and connectors from scratch. They make use of the division of labor to create the supplies needed to build the house.

Could there be a way to use parts analogous to building construction to build software? Dr. Brad Cox created the concept of “Software-ICs” in the mid-80s to describe software components that could be used to build more complex software. There are examples of software tools today that are used to create software applications (Simulink, AppInventor, and Scratch). Both Windows (Visual Basic) and Mac (Interface Builder) development tools include applications to build user interfaces. There are a number of mobile app development platforms that support the building of simple apps using a point-and-click interface (IbuildApp, EachScape, and App Press). For the great majority of applications, though, there is a person or group of people who are pounding away at keyboards, creating source code line by line, cooking from scratch. There must be a better way of doing this!

To me, software is probably more similar to writing than any other activity. When someone writes something, they create it out of “nothing” - it springs from their thoughts, it is totally malleable, can be changed and re-arranged, it is hard to say when you are done – boy, that sounds like software development! However, there are ways of defining how to write something (make an outline, come up with a topic, create a first/second/third draft, etc.), so there must be ways to define how to create software (say what you want the software to do, write down a list of functions needed, create a user interface). And of course there are a host of methodologies for how to develop software, so there is plenty of guidance out there to guide people on how to create software. So, developing software and writing seem to be more alike than different. Both are primarily mental activities, unconstrained by natural resources, flexible, and can be made to satisfy many customers/audiences.

In a previous essay, I compared creating software to cooking, and tried to illustrate how there are many similarities between the two activities. Could there be other experiences that are the same? Let's look at woodworking next.

Some people get exposed to woodworking in school (shop class). Others might do a “kid project” at Home Depot, still others may have a home improvement project that requires some woodworking (build some garden boxes, or fix something around the house). In a way similar to cooking, someone who is just starting in the woodworking game might start by picking a simple project to work on, look for plans, look at some videos, then get the tools and materials they need, and give it a try. This is how I went about my first home project of building a child's sandbox (well, maybe I didn't watch a video about that...), then moved on to garden boxes, then moved on to more complex home repair requiring woodworking skills. Now, does this sound a lot like the cooking example I gave in my last post? I think it does. Once again, people start from a position of limited to no knowledge, pick a simple thing to try, do that thing, and learn while they are doing. The process of starting to develop software seems pretty similar to me.

This is a test post for the WebSocket demo. I was able to see the text of this post in the demo app at http://1999bloggers.andysylvester.com/websockettest/websocketdemo.html.  I am experimenting with this to see how I can get some annunciation when someone comments on a post. What I see when there is a comment, there is a "subs" element within the text displayed.

When people think of who they are, many times they identify with their job but there are other ways to identify yourself. I think of myself as a musician. This morning I was singing in church, and it felt good to sing, and hear other people together singing with me. I used to sing with a church choir, but have stopped doing that for a while. In my lifetime, I have been a vocalist, instrumentalist, and lyricist. Music has enriched my life. With the recent passing of Prince and David Bowie, people are remembering their experiences with those artists. Music is an important part of many people's lives, whether it be in listening to music or making music. I choose to be a maker of music in addition to being a listener.

This is a test post to see if I can upload a podcast.

Several 1999ers have made comments about having their own river, so I would like to provide some pointers/advice on how to get started. In the same vein as “own your data” or “supporting the open web”, it's important for users to be able to set up their own tools for collecting/reading information on the Web, and not be dependent on other people's tools. Having said that, I have been happy to provide a river resource for the 1999er community (http://1999bloggers.andysylvester.com/). This post will help you to do the same for any blogs/feeds that you are interested in following.

There are two pieces to the river resource given above:

1. A installation of the River5 RSS aggregator running on a server

2. An HTML page that displays a river or rivers created by River5

At the River5 Github site (https://github.com/scripting/river5), there are several tutorials in the site wiki on installing River5:

Once you have River5 set up on a public server and creating river files (Javascript files that can be read/displayed by other applications (for example, 1999bloggers.js)), you have some options for being able to display those files. When River5 is running, you can direct people to the public display of the rivers being created. An example can be seen at http://node2.andysylvester.com:1337/, which is my main River5 installation. This install is creating multiple rivers, which are displayed in multiple tabs. If you only had one river, you would see only one tab.

Another option for making your river public without pointing to the River5 app display is to use a separate HTML page that accesses the river files. Dave Winer has created a toolkit for display of River5 river files (https://github.com/scripting/riverBrowser). I am actually using a later version (https://gist.github.com/scripting/be89904f454086103eb5) as the basis for my 1999er river site. To set up your own public display of a River5 river, copy the text in this Github Gist and save it to your computer. Next, edit the file near the end to point to the URL of the river being served by your River5 installation. Here is an example:

httpGetRiver ("http://node2.andysylvester.com:1337/getoneriver?fname=1999bloggers.opml");

Replace the text in quotes in the call to httpGetRiver with the URL for your River5 server, and replace the text following “fname=” with the name of your river file followed by “.opml”. On my server, the river file generated is 1999bloggers.js, so the name above is “1999bloggers.opml”. Finally, upload the HTML file to a server. As long as the River5 server is running, your HTML page will display the latest version of the river. An example is available at http://1999bloggers.andysylvester.com/riverTest/riverTest.html.

OK – now get started making rivers!

Let's talk about cooking first. Someone wants to try something new, so they go look for a recipe, maybe consult several cookbooks, maybe do some online searching. Once a recipe is selected, the ingredients are found or purchased, the equipment is gathered, and the cooking gets started. If this is the first time for this recipe, there might be some mistakes, but hopefully the result will be okay. If the cook likes it, they may try to make it again.

Now let's shift to creating software. Someone wants to make something new, so they go looking for example code, maybe look at several websites. Once the survey of existing examples or tutorials is complete, the developer starts putting code together and creating an application. If this is new for the developer, there might be mistakes, but hopefully the app will do what the developer wants. If the users like it, more features might be added.

Cooking and creating software have a number of similarities. A recipe ingredient list could be thought of as a list of requirements for software (what does the software do?). The recipe is the instructions for how to assemle the ingredients. This could be equivalent to build instructions, or how to use a tool or library.

Some people might say “Well, anyone can cook, but not anyone can create software.”. I would disagree with that statement. When someone starts learning to cook, they start with simple recipes, and usually have some help from someone who has cooked before (mentoring? pair programming?). Similarly, someone who starts creating software starts with small programs, then moves up to bigger and more complex programs.

I think that people could be afraid of trying to create software (I can't do it, it's too hard, I don't know how, insert other reasons/excuses here...). I think the same excuses could be used for cooking – what do you think?

When I tell people that I do software development, I usually get responses like “Wow, you must be smart!” or other expressions of admiration. To me, the general impression of most people is that creating software is hard. Having been involved in the creation of software for over 30 years, I would agree that creating software can be difficult, and ….well, I guess it is difficult. So, let's talk about it....

What is software? Here's one possible answer – it's a set of instructions telling a computer what to do. There are different levels of software (operating system/server/desktop app/mobile app/web app), but there are some common questions you can ask about any software:

1. What does the software do?

2. What does the user interface look like and how does it work?

3. What does the software interact with?

The answers to those questions define the functionality of the software. Coming up with those answers can be hard. It can be hard to be specific about what a particular software app should do, to describe the user interface, and the interactions between the software and other services. It can also be hard to learn the tools and languages you need to translate those answers into the instructions needed to create the app. However, I think there are some parallels between developing software and several other activities that might show that developing software is something that more people can do. I'll explore those in my next few essays. 

John Philbin did a great thing - he started collecting a list of 1999 bloggers.  This is good - the more people keeping lists, the better! I hope more people respond to his post to the 1999-user mailing list.

I also started a list of 1999 bloggers from the beginning. I have a river at http://1999bloggers.andysylvester.com/ and the list is at http://1999bloggers.andysylvester.com/1999bloggers.txt. Contact me at @AndySylvester99 if you want to be added to the river!


I am working on a new project, and got to the point where I was ready to start doing some version control. I am using the Github app on my Windows laptop, and thought I would try to use that to set up my new repo, but it seemed like it was not giving me a chance to add the new files to the repo, it would only create a repo. I then tried to create a Git repo from the command line, and spent a while trying to find the right commands to add all the files in the folder (I will give the command list in a minute). My final problem was that when I did the commit, I got an error saying:

error: pathspec commit'' did not match any file(s) known to git.

After some more searching, I found that on Windows, the commit string has to use double-quotes. Arrrgh! Why does the Git book not mention this? In addition, the Git book did not give me a list of the commands I was looking for. I remember it used to have such a list. Sigh...

After I created the repo, I was then able to add the repo to my Github app by navigating to the .git folder within the repo folder. Whew! Now I can get on with my work!

For future reference, here is the list of commands I used to create a repo from a folder with files and folders already present:

cd project_folder

git init

git add *

git commit -m “Initial commit”

I think of community-building as having a conversation or conversations with people. Facebook is really good at this, but the open web is not (in my opinion). Maybe one of the first steps is trying to start a conversation with someone else using some method, and seeing where it takes you.


I am interested in finding out if any user of 1999.io is posting using a phone. I am using Chrome for Android on my Galaxy S5, and the first line of the editor window is clipped off. Is anyone else posting from a phone and seeing this problem?