Uncategorized

Welcome, Postling!

 It’s been a busy month, but unfortunately the stuff I’ve been working on has been either not very interesting, or isn’t far enough along I really have much to show. And some things are SECRET PROJECTS. I would like to take the time to congratulate Chris, Dave, and Haim for launching Postling over the weekend. Postling is a tool for businesses to manage their social networking.

I’ll have you know that the cinnamon rolls featured on their homepage were made by Chris and me. And they were quite delicious.

I’m hoping that armed with Postling I will finally get on top of social media for Tinysaur. I’m pretty active with my own, but dealing with Tinysaur has been a totally different story. Managing multiple accounts is a total pain. And I have a number of upcoming projects which will all need social media babble of their own.

Yay, Postling!

DIY Aeroponics

Gardening at 1 Month

My home aeroponics project continues to grow. The basil is really taking off, the rest of it… hopefully it’ll get there?

IMG_0292

Setup #2, the one with the water pump and tubing, is way over watered. Everything is soggy, even cutting back the hours from before. I think it really wants more like 5 minutes every hour, not 10 hours a day. I could set up a relay with an Ardunio… but then there are all sorts of power supply and housing issues I don’t really feel like dealing with. So instead I think I’ll just get separate AC timer for the pump. Overall setup #2 is more expensive, more fiddly, and generally not doing well. Its only advantage over setup #1 is that it is substantially quieter.

The most impressive thing about setup #1 is the root systems. They’re crazy:
Roots!

Notice the one short pod, a lettuce pod I swapped over to see if it would be happier in this setup. At this point I don’t think there’s any real need for the long pods at all. With the pump running all day you don’t really need the wicking action they provide, and at this point all the big plants have roots touching the water anyway (they don’t seem to mind).

Business

Bad First Impressions

Currently all my retail Tinysaur stuff is sold through Etsy.com. But lately I’ve been checking out some new venues, as Etsy’s toolset falls a little short for the volume of sales I do, and I feel like they’ve neglected the grassroots marketing aspect of the site. So I set out in search of someone who is doing the whole handmade market thing … better.

I regret to report that my first interaction with one of the alternative online markets has been somewhat unpleasant. I’ll refrain from naming them because I don’t want to make a bad situation worse, or call them out publicly, but I’ve got to vent.

I recieved an inter-site message from another member. It was a request for samples, to be sent to an unnamed list of people in New York. There was no explanation of who the person was, what organization they were with, etc. And they were asking for $400 worth of merchandise… free. In short, it sounded like a total scam. And I hardly have the time or resources to send that much merch off into a black hole. I declined, but offered wholesale pricing on the items. In the end they decided to purchase a smaller number at retail.
Edit: Turns out they needed me to ship before payment. It boggles my mind a bit that any vendor would be down with that. We ended up cancelling the order.

In a subsequent message I was informed that I was breaking a rule by offering kits on the site, as only finished goods are allowed. I’m sure this is an effort to get around the supplies situation that has overrun Etsy in some ways, but my kits aren’t a craft supply, they’re a finished good you assemble yourself.

Regardless, I’d like to comply with all of a site’s rules, so I pulled up the Terms of Service and read through the various associated documents. Nothing. I search all of the email messages I received during sign up. Nothing.

After a few back and forth messages with the user (who may be a site admin, given her pronoun usage, but I can’t find any mention of that anywhere on her profile, etc) it turns out that the “strictly enforced” rule can be found in a forum post. And is not, as far as I can tell, referenced anywhere in the Terms of Service or Merchant Rules.

It was a frustrating first interaction with the site; to be solicited for free stuff and then scolded (granted rather lightly) for not following rules you can’t find.

So now I’m sort of on the fence. On the one hand I really like some of the community based tools the site offers, and it’s not a hideously obvious Etsy clone like some sites, but the whole interaction left a bad taste in my mouth.

Crafting

Hipster Jewelry

Yesterday afternoon I was struck by a desire to make some big acrylic jewelry. For hipsters. Using stereotypical hipster things like deer and owls. Something which would provide instant gratification.

Hipster Jewelry DeerHipster Jewelry Woman

Two hours later I had these two pendants, cut from acrylic plastic on the laser. Each pendant is two layers, one black and one white, glued together. Each one is about 2.5 inches in the longest direction. Chris’s response to them was “I thought they’d be bigger.”

I’ve listed them for sale on Etsy and 1000 Markets under the title “Hipster Jewelry.” Chris suggested that this might be a bad idea, as hipsters notoriously hate hipsters. I pointed out that they LOVE irony. He wasn’t sure they’d be up for meta-irony.

My mother asked what a hipster was, and why I would make jewelry for them. It’s hard to explain what a hipster is to someone who has never had an occasion to interact with them. Or why they have such overbearing self loathing. I told her it is a deroggatory term for people who try to be a certain type of trendy. As for why I made the jewelry – it was just sort of a wild hare. One that I could easily satisfy.

Hacking

When Will eBook Readers Stop Sucking?

I’m starting to get interested in eBook readers, ones that use E Ink technology. I have a handful of books (technical books, not fiction) that I’d like to slog through to brush up on some rather boring topics, but reading them on a backlit screen is giving me headaches.

Amazon’s Kindle 2 has lost the delorian-inspired styling of its predecessor, but it does about a dozen things that I don’t want. First, the QWERTY keyboard takes up entirely too much real estate for something I don’t need. I already have a laptop, a netbook, and a smartphone, I don’t need to browse the web on my ebook reader. I also don’t need it to read to me, I don’t imagine that code samples read aloud are particularly useful. And I really don’t need Amazon’s DRM.

The Sony 505 looks a little more rational, with a better size-to-screen ratio, but at $300 it’s still more than I want to spend on a gadget which will be laughably obsolete in 6 months.

A seemingly unknown company makes the COOL-ER reader, which comes in a candy assortment of colors. Despite the stupid name, which is difficult to search for on many sites thanks to the dash, it seems to have a more reasonable take on eBook readers. It’s light, it doesn’t bother with a keyboard or wifi, it stole its styling directly from the iPod Mini, and it’s almost reasonably priced ($250). But reviews indicate that it has cheap construction and a painful UI, and it just doesn’t seem to stack up when the Sony 505 is only $50 more.

I’m waiting for the “perfect” ebook reader to come out, one without a ton of bells and whistles at a low price. It’s probably good there isn’t one right now since I already have a ton of gadgets and not a ton of extra cash to spend on things that fall farther towards “want” than “need.” So for the time being I’ll put the fun money I might have spent on an ebook reader towards a vacation with Chris this summer and wait for someone to come out with an ebook reader I actually want to purchase.

Programming

Android: Hello Circle

Note: This article is really old. It is here for posterity only. You should really find a more current tutorial.

I’ve been a little frustrated by the lack of Android tutorials. I got a Hello world going, and found that most of the few tutorials I could find were WAY more complicated than what I want to start with. GPS, map overlays, to-do lists, etc, which is great and all but I want to start simple and work up from that. So I set out to build “Hello Circle,” a program which drew a dot on the screen wherever you touched it. After about 12 hours of beating my head against Eclipse, the Android SDK, and the frequently incorrect Android documentation I got it working. So here’s a tutorial.

Setting up the environment I’m going to assume you already successfully completed the Hello World tutorial. Which means you’ve got yourself an IDE (probably Eclipse), the Android SDK, and the ADK (Android Development Kit) which is a plugin for Eclipse to help keep things in order. If  you haven’t done that yet follow these instructions and pray everything works as planned. I’ll see you in a few hours. Create a project just like you did for Hello World. Creating the ViewGroup In order for anything to display on the screen you need to create a view. In the Hello World tutorial you created a TextView. We’re going to use the XML setup for creating our view, and rather than creating a TextView we’re going to use a FrameLayout, which is acutlaly a view group. Open up /res/layout/main.xml and plop in this fine code (obliterating anything that may be there):



This, when it’s called in our code, will create a FrameLayout view with an id of “main view,” a width/height that fills the screen, and a neon green background. The hex color code for the background includes the alpha channel (the first to FFs). Setting the contentView to our XML Head over to your main class and call setContentView on your layout. Your code should look something vaguely like this:

import android.app.Activity;
import android.os.Bundle;

public class RoboTown extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
}

If you run your code at this point you should get a big green background which does nothing. Hooray! Creating the Ball class Now we want to create a circle. Actually we want to create a lot of circles. So the first step is to create a new class called Ball. Right click on your project’s main class in the Package Explorer (on the left) and click New > Class. Give it the name Ball and click Finish. Our ball is actually going to be another view. What? Yeah. It’s a view. All of our Ball views will eventually go into our FrameLayout, but we’ll worry about that later. So first, modify your Ball class so that it extends View, since it’s a new type of View, and while you’re at it go ahead and import some of the things we’ll need for drawing:

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.View;

public class Ball extends View {

}

In order to draw a ball we need a handful of things: a Canvas to draw them on, x and y coordinates to place the center of the ball, the radius, and Paint to give it color. So we’ll start by establishing those (I hid the imports for the sake of clarity, you should leave yours there):

public class Ball extends View {
    private final float x;
    private final float y;
    private final int r;
    private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
}

In the last line we create a new Paint object, creatively called mPaint. A Paint contains information like colors, text sizes, etc, which affect the appearance of the drawing. So far we haven’t assigned any of those things to the Paint, we’ve just created it. Now we need to write the Ball constructor, which is the method to be called whenever we create a new ball:

    private final int r;
    private final Paint mPaint = new    Paint(Paint.ANTI_ALIAS_FLAG);

    public Ball(Context context, float x, float y, int r) {
        super(context);
        mPaint.setColor(0xFFFF0000);
        this.x = x;
        this.y = y;
        this.r = r;
    }
}

Our constructor takes a Context, x, y, and radius r. We pass these arguments in when we instantiate the object and assign them to the object properties. And lastly, the method which actually draws the circle, onDraw:

public Ball(Context context, float x, float y, int r) {
    super(context);
    mPaint.setColor(0xFFFF0000);
    this.x = x;
    this.y = y;
    this.r = r;
}

 @Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.drawCircle(x, y, r, mPaint);
}

Ok, our Ball class is done. Save it and head back over to the main class. Drawing a Ball on the screen At this point we haven’t actually drawn anything. We’ve just created Ball which we *could* draw if we so desired. In order to draw it on the screen we first have to get a hold of our FrameLayout. Since we created it via XML we’ll need to find it again using findViewById():

  setContentView(R.layout.main);

   FrameLayout main = (FrameLayout) findViewById(R.id.main_view);

Now we can use the addView method to attach a new Ball to our main view:

    FrameLayout main = (FrameLayout) findViewById(R.id.main_view);
    main.addView(new Ball(this,50,50,25));

Run your code now and, if all goes well, you’ll have a circle with a radius of 25 pixels in the upper left corner of the screen. Yay! Take some time to play around with Paint options, positioning, etc with the various methods outlined in the documentation. Now all we have to do is add a touch listener to react when the screen is touched. Which is thankfully pretty easy. We’re going to create a new touch listener and attach it to our main view all in one fell swoop:

main.addView(new Ball(this,50,50,25));

main.setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent e) {

    }
});

The onTouch() method is a callback function which will be hit whenever you touch the screen. Android will send it a View (v) and a MotionEvent (e). We already know what a view is, and a MotionEvent is an object containing information about the touch. All we care about are the X and Y coordinates, which are accessible via the getX() and getY() methods.

main.addView(new Ball(this,50,50,25));

main.setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent e) {
        float x = e.getX();
	float y = e.getY();
    }
});

The last thing we have to do before we can start drawing is to cast the view we were sent as a FrameLayout, so we can use the addView() method with it. Then we can instantiate a new Ball at the coordinates sent in the Motion Event:

main.addView(new Ball(this,50,50,25));

main.setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent e) {
        float x = e.getX();
	float y = e.getY();
        FrameLayout flView = (FrameLayout) v;
	flView.addView(new Ball(getParent(), x,y,25));
    }
});

The getParent() call sets the context for the Ball to the main Activity. I only vaguely understand why it has to be done this way. So now, the moment of truth! You should have all the code you need to run the app in your emulator or even on a real phone. Touching the screen will place a dot where you touched. Amazing! Hopefully you now have enough of an idea of how all this stuff plays together that you can forge your way to making something vaguely useful (which this isn’t).

DIY Aeroponics

Garden at Two Weeks

IMG_0248

It’s been two weeks since I planted my garden, and the basil is starting to have actual leaves!
The oregano is… well, it died. And so I planted more. It’s sprouted, and these sprouts look more lively than the previous ones. I strongly suspect that the culprit was over watering. Why do I suspect this?

IMG_0249Oh I don’t know, maybe it’s the algae that’s growing on a few of the pots. That’s right, algae. On top of my growing medium (rockwool). I’m gonna take that as a sure sign that the whole thing is just a bit too soggy. So I’ve moved the pump onto the same timer strip as the lights, meaning it will now be on for about 16 hours a day instead of 24. Hopefully this will give things enough time to dry out.

Three of the 5 lettuce pods have popped up, but they aren’t doing much, so I think they may be suffering from overwatering as well. We’ll see if a little less saturation helps them perk up.
IMG_0245

Uncategorized

Playing around with 3D modeling

mechanical_pencil

It started when The Sims 3 came out. Rather than get The Sims 3 I decided to start playing The Sims 2 again. And then of course I needed to download new objects for it. And then I wanted to get back into making my own objects.

So I spent the better half of the afternoon playing around with 3D modeling. While the modeling techinques are pretty much the same as they were when I left off (about 8 years ago), the rendering is vastly improved. With nice enough lighting and textures even simple objects can look good, and lose that excessively smooth CGI look.

screwdriverI started with a tutorial on how to make a screwdriver, and moved on to a slightly more adventurous model of the mechanical pencil I was using. I think lighting is one of the biggest things I’ve totally forgotten, setting up and aiming lights didn’t work at all how I expected. The tutorial had me use a dialectric material, which I had never heard of (not that I was ever really super into materials anyway), except unlike the tutorial all my materials came out greenish. You can see it in the screwdriver handle and the barrel of the pencil.

I don’t have any real reason to get serious about the rendering side of things, since most of my 3D modeling is for rapid prototyping a la Makerbot, but it’s fun to play with at least. And adding a Fur texture proves categorically that round + fuzzy = cute:
Fluffy

DIY Aeroponics

Garden #1 Hits Day 7

Garden #1 Day 7 My first garden, the airstone powered one, is now a week old! The basil seems to be pretty happy, all three pods sprouted (and 5 of the 6 seeds came up). I’ll thin them to one plant per pod once they get a little taller.

The oregano on the other hand is not happy. I think things are too soggy. The bottom of the rockwool is touching the water, and I think that plus the airstone is just saturating things too much. I turned the pump off for the day, and man that thing is noisy.

Garden #2 hasn’t sprouted yet, but it’s only been a few days. I figured out that a lot of the dripping water sound was coming from a loose connection to one of the spray heads, and now that it’s fixed garden #2 is actually pretty quiet. Especially compared to the air setup. I still don’t like how tall the whole thing has to be though, it looks a little silly.

The light I ordered came in on Monday. After looking around at DIY options I decided it would cost me about the same to build a much uglier adjustable height lamp, so I got this one off Amazon for $25 (free shipping!). It takes standard bulbs, unlike the other grow lights I could find, and isn’t hideously unattractive. The side flaps are a little under engineered, I had to stick something in the hinge to get them to stay up.

It casts a nice unappealing blueish tint, which is supposedly what plants like for promoting vegetable growth. I like the lamp enough that I ordered a second one for garden #2.

New Lamp

Business, Etsy

Your Own Domain + Etsy

I’m slowly purging all references to my Etsy shop from my business cards, ads, etc because I want more control over by branding. Although I don’t have any short term plans to set up my own shopping cart I want to be a little more prepared if I do decide to.

I’ve set up http://shop.everythingtiny.com as a redirect to http://kfarrell.etsy.com and thought while I was at it I would write up instructions for how other folks can to – and on the super cheap. I’ve seen a bunch of places that charge a monthly or annual fee for domain forwarding. The cost of my setup is about $10/year including domain registration.

Tools You’ll Need

  • A membership with NearlyFreeSpeech.Net. If you know a little bit about what you’re doing you can use this setup on *any* host, but for the sake of simplicity all my examples are on how to do this with NFSN.
  • An FTP or SFTP client. I like to use FileZilla.
  • A text editor. Notepad will work just fine.

If you don’t already own a domain you can buy one through NearlyFreeSpeech.Net. It’s a little less than $9/year for domain registration and unlike GoDaddy they won’t spam you into getting a zillion of their other service. Deposit $10 into your NFSN account, purchase your domain name (it pulls from your account balance), and you’re good to go.

If you already have a domain name there will be a little extra configuration for you, but we’ll get to that later.

Setting up your site

Ok, there is a tiny cost to setting up the forwarding. While NFSN doesn’t charge any monthly fees for sites, they charge for storage (how big your site is) and bandwidth (how many gigabites of files your site sends to other people). Since you’re just forwarding your visitors on to Etsy, both of these will be very very low. Extermely low. But nonetheless you’ll need to make a small deposit into your NFSN account, $1 should be plenty.

Creating your .htaccess file

A .htaccess file is a special file that tells the server how to handle requests for your site. Open up a new file in your text editor and copy/paste the following:

RedirectTemp / http://yourshop.etsy.com/

Save the file to your hard drive with the name “.htaccess”, making sure there is no file extension such as .txt.

Upload the File to Your Site

Open up your FTP client and connect to your site (the connection information can be found by logging into NFSN and clicking the ‘sites’ tab and then the name of your site.

When you connect you’ll likely see a number of folders such as “logs” “private” and “public”. Upload your .htaccess file into the public folder. If it has a file extension rename the file so it is just “.htaccess”

Add Your Domain as an Alias

To make your domain work with your site you need to add it as an alias. Go to the site information page and click “Add a New Alias” on the right. Enter the domain you wish to use. I.e. if you want “http://shop.everythingtiny.com” to go to your Etsy shop enter “shop.everythingtiny.com”.

If you purchased your domain name through NFSN you’re done! It may take 24 hours for everything to start working, so be patient if it doesn’t seem to be doing anything right away. You can test to see if your redirect is working by going to http://yoursite.nfshost.com, where yoursite is the name of the site you created.

If you purchased your domain elsewhere

You’ll need to add a record to your DNS to get things working. Check your registrar’s documentation for “how to add a DNS record.” Once you’ve figured it out, you’ll want to add what’s called a CNAME record. It will look something like:
shop CNAME yoursite.nfshost.com.

Where “shop” is the subdomain you want to use (i.e. shop.everythingtiny.com) and yoursite is the name of your site at NFSN. The CNAME record may take a few hours to take effect.

Tada!