A shell scrtipt for changing permissions on files a good way

This is basic for some of you, and greek for others.

Thanks to Chris Miler for the “find” portion.

There are a couple of things I regularly want to do when I upload site files to my staging site.

  1. Change the owner of the file to the FTP user (so I can easily FTP up any changes)
  2. Change the group owner to apache (so Apache can make changes—the actual user the Apache server uses varies, you have to check it)
  3. Change permissions of all files, so user and group can read and write them, and everybody can read them
  4. Change permissions of all directories, so user and group can read, write, and execute them, and everybody can read and exeute them.

There is no super-elegant, simple way to do this with one command. That is why the shell script.

If you are more paranoid or whatever, you want to lock down permissions for the group level too, but …

Now, I save the following file as permissions:

#!/bin/bash
user=$1
if [ $user ]
then
find . -type d -exec chmod 775 {} \;
find . -type f -exec chmod 664 {} \;
chown $user:apache .
chown -R $user:apache *
else
echo "You must provide a user as a parameter."
fi

To use it, you would type:

permissions <username>

.. where username is the username for the owner of the files, as you want it.

To make this really useful, you’ll want to put it in your path. In my account, I edit the ~/.bash_profile file, and add this line:

PATH=$PATH:$HOME/bin

.. and then, make yourself said directory,

$HOME/bin

.. it is a handy place to put scripts you want to run anywhere.

Then, whenever you upload / download new files, you can just type permissions <username>, and it will magically transform all of these files.

Posted in Uncategorized | Leave a comment

For Freelance Camp: Sample Contract & Spec

365.14: SIGNED by the Buyer
Photo credit: WordRidden

I am really hoping to talk about contracts and agreements at Freelance Camp tomorrow, particularly regarding topics about small clients.

As an attachment for that, here is a gener-ified version of my Functional Spec Template.

I could say a lot about it, but it’s very late and I have to get up very early to get there tomorrow. In short, I fill this out, and it helps me immensely.

Then, I add a slightly amended version of this contract by Andy Clarke, and turn the spec into Appendix A of the contract, and it becomes a complete contract / spec / proposal.

[Added: ] Here is my version of Andy Clarke’s contract–basically, just formatted as an RTF file. Follow the instructions–change the blue highlighting once, to change it from my branding to your branding. Keep that copy, and change the yellow highlighting every time you need to create a new copy (thanks to Eric of Cosmic Design Co. for that idea.): Contract blank, formatted

Note: I claim absolutely no knowledge of whether this legally applies in your zone. The main purpose for me–at this point–is to have a document that formalizes the terms of our agreement.

And of course, another part of this, is to never do work of more than a few hours without such an agreement! (That is, unless you enjoy suffering.)

I added the force majeure part “for fun”, when I found it on a website.

Resources

How to Create an Effective Web Design Questionnaire

Let’s Get Real, or Let’s Not Play, by Mahan Khalsa

Posted in Code & Tech, Freelancing, Web Design Biz | Tagged , , , | 1 Comment

Rundown of Web Design things Designers Might Not Think Of

Here’s a simple list of things that a designer should think about when designing a website comp, but my not consider. If you find some way to indicate your choices for these things in the comp, it makes it much easier for the coder (e.g., me) to work with and know exactly what you need.
There are also some great links in this list, to good and inspiring example sites.

Some later time, I would like to expand on all of these.

Please add any questions in the comments, or other things you’d like me to cover on this topic.

  • Links—general. Use underline or no, other indicator such as dotted underline, alternate color underline, background color, etc.
  • Links—hover. Color change, or other change of state, from items above.
  • Links—active (the mouse button is currently down, clicking the link). If desired.
  • Links—visited. Color, behavior, etc., if desired. (An excellent set of ideas using CSS for this is here.)
  • HTML elements. Some of the less common ones are: address, blockquote, abbreviation, acronym, citation, code, deleted text, heading 1, heading 2, heading 3, heading 4, heading 5, heading 6, keyboard text, term / definition pairs, bulleted list, numbered list, tables (table header, normal table cell). Indented lists, 1 level, 2 level.
  • Forms. How do you want forms to look? Here is one good example post.
  • Fade-in/fade-out hover effects. Here is another compendium of wonderful jQuery effects that you could use or know about. Here is a more advanced and varied list of jQuery options and ideas, for navigation, forms, etc. Here is another one.
Posted in Code & Tech, For Designers | Tagged , , | Leave a comment

Anatomy of a WordPress Theme (for Designers)

I would like to make this post so that designers who are not as familiar with designing for blogs can see some of the facets of design that are required to cover all the bases when designing a WordPress theme.

First, here is a the screenshot (small) of the entire example page. Click on it to see it in full view.

I would love to take the time to spell all of these things out in detail, but I don’t have that time now. But if you look at the various elements here, you will see a lot to learn from. Below are a few specific things to point out.

You may not need to design for all of these things for any particular design, but you should know about them. You should also know that WordPress will style a lot of these things in a perhaps-okay way as a default. Therefore, it might be a sensible approach to see how the theme styles them “out of the box,” and then look at how you’d like to change that.

Also–note that some of this stuff is pertinent to blogs alone, but other parts are pertinent to any WordPress site.

Anatomy of a WordPress Theme

(Click the image to see it full size.)

Widgets

WordPress comes with a series of default widgets. By custom, the most common place to put these is on a right-hand sidebar. WordPress makes it really easy to add and remove widgets, and change their content. This gives your clients a lot of flexibility in terms of how they manage their site over time.

This is true even if it’s not a blog-based site. And note that you can actually have as many “sidebars” as you like. A sidebar is really just a container–anywhere on the site–for widgets. You could put one on the top, in a footer, etc.

Tags display in a “tag cloud” format, where the more posts that have a tag, the larger the tag appears:

Sub-Navigation

If you plan to have the option for the client to have second- and third-level navigation, plan for how this will look and act. Even if you don’t have the  need for it now, if you plan for it, it will drop in nicely when it is needed.

Heading Levels

If you look at the enlarged screen shot, you’ll see a lot about heading levels there.  Heading levels in HTML go down to level 6. By convention, the title of a page or post will be H2 (heading level 2), so the sub-headings would start at H3. Therefore, it would not be unreasonable to plan for at least an H4.

Unusual Elements

There are a number of unusual elements in HTML that it would be good to at least know about, that are illustrated in the example. These include:

  • <cite> for citations
  • <abbr> for abbreviations
  • <address> for addresses

Block Quotes

The example does not include these, but it’s good to think about them. Here’s an example:

Block Quotes

Post Title and Meta Info

By convention, blog post titles will have some “meta” information below them, such as the post author (not always necessary if it’s just one person), and the post time. Usually this same information would not show up on a page.

Post Footer

Below each post, you’ll conventionally find information about it–such as the categories it is in, any tags applied to it, etc.

Note that on the default blog page (which lists a bunch of posts all at once), or on one of the archive pages (that also list a bunch of posts all at once), these things would repeat–once for each post.

Next & Previous Links

WordPress is intelligent enough to provide links–if you like–for the next and previous posts in a series.

Comments

There’s a lot that could be said about comments. But here, just note the following things:

  • You can have threaded comments (where you have a sort of sub-conversation, with indented comments. See the example below.
  • Some designs provide for an alternating even/odd coloring (as in the example), which looks nice.

Comment Form

Here’s the default comment form:

Hope this helps. Please add comments below if you have any questions.

I would like to create another post that talks about elements to consider in a general HTML design sense–elements such as forms, links in their various states, and so on.

Posted in Code & Tech, For Designers | Tagged , , , | Leave a comment

My IE testing setup in a nutshell (for WordPress)

Here is my setup for handling irregularities in IE, when developing WordPress themes.

<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css" />
<!--[if IE]>
	<link rel="stylesheet" href="<?php bloginfo('stylesheet_directory'); ?>/css/tripoli.simple.ie.css") />
<![endif]-->

 <!--[if lte IE 6]>
      <link rel="stylesheet" href="<?php bloginfo('stylesheet_directory'); ?>/css/ie6.css" type="text/css" media="screen">
 <![endif]-->

 <!--[if IE 7]>
      <link rel="stylesheet" href="<?php bloginfo('stylesheet_directory'); ?>/css/ie7.css" type="text/css" media="screen">
 <![endif]-->

 <!--[if gte IE 8]>
      <link rel="stylesheet" href="<?php bloginfo('stylesheet_directory'); ?>/css/ie8.css" type="text/css" media="screen">
 <![endif]-->

I just included the first line (the standard style.css call) to indicate that you should include this other stuff after that, because it’s going to override it in particular cases. That is the key.

The second line is just if you’re using the Tripoli reset framework.
My thinking with the rest is:

  • ie6.css will only apply if you’re using IE6 or below. This isolates off IE6, which tends to have its own weird behavior, and I prefer to have it off on its own “island”.
  • ie7.css will only apply if you’re using IE7. This allows me to pinpont any behavior in IE7, handle it, and have done with it. Although some of this might cascade upward to behavior in IE8, so I might have to copy and paste some code from here into IE8, I’d rather isolate IE7 as well, so I know that fixes I make there, only show up there.
  • ie8.css will apply for IE8 or above. When IE9 comes out (and IE10, etc.), this does mean that these rules will affect them too. The alternative would be for it to only work for IE8, but then if there were any inconsistencies in IE9 that were still there from IE8, the sites would all of a sudden not have the benefit of this code.

My process is:

  1. Test in IE6, using Parrallels on a Mac, and an install of Windows XP that came with IE6. Command-Tab between this and TextMate to make fixes.
    • When I see a discrepancy, I isolate the appropriate div, class, id, etc.
    • Then, I find that selector in the main style.css.
    • Copy that selector from style.css, all instructions included.
    • Paste it into ie6.css. This way, I have a visual of exactly what the default instructions are for this selector.
    • Now, remove the instructions I don’t need, and change the ones I do. For example, let’s say there’s a problem with too much margin on the right-hand side, and the instruction is “margin-right: 12px;”. So, I’ll try changing that to “margin-right: 6px;”. Then, Command-Tab back to Parallels, hit Refresh, and see if that works. And so on.
    • The great thing about this process is that once it looks good here, I can be pretty confident that it really and truly will work, because the changes are isolated to only show up in IE6.
  2. Test in IE7, and make changes in ie7.css, using the process above.
  3. Test in IE8, and make changes in ie8.css, using the process above.

Actually, I will also use CrosssBrowserTesting.com, to get an initial read on the compatibility issues, because it is so fast. (Not to mention, I want to do at least one “test in all browsers” type scan, just for fun, although I have almost never found a non-IE-based issue.)

I am sure I could do a video of this, and that would be more instructive.

Posted in Code & Tech | Tagged , , , | Leave a comment

Who Makes Up for Ambiguity in Client Agreements?

Referee Dog
Photo credit: CowCopTim

When your idea of what the agreement was, and your client’s idea of what the agreement was, differ, how does that get resolved?

[Disclaimier: This scenario is a montage of experiences, and does not represent any one client.]

An unsophisticated client generally sees their website project in vague, feeling terms–something that will make them feel good, look good, be magical, etc. On the other hand, my central job as an executor of the tasks required, as that of technician–I have to translate their wishes successfully into a series of tasks that are executed well, so I have to break it down into a series of left-brained tasks.

And let’s just say I didn’t do a great job of spelling all this out at the start of the project (shame on me, etc.). Let’s say I said, “Sure, I’ll install this shopping cart for you, and then you can sell your products on there.” (Ouch! How vague! But of course, the client’s not going to bug me about that–they’re seeing it all as this right-brained, ooeey gooey feeling good thing, and just picturing how great it will all be…)

The client says, “great! I can’t wait, I’m so excited!”

Meanwhile, reality progresses…

my reality in my mind, and their reality in their minds… like a ticking time bomb, us both happily living in our own version of how things are supposed to go.

Then, comes the day when I show them the site, and they go, “that’s great–could you just add these six more products?”

“Oh, I think. I assumed that the twelve products they showed me were what they wanted in the site–but now I recall that they did mention in passing that they might want to have some more products in there.” And, I don’t want to disappoint them, so, I go, “sure–I’ll add those.” While silently sighing inside.

Another week goes by, and I hear back from them, “that’s great–oh, could you please add these six articles? That will be great. It’s really coming together.” I’m thinking, “well, I don’t remember talking about putting in a lot of articles… then again we didn’t not talk about putting in articles, and I do want them to be happy.” So, I say, “sure, I’ll put those in,” while silently sighing inside.

I bid the project at a flat fee, so that the client–a small merchant, with big dreams, but not a big budget–could feel comfortable, could feel safe and secure that they were able to afford quality work at a reasonable price (dot dot dot).

Another few days go by, and I hear from the client again. Just another few little changes, a couple of tiny revisions. No big deal. Meanwhile, my time, with a bid based on 20 hours’ work (trying to get it done fast for them–they’re small, and I want to save the money, etc.), is over by 16 hours.

This scenario highlights why I have changed my billing practices, but still it raises the question:

  • When there is ambiguity in the agreement, who pays?
    • Do I “pay” with my time, to make the client happy, or does the client “pay” by not having it just how they wanted it, for the price offered?
    • Is it my “fault” that their vision of what they were getting differed from my vision of what I was offering?
  • Should I let my fear of disappointing the client cause me to do 2 times’ work? 3 times’ work?
  • Why have I made it my job to make their dream a reality for $x,000?
    • That’s what they want me to do..
    • They’ve paid me a large chunk of money..
    • Should the fact that that’s not, actually, what we ever, specifically, agreed to, interfere with this?
    • Should the fact that they’re paying me a lot of money stop me from defending my version of what was agreed to?

The bottom line here, in the end, is that I’ve stopped making a lot of the mistakes that would put me in this situation, and you should too. And in the end, I will do a large bit of what the client thinks was promised, because not to do so is to create a difficult situation, where they would experience that they never got what they wanted.

Also, our real success (in business terms) will be measured by how happy we make our clients–not how accurately we execute the tasks that were requested (whether unambiguously or not).

In the end, the scenario described here (and lived so many times by me over the past several years) is a tale of the ignorant leading the blind. I was the ignorant–not knowing how to define the project clearly enough for the client, or create boundaries or shared ownership in the outcome. And the client was the blind–not knowing enough to know what they didn’t know.

As professionals, we have the option, of knowing enough to educate the client about what they’re really getting, and its value. Often times we don’t, and then we create this kind of confusion.

I have run into so many small clients who have had previous nightmare experiences with past web designers. One thing this tells me that, in their case, when the confusion in the agreements was revealed, they probably blamed the client, and thought of them as “stupid,” created a situation of disappointment. Maybe they didn’t lose as much money, but they created no goodwill.

But of course, it’s very important to create both–goodwill, and profitability. To be the kind of web designer that clients need, you also have to survive as a web designer.

Please, share your experiences with these issues below!

Posted in Freelancing, Web Design Biz | Tagged , , , | Leave a comment

New Google Fonts API Experiment

(Note, if you are viewing this on the main blog page .. To see this with its Google font magic, you have to go to the post page, here.)

This is pretty badass, IMHO. This text is 100% selectable, live text.

From code.google.com/apis/webfonts/docs/getting_started.html#Quick_Start:

So that’s all I’ve done here.

This text is fully selectable!

I’ve used Chris Coyer’s code to insert a custom per-post stylesheet here.

I did a bunch of tests in CrossBrowserTesting.com, and sure enough it works. The areas where it did not work were:

  • Opera
  • FireFox 2 & 3.0x
  • Ubuntu Konqueror

Not bad. What’s totally amazing is, it works in IE 6:

Google Fonts IE 6

Here are some page weight tests from YSLow.

Before:

YSlow Before

YSLow After (fonts API added):

YSlow After

So the additional weight is insignificant, it seems to me.

You can use all of Google’s web fonts for free, and you can also use TypeKit’s fonts through the same interface.

Posted in Code & Tech, For Designers | Tagged , | Leave a comment

Created a Plugin to Add List Links Shortcode

A bit neglected thing is the Links manager feature of WordPress. I have been wanting to use it to manage lists of cool stuff I find. I was thinking, there needs to be a different thing that’s not exactly a page (a theoretically “permanent” page of stuff), or a post (a very time-dependent grouping of simple ideas)–it is like a list of really related stuff that you need to know about.

The links manager I thought could work quite nicely for this, and if you created a shortcode, it could call that. I created a plugin, that I think should be well self-contained. It needs no interface, it just activates the shortcode. You could use this same framework for any number of other shortcodes as well. Having them as plugins is handy, in that it’s atomic–easily exchangeable between themes, projects, etc.

You can pass any of the arguments to the shortcode that you would pass to the wp_list_bookmarks() function. That makes it quite flexible. (Has anyone else done this? Is this just built into WordPress, and I didn’t notice? I don’t think so. The shortcode thing is relatively new.)

The Links feature lets you have link categories, descriptions, URLs (obviously), and even all kinds of fancy stuff like XFN data and images and ratings and stuff, if you want.

Here’s an example shortcode:

[list-links exclude_category='2' show_description='1' between=' &#150; ']

Obviously then you could style this with CSS. The shortcode API (see link above) gives you lots of options about how you want to output things, and you could easily insert ids or classes for this styling.

Here’s the code of my plugin:

__construct(); }
function __construct() {
$this->thispluginurl = WP_PLUGIN_URL . '/' .
dirname(plugin_basename(__FILE__)).'/';
$this->thispluginpath = WP_PLUGIN_DIR . '/' .
dirname(plugin_basename(__FILE__)).'/';

function list_links_handler($args, $content=null, $code="") {
wp_list_bookmarks( $args );
}

add_shortcode('list-links', 'list_links_handler');
}
}
}

if (class_exists('ListLinksShortcode')) {
new ListLinksShortcode();
}
?>

It’s really simple. It’s just a wrapper. Maybe it’s already out there somewhere, I don’t know. Very handy, though.

Posted in Code & Tech | Tagged , , | Leave a comment

When You See Untapped Potential, by Definition You Have an Unpopular Idea (Don’t Seek Approval)

These are from some notes I made while reading Blue Ocean Strategy. So, they have a bit of the feel of notes, but are interesting.


Reading about innovation in Blue Ocean Strategy. It’s a great book (with a lot of business-y jargon), all about finding untapped markets, how to go about it, and how to seize them. It gives you tons and tons of good ideas about how to do this, and how to think about things.

When you see an enormous untapped market potential for something, almost by definition, most people will disagree with you.

Or, they might not disagree with you that the potential exists, but then most likely they will give you some reasons why it can’t be done—some limitation.

In other words, people tend to believe what they see, they tend to believe what makes them comfortable, and they tend to resist the new. But, all innovation is about creating the new, so you’d better get used to the idea that people won’t tend to radically embrace your new ideas. In fact, they may heartily discourage you, or (and maybe this is worse), just ignore you completely.

This doesn’t mean that every potential opportunity one sees necessarily exists. (The book has many interesting ways of helping you find out which potential ideas make sense to pursue.) Perhaps it means that the set of potential untapped markets is a subset of percieved possible markets.

If we envision a circle representing the set of possible things we see as working, as a subset of all ideas of something that might work; and within that, a subset of things that will work. And pretty much encircling the whole thing, the beliefs that none of it is likely to work, by the mass of people.

all ideas of something that might work

..all possible things that we imagine could work

..all the things we imagine could work, that could work

Almost by definition, blue oceans represent things that “average” people don’t want or think will work.

Diffusions of Innovation Model (Wikipedia)

Robert Morris’ Chrossing the Chasm divides markets into early adopters, the middle swell, and late adopters. The psychology of early adopters is very different than the psychology of the middle swell, which is very different from the psychology of late adopters. Although he was talking about technology, this is probably true for things besides technology—social movements, personal practices, habits, etc.

Innovators are the most likely to take on a new idea, so they would adopt it first—before the rest of society thought it made sense.

Initial hostility to the automobile was apparently great, with people sabotaging roads. (People will fight vociferously for the status quo, even when that is very undesirable.)

So the bottom line is: If you percieve there’s an unmet potential in the world—the marketplace of money, or ideas, or anything—anticipate the experience that other people will generally tell you how it can’t be done, doesn’t make sense, and generally try to discourage you.

Above all, don’t look for approval from the crowd. The history of innovation is made by people who are not looking for approval, because existing ideas are what we’re likely to gain approval from.

No matter that at some later date, they may have been lauded for their innovation! If they’d set out to gain approval, they would never have become innovators.

If we have a cool idea, our natural inclination is to seek out approval for our idea. We might not get it.

So, then, if you feel you see untapped potential, your job is not to seek approval or validation—which would be effectively asking others to check your idea against their existing view of reality. Innovation = creating new reality.

Instead, you’d want to test it against what actually happens. Find out what people really want. See what happens when you introduce it. See what happens, when you try something radical.

Our minds always want to keep us within fences, and we, essentially, need to keep breaking out of them. (This much of what Avatar is about, by the way.)

Posted in Art of Life | Tagged , , , | Leave a comment

A new business is a new system, Part III

Peach / Prunus persica / 花桃(ハナモモ)
Photo credit: TANAKA Juuyoh (田中十洋)

To be successful a business needs to contain certain qualities. (In place of business, you could substitute any system you want to create that has to interact with other systems.)

In living systems terms, these qualities would be called sub-systems, or in the terms of Christopher Alexander’s A Pattern Language, these would be called the essential patterns.

I’m no huge expert about creating successful new businesses yet, so I’m not saying I have any definitive list of what exactly all these elements are. But I think it’s a really interesting way of thinking about how you create something successful–that is, something that successfully interacts with the existing systems.

successful business. A new system that interacts with the previously existing social systems, so as to channel results that the owner of the system considers valuable, in a continuous fashion. These results could be: financial wealth; more free time; the opportunity to interact with certain types of people in certain ways; a certain kind of fame desired in a certain context. They could also be results for other people, e.g., Kiva.org. It is also a key component that the operating of the system enjoyably creates circumstances for the operator that he or she desires. (If the operator is miserable or bored, then the business is not successful, even if it produces the desired results.)

The system must also be able to adapt to change. (“Systems must adapt themselves, must find new responses. They must deviate from their established patterns; they must seek responses that will bring them back into harmony with their environment.” [Molly Young Brown])

An animal needs a digestive system, a respiratory system, a nervous system, and so on. Some systems focus more on internal operations, and some focus on external operations. An animal that only eats coconuts, where there are no coconuts, is in bad shape.

A luxury jewelry store in the wrong neighborhood is in bad shape as well.

These qualities of systems are important to entrepreneurship, to understanding how to create success.

Systems in a business have been well defined–marketing, sales, operations, etc., and can be studied and understood.

The system must contain all parts to run

If one of these systems is missing, or is out of balance, the entire system will not run, will not work. You could have a great brain, wonderful lungs, and a fantastic nervous system, but without a digestive system, it’s all over quite quickly.

So this means that it’s the correct combination of the parts that is important.

It means that you could have a very wonderful system–a lovely business model, a fantastic idea, a terrific lot of potential–but, because one piece is missing, nothing ever happens. Importantly here, you only see results when all the parts are working.

Another aspect of this is, it’s more important to have all of the parts working okay, and working together, than any one part being totally perfect. There is a tendency to focus on the parts we enjoy doing, or feel good at. But the only way we’re going to see the system work, is if we get it all going.

So many–so very many–wonderful ideas, are never born, because they are missing one component. (It could be the ignorance of the producer–they don’t know they need to understand marketing, or accounting. Or, it could quite easily be one limiting belief–they don’t really believe it’s possible, and that sabotages the operation.)

And it’s really important, because we see the results of our work when it all comes together, and ripens. But when it doesn’t, it’s so easy to feel that it was meaningless, or never could have amounted to anything, where really, it could have just been this one little thing that was missing. (Or seven–but the point is, if we understood this, we could have a different attitude about it.)

I think these are some of the ideas, mental models, we would have if we lived in a culture that really fostered creativity and innovation–particularly fostered us creating just those things we would like to create. (And I think the lack of those things that I see in this culture, and the long, drawn out way I find myself having to elaborate all of these ideas–are indicators of just how far we are, in some ways, from living in this culture now.)

Build the right system, for you

It’s also critical that we are building the right system (see the definition of successful business, above), because sometimes it is just so exciting to anything–maybe we just have so much pent up creative energy–that we start madly building something that will not serve us.

Something that nobody told me before I started doing business, is that it’s totally easy to build a business that consumes you, takes up all your life, and gives you nothing back.

And what I have found is, once the thing is running, it takes on a life of its own. Rather like a living thing, actually. It gains momentum. It begins to act to defend and protect itself (see the Molly Young brown quote about negative feedback loops, in the previous post.)

It’s also possible to build a system that works, and starts to give you what you want. I know, because mine is. Lately, I have begun to look at what I do, and observe:

  1. What parts of what I do give me joy and satisfaction?
  2. What parts of what I do seem boring, or tedious, or just not right-for-me?

And then, I realized, it is quite possible to change the definition of what I do (modify system), such that I do more and more of the first bit, and less and less of the second.

Posted in Art of Life | Tagged , , , , | Leave a comment