Formats

I’ve been hitting this wall a lot recently. Just think about writing a document… Let’s start with a simple document — I just need section headers and simple wrapped paragraphs of text. No images, no tables, nothing complicated. I can do this in any simple text editor (Notepad, TextMate, SciTE, whatever). This works great at first. I can keep some notes in this format easily enough. It’s easy to use — nothing special to fiddle with.

Then something changes and I need some “special” formatting. Maybe some graphics, tables, more focus on things like margins, etc. We have a million options now. Convert it to Word? To Pages? (that’s Apple’s word processor for those unfamiliar) How about simply converting to HTML? I despise Word documents (especially because of the oddities associated with their formatting). Pages is nicer in a way (it doesn’t get in your way while you’re writing documents) but has many of the same problems. HTML is too loosely defined to display the same universally (on Firefox it will look great but something will inevitably go wrong on Safari/IE).

In the last couple years, I’ve started to use simple, consistent markup languages like WikiText, reStructuredText, etc. These have mostly been implemented on Wiki sites (like MediaWiki) but in theory, you could write a local application that used the same notation. These intermediate markup languages provide things like header formatting, table layouts, graphic alignment, etc. but don’t tend to focus on the “page” related details like margins, headers/footers on printed output, and other details. They translate the result into a fairly rigorously tested standards-oriented HTML. This works fine for anything I don’t intend to print into a glossy handout. Notes to myself, development and design comments, and many other daily working documents work well here.

Stack of Paper by cohdraBut then, after several weeks of tweaking a design doc, the PHB decides that he wants to see a copy of my design. He wants it printed. Printing the wiki-based version and handing it to him results in the comment “this isn’t using standard headers/footers on each page is it?” So now I’m stuck. I paste the output into Word and spend far too long formatting it for his consumption. He marks up the Word copy and I had to merge my changes back into the wiki.

What a pain.

At work, I’m mostly stuck with Microsoft tools so I tend to use Word if I have to use anything complex. However, elsewhere I typically take an additional step: converting my Word/Pages output to Adobe PDF. It’s sort of the universal printable format and it works for most things.

Wiki’s have definitely answered my need for most documents. The only link that’s missing is how to enable Wiki’s and other screen-displayed documents to be able to be easily converted to printable documents (with  header/footers, page numbers, etc.). Ideally, there could be some meta-tags that did this sort of thing. The problem currently is that while a slightly varied HTML rendering is acceptable when viewing on a screen, the printable layout MUST conform to a strict standard. Maybe someone will (or already has) put together a plugin or something that will let this happen easily. I eagerly await the day…

Update: I will mention here that under the leading of a certain Coder, I was able to help build at least a partial tool that did this exact thing for my last position. It parsed MediaWiki content and converted to Word format. This was nice but it was a little limited. I’d like to see a more generic solution in place — especially one that would allow output from the browser without having to have Word at all.

, ,

1 Comment

Git

git-logo_3I’m really excited about Git — a newish revision control system. I’ve seen it growing in popularity over the last few years but hadn’t used it until just recently.

Unlike Subversion which I’ve really enjoyed using, it’s decentralized, meaning that each “local” copy is in fact a full repository with all changes. There are quite a few advantages with regards to merging and branching and some of the concepts seem to have been well-thought-out rather than simply inherited from earlier revision control system designs. It’s written my Linus Torvalds — Mr. Linux himself. There are still some issues with it and the biggest issue is that it’s simply not as well supported yet with regards to tools. I hope that soon we’ll see better support on Windows (a necessary evil) and some slicker/easier Gui front-ends.

For now, I’m considering moving over to this for personal use and maybe sneaking it in at work. If you haven’t used it yet, I encourage you to check it out. Here‘s a transcript of a talk from Linus talking about Git, Subversion, and revision control systems in general and here‘s the Wikipedia page on Git. I think that it very much depends on your situation whether a decentralized or centralized repository is the way to go, but I think that often, Git will be a good solution.

Update: Here’s a video of the talk.

, , ,

1 Comment

Reading

Having been encouraged by others and having wanted to do so for a while, I’m going to attempt a little more intensive reading list than usual. We’ll see how far it gets. I’ve been getting bogged down in technical books that relate or very tangentially relate to work. It’s a lot of fun, but it’s been difficult to read much else. I’m going to largely put that on hold (unless of course I can read at work when I’m on the clock) and instead focus on a rather largish stack of books that I have currently here at home. This includes:

The Baptism of Disciples Alone by Fred Malone (obviously a book that advocates the traditional Baptist view. I’ve read about half of this, loaned it to a friend, and never finished it. I liked the reasoning and Biblical support that I’d read so far).books_in_library

The World is Flat 3.0 by Thomas L. Friedman (just curious…)

The Art of Deception by Kevin D. Mitnick (never finished — essentially a guide to social engineering. Computer Security is something I deal with in my professional life quite a bit but this book is focused on, as it puts it, “Controlling the human element of security”. Should be a neat read)

The Discarded Image: An Introduction to Medieval and Renaissance Literature by C. S. Lewis (had this lying around for a while — a little off-topic from my normal reading interest so it’ll probably be kind of interesting)

Confessions by St. Augustine (have started and read many excerpts — and listened to most of it on audio-book — but have never completed it)

The  Revolution: A Manifesto by Ron Paul (never finished it!)

Pierced by the Word by John Piper (received as a gift — looks like a good devotional read. I don’t like everything by Piper but he challenges you and that’s always good)

Banvard’s Folly: Thirteen Tales of People Who Didn’t Change the World by Paul Collins (Received I believe for my birthday last year and never completed — it’s a blast — history of people who were almost famous)

Precious Remedies Against Satan’s Devices by Thomas Brooks (I think I read this in high school but I figured I’d have another go at it)

The Satanic Verses by Salman Rushdie (never finished)

Blue Like Jazz by Donald Miller (recommended by a friend, not recommended by another friend. We’ll see on this one…)

The Kingdom of the Cults by Walter Martin (skimmed various sections by I really should just read the whole thing and be done with it)

The Prodigal God by Timothy Keller (Just started on this after stealing–I mean borrowing–from my mother-in-law. I’ll return it soon!)

Uncle John’s Biggest Ever Bathroom Reader (ok fine — I probably won’t ever finish this book. But depending on the amount of fiber in my diet this year, I may be able to make a dent in this hefty tome)

Update: Added a few new entries — I’ll probably just update this post as I add to my list so this likely will change over time…

, , ,

4 Comments

Good Thoughts for this New Year

“People do not drift toward holiness. Apart from grace-driven effort people do not gravitate toward godliness, prayer, obedience to Scripture, faith or delight in the Lord. We drift toward compromise and call it tolerance; toward disobedience and call it freedom; toward superstition and call it faith. We cherish the non-discipline of lost self-control and call it relaxation; we slouch toward prayerlessness and delude ourselves into thinking we have escaped legalism; we slide toward godlessness and convince ourselves we have been liberated.”

D. A. Carson, For the Love of God, Volume Two (Wheaton, Ill.: Crossway, 1999), 23.

(thanks to Nate Hoeldtke for forwarding this via email)

,

4 Comments

Pricing?

I was annoyed by a recent post to Slashdot. It references an article that makes the claim that the iTunes App Store (which sells applications for the iPhone and iPod touch) is hurting developers because of the pricing model that’s allowed. Basically, the pricing model is open. Applications must be approved before Apple will list them but you can price them between $.99 and $999.99 (or they can be free). Developer’s are apparently whining that with the availability of cheap (usually $.99 applications) it’s hard to support serious development.

Stack of Money by Dani SimmondsThe request is that Apple “do something” to fix this.

This is bizarre. The claim is that because so many free or cheap applications have flooded the market, no one can compete. The analysis looks at cost to bring an iPhone application to market and the expected sales depending on its price.

Maybe the problem is simply that iPhone users aren’t willing to drop as much money as developers would like. Maybe the current glut of free and cheap apps is a poor anticipation of actual demand by the developers. Some developers made free apps, sold the idea and hooked users and then migrated to $1 or $5 applications. These developers are making SOME money. Maybe not a lot, and maybe the iTunes App Store will never be a lucrative business for developers (although Apple seems to be doing quite well).

The success that small programming outfits have had is that they can leverage a nice API to work with that users can use in novel ways. At $1, many users are willing to buy without recognizing a brand name or being suspicious of a poorly made product. For independent software developers, this is probably enough to pay the bills. For larger products, the source of income is likely to be in the form of some integrated service (free iPhone application that interfaces with a $40 desktop application).

I don’t see the dilemma. Isn’t this what the free market is all about? If customers aren’t willing to pay $20 for most applications for the iPhone, maybe developers shouldn’t make them. On the other hand, if developers really can make a much more complex product with almost universal appeal, then even pricing it at $1 or $5, it will almost surely pay for the higher development costs. This is the way the world works.

, ,

4 Comments

George Orwell on Writing

Not that I follow these rules, but I’ve had this excerpt kicking around for a while in my notes and figured I’d post it somewhere I could reflect on it:

  • Never use a metaphor, simile, or other figure of speech which you are used to seeing in print.
  • Never us a long word where a short one will do.
  • If it is possible to cut a word out, always cut it out.
  • Never use the passive where you can use the active.
  • Never use a foreign phrase, a scientific word, or a jargon word if you can think of an everyday English equivalent.
  • Break any of these rules sooner than say anything outright barbarous.

“These rules sound elementary, and so they are, but they demand a deep change of attitude in anyone who has grown used to writing in the style now fashionable. One could keep all of them and still write bad English, but one could not write the kind of stuff that I quoted in those five specimens at the beginning of this article”*

From George Orwell, “Politics and the English Language”, 1946.

*To see the full context of what he was talking about, you can take a look at the entire essay here.

, ,

1 Comment

How I feel at work these days…

I’ve had a heck of a time staying productive this week. I don’t think that it’s been helping that I’ve been trying to do a lot things on the side. But something about this week felt different. I have clearly defined tasks but I’ve been procrastinating an awful lot more than usual. I tend to have 25 things to do and continually shuffle the top 5 things. I finish them and instead of hitting things farther down the list I substitute the most interesting next 5 things that I can do. So a backlog is typical. My problem is that recently I’ve been feeling guilty about tasks way down in the 20’s and spend a lot of my “free” time trying to focus on that.  So instead of knocking out high-priority tasks, I’ve been ineffectively working on low-priority things.

I tend to mix my personal goals, chores, continuing education, and regular  work all into the same priority pile. I find it hard to segment it any other way. Unfortunately that means that at the office sometimes I’ll blow time on things that aren’t work related meaning that now I have to work evenings, stay late, take vacation, etc. This would ideal if I was working as a consultant and could make my own hours. I’ve never felt like I needed a boss to motivate me and enjoyed the shorter-term goals of contract work and the variety of experience that they innevitably demand.

Here’s a list of things that I’d like out of work:

  1. I’d really like to be able to work with companies and individuals that need services that I can offer.
  2. I’d like to be able to excel in providing these services to the point that my value is clearly seen.
  3. I’d like my work to offer me the opportunity to be creative — not simply implementing known entities.
  4. I’d like to be location-agnostic for much of my work (i.e. telecommuting should be an option for 90% of the time).
  5. I’d like the project sizes to be such that I can cycle to new projects or new clients every 6 months.

As a software engineer, I feel much more like a [traditional brick-and-mortar] architect than a manufacturer or general contractor. What I do should be bigger than simply implementing a known solution — it should be validating, improving, and refining a requirement and then implementing an innovative solution that may be somewhat unexpected. I know that’s a lot of buzz-words, but it seems accurate. I don’t want to help people install Microsoft Word on their computers, I want to help them think about the problems of word processing, document management, collaborative editing, world-wide publishing, and the myriad of associated goals and put whatever solution in place that makes sense for them (hopefully it’s not Microsoft Word).

Anyway, enough angst-filled longing for today.

…Back to the ever-fun-and-exciting C++ experience…

, , ,

2 Comments

Cell Phones

Well my new position has been keeping me busy writing software for Symbian, Nokia’s primary phone operating system. I hate it. It’s fun to learn new stuff and it’s probably a good thing to be learning. But it’s still awful. Documentation is terrible. Developer forums have lousy support. Two unique programming elements: descriptors and the cleanup stack just make life agonizing.

I’ve never appreciated C# so much.

On the bright side, it’s drawn me back into C/C++ coding which I haven’t done in years. That part is fun. It’s funny how many things I take for granted with C#. I’ve even gotten lazier considering some of the wonderful upgrades to C#  3.0. For example:

List<string> list = new List<string> { "Susie", "Lucy", "Bobbie" };

This makes sense to me. It’s easy and straightforward. It saves [development] time.

At work things have been interesting because I’ve been working with developers firmly set in an embedded mindset. They think in terms of saving bytes. My .NET programs take up 20MB of RAM just in basically displaying a simple window with a few controls. It bugs them.

I don’t know — I see the point of using assembly, C, even the horrible descriptors of Symbian for situations where you are highly concerned with efficiency. However, it does seem that you’re going to be forced to spend more development time (by a huge amount) and the code will almost by necessity be much more difficult to maintain. When there’s no clear single way to convert a descriptor to a char * every developer will do it differently and the code will be more and more complex and incomprehensible. It might run fast, but it’s not flexible.

In the world of mobile development, optimization for speed seems important but if you take 6 months to update your application when new feature sets become available, your product likely isn’t selling.

Along these lines of thought, I’m considering pouring a bit of time into iPhone development. I’ve always shuddered at Objective C but I need to bite the bullet and get into it. My assumption is that I’ll be happy with it since from what I’ve heard it balances maintainable,  understandable and easy-to-write code with reasonable performance/stability.

I’ll keep you posted.

, , , ,

2 Comments

Coding Well

I don’t usually do this, but here’s a verbatim excerpt from a post on LifeDev that I just love. Having goals in the pursuit of software engineering and design is a good thing. I’ve heard most of these expressed before but not as well as this. (original post by glen on July 23rd, 2008)

Programmers are a great example of thinking outside the box because, well… programmers can actually create the box. Here are some of the ways that we can learn from programmers on how to boost our creativity.

1. Learn a new language

Programmers are constantly learning new languages, either for fun or necessity. Don’t limit yourself to what just what you know and are comfortable with. Branch out and learn a new skill.

2. Start from the ground up

If you’re going to write software, you can’t just start halfway through the project. You have to start at square one. Sometimes this is the best way to find a creative solution for a problem is to go back to the beginning and work forward.

3. Question everything

Questioning everything means taking every assumption and making sure it’s correct. All programming starts with making the most basic assumptions, and then building on those basic assumptions. If something is wrong with the code at the base, then the software isn’t going to work well at all.

Sometimes creativity is limited by assumptions. New solutions arrive when we tear down assumptions and start with fresh perspectives.

4. Do it for fun

If you know any programmers, they’re constantly building something. Even when they’re done for the day on work-related projects, they’ll spend hours of time working on fun projects for themselves. Their work is also their hobby.

Continually mulling over new ideas and solutions is something that shouldn’t be a chore. It should be something that you find yourself doing constantly, like a reflex. And it should excite you.

5. Never stop testing ideas

Programmers are constantly benchmarking code to make sure that it’s as efficient as possible. Even the smallest change can bring a program or Web site to it’s knees, so constant testing and improvement is important to any bit of software.

Ideas should be tested rigorously and refined on a consistent basis. Your ideas will change over time, it just depends how much. Constantly evaluating them and just plain thinking them through is a great way to “benchmark” your idea.

6. Find a passion

If you’ve ever spent more than two minutes talking with a programmer about his work, you’ll find out very quickly that programmers have a passion for what they do. They eat, sleep and breathe programming.

Do you have a passion for your ideas and projects?

7. Master your tools

Programmers constantly improve their knowledge and usage of their tools. A great coder keeps tabs on software and is constantly finding ways to improve his usage of them. You’ll seldom find a programmer who doesn’t tweak his toolbox regularly.

No matter what your skill set, you’re limited to your skill with the tools you use to create. The more of an expert you are with your tools, the more you’ll be able to create.

8. Start making abstract associations

The people behind projects like Skype, Google Docs and Twitter all have one thing in common: They fused seemingly abstract concepts together. Taking what-ifs and testing them is a great way to start thinking of things in a different, more creative light.

9. Think of structure as a tool, not a limitation

People associate creativity with taking a giant, blank canvas and letting our ideas flow without any sort of limiting structures. However, there’s a huge problem with this type of thinking: It’s a great big creativity myth.

See, limitations are everywhere. We can’t avoid them, we can only hope to work with them. A programmer embraces the limitations of his programming language or tools and works around them. These limitations help him as they make a foundation to work from. Sometimes discovering a new workaround will lead to an even bigger idea. Necessity is the mother of invention.

10. Don’t rule anything out until you try it.

Your kindergarten teacher was right: There is no such thing as a stupid question. If you’re adhering to #3 and dismissing all assumptions, you can’t be certain it’s not going to work until you’ve tested it. How do you know it won’t work unless you try it? You might be surprised. Even if the proposed solution doesn’t work, it may help you find a solution.

Sometimes it’s just best to start with a prototype and try it out. If your prototype doesn’t work, then trash it. If it does, you’ll have stumbled upon something that just might work.

11. Always look for a simpler and more elegant solution.

A good programmer is one that understands that finding the simplest solution is always going to be better. Complicated solutions lead to… complications. A practical approach to programming always works best in the long run.

Our ideas sometimes become too complicated. We get caught up in the novelty of the idea that we ignore how practical it really is. The simplest way to solve a problem is often the best way to solve a problem.

12. Don’t be afraid to build off the code of others.

The beauty of the Internet is that the solution your looking for has probably already been done by someone else. When building a new site I almost always use pre-existing open source code. Why recreate the wheel?

Putting a great idea into motion doesn’t mean you have to start from scratch to create it. Use existing ideas and turn them in to something better. Sometimes a great idea is only modifying something that’s already been done. Gmail is a great example. They “reinvented” email by adding useful features to traditional email.

13. Don’t be afraid to collaborate.

Some of the best coding — or any creative projects for that matter — are done not just by one coder but by many excellent people inspired to work toward the same goal. Assemble a great team, use the most brilliant ideas no matter who they come from, and let everyone contribute.

14. From the very basic, create the beautiful.

Programmers often use some very basic code over and over, and while those small bits of programming language aren’t necessarily beautiful in and of themselves, they can come together to create a final product that is amazing. No matter what creative project you’re working on, pay attention to the details, but most especially pay attention to the effect those details have on the overall picture.

, , ,

No Comments

Christ Church, Victoria, B.C.

We saw this church in Victoria, B.C. and it truly was amazing (and I believe God-centered and glorifying in its design). It’s a pity that churches are often just like business offices or other “ordinary” places. I guess some would disagree but I think that a return to “great” architecture in church buildings is a wonderful thing. The UMC and some other denominations seems to have gone through a period of uglification in their architecture — somehow trying to modernize or reinvent something that wasn’t in need of an update. People in general seem to be less willing to spend the big bucks on churches than on other things like the poor and the needy. I know other issues can’t be ignored, but worshiping God in a place like this seems to really help put things in perspective. Just like the robe, the solemnity of the service, and the order of the liturgy, the architecture seems to be a huge aid in the worship. I’m sure like all things in the Christian life and even those things in worship, it can become an idol but I have a hard time believing it’s wasted money or effort. The Temple was a truly glorious place; a feeble attempt at showing the glory that will be revealed in heaven, but a worthy attempt. As Christians we carry out the creation mandate to bring order out of chaos in the world. A building like this that’s built not to commemorate its long-standing members, nor to enshrine saints, but to stand as a place of worship — a place set apart.

I know it’s far, far away for our small group (and even a large and prosperous church like the above took over 100 years to get where they are), but I look forward to the beginning of such an effort.

Update: Regarding Dave’s comment — I wasn’t very specific about what “like this” I think is good… I think it’s architecture that reflects attributes of God and his nature. So yeah — creative is a good thing but I think that awesome and majestic is important too… Obviously some of these characteristics are a little subjective. I hadn’t really thought of it so much but Dave mentions the re-using and revitalizing of buildings; this seems perfectly to reflect the transformative power of God’s Kingdom. Thanks Dave. 🙂

, ,

2 Comments