Personal

Graduate School?

Yes, the earth has stopped rotating. I am officially considering graduate school.

People who know me well know that I don’t generally advocate going for a graduate degree. I feel many students are mislead by universities regarding the value of said degrees, and many people would be better served simply getting in some real-world experience.

And yet I’m considering grad school. For software engineering.

So why the change of buy cheap viagra internet heart?

Primarily, I want to learn new things.  I have a Bachelor of Fine Arts in metalsmithing. Which is great, and I’m proud of that degree; I worked hard for it. But I also do a lot of professional web development and programming. I’ve learned most of it through the school of hard knocks. I’m self employed, and while one might think that would make it easier to take time to learn new things, in some ways it becomes more difficult. It’s easy to overdue “work time” and spend 12 hours a day on my business, leaving little time for anything else.

In addition to polishing my skills, I decided the degree was worth something to me. If my Bachelors was in CS or math, I’d probably skip the official degree program and just take some continuing ed classes. I’m after the information, not the acronym. But after talking to a few people I think there’s a benefit to having a degree in computer science on my resume. As much as I wish it wasn’t, sexism is still an issue for women working in technology and science. Having an advanced degree can help combat that, although it’s a shame that it even has to.

I’ve more or less decided to go into software engineering, as opposed to “computer engineering” or “computer science.” Admittedly before I started looking into grad school all these terms sounded identical to me. The Association of Computer Machinery put out a curriculum which breaks down various computer sciences into a few different disciplines. The article itself is a bit dry but there are some very useful charts and graphs which help me figure out how my interests lined up with different programs. You can find it here if you’re interested: http://www.acm.org/education/curric_vols/CC2005-March06Final.pdf

Now comes the daunting task of picking a college and getting admitted. I’m going to have to use all of the work I’ve done since college graduation to show my aptitude and interest in software engineering, since my college transcript just shows that I’m damned good at metalsmithing. I was hoping to take a few undergraduate classes as a non-matriculating student at a university I’m interested in to get a feel for it and meet the faculty, but it looks like most CS programs don’t let non-majors take classes. Without a lot of connections to academia, the graduate admissions process is pretty intimidating. When I was in high school, my college counselor seemed superfluous; I already knew where I wanted to go. Now I’d give my left arm to have someone help me navigate the sea of programs and paperwork.

I’m not looking to relocate, so I’m sticking to colleges and universities within a reasonable commuting distance (via public transit) to my home in Jersey City. So far I’ve checked out Rutgers, NYU, and Stevens. I’m still on the fence as to whether I should go for a masters or a PhD. A PhD sounds like it might be more interesting, but I’ve got mixed feelings about setting aside such a huge chunk of time. Would becoming a PhD student mean I’d have to leave my business behind?

One thing I’m oddly looking forward to is the GRE. I’ve always done pretty well on standardized tests.  Do you still use a number 2 pencil and fill in the bubbles? I find that to be immensely satisfying.

Business

Trackthepack.com

This time of year I’m ordering a lot of supplies for Tinysaur. Over the next few days I have no less than 7 shipments of tins, bottles, tweezers, and paper headed my way. Yesterday’s shipment, a single order, consisted of 5 boxes weight over 100 pounds total. Oh yes, the UPS man knows where I am.

The latest website in my arsenal of organizational tools is TrackThePack.com. You register for an account, enter your various tracking numbers, and it shows them all on one page. More than that, it shows you the estimated arrival dates and even a tiny map of the package’s progress. It can handle tracking numbers from all the major US carriers, which is awesome.

Now to wait for my packages. Hooray?

Uncategorized

Kitten Tragedy

Yesterday we took the kittens in for their shots and deworming. The vet said they looked healthy, and while they were irritated by the journey in the cat carrier, they were doing well.

Unfortunately when we got home last night, the dark grey kitten had passed away. We’re not sure exactly why, it could have either been an illness or a reaction to the vaccinations. Chris and I are pretty upset, but we’re glad he at least had a comfortable home for his last few days.

I talked to some of the other foster parents about it, and apparently the kitten mortality rate is kinda high, even for cats coming from breeders. These guys were strays so we don’t really know anything about them or their mothers. It’s one of the pitfalls of fostering.

Rest in peace, tiny grey unnamed kitten.

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