Hello!

My Name is Jodi. I build things on the web.

How to Replace the Glass on a Galaxy S3

I dropped my phone in the worst possible way - completely flat, face down. No case or screen protector could save me. It was pretty much completely shattered and little glass shards coming off of it. Everything else functioned normally so I decided to have a go at repairing it since I didn’t have much to lose. Below is what I learned while repairing my Samsung Galaxy S3. Hope it helps someone.

I watched a bunch of Youtube videos and read a lot of Amazon reviews before trying it myself. People make it sound impossible and super daunting, but it just takes a little patience. If you can accept the worse possible scenario (destroying your phone), you have nothing to lose! :-P

I factory reset my phone before starting because if you break your digitzer or cause more damage you can still sell for parts on ebay or craigslist. Basically, make sure your data is cleared while you can still see everything.

The tools I used:

  • Glass and adhesive, I chose this kit
  • Hair dryer
  • Razor blade
  • Playing cards (I prefer the King of Diamonds)
  • Tweezers (I had tons of little shards)
  • Rubbing alcohol (to remove glue residue)
  • Guitar pick (optional, only used a little)

I think the specific kit I bought is worth it simply for the adhesive that comes with it and the glass looks great and exactly like the factory one. I don’t think the tools included are anything special though and I didn’t really use any of them. They seemed to be too thick to get under the glass. There are other kits that are cheaper and don’t have tools but I didn’t see any that had the easy adhesive. Also, I noticed many of the kits didn’t have glass branded with Samsung.

I read a lot of people suggest not to try it with a hair dryer and to buy a heat gun. I like to live on the edge and didn’t want to buy a heat gun. I imagine it would be a lot easier with the heat gun because it seems like my glue was a lot more sticky and didn’t come off as easy as some of the videos. Heat is definitely your friend. Use a lot of heat.

I used a space heater to start out with and get the heat going. This felt a little fire hazardy, so I switched to hair dryer.

The razor blade was the best tool for getting the glass off the edge. In most of the Youtube videos, the glass is in one piece so they only have to pull it up once and then can slide around the edges. Since mine was cracked in so many places, I had to use the razor blade on the edge quite a bit. Be careful about scratching the silver frame that surrounds the phone. After getting the glass up off the edge, I would slip a playing card under it and slowly push it along.

Watch this Youtube video and be careful when pulling around the bottom capacitive buttons. Be sure not to cut the ribbon that connects the button to the glass.

I was left with a lot of glue residue. This may be because I wasn’t heating it enough and was using a hair dryer instead of a heat gun.

This was after I had cleaned some of the glue off with rubbing alcohol. Rub carefully and be sure not to scratch the screen. I used tissues and paper towels. Tissues leave lint though. A cloth for cleaning eye glasses or tablets would have been better.

Here is my final product. Putting the new glass on is the easy part. The adhesive that comes with the kit is super simple and straight forward to do. The glass in the kit looks just like the original but feels a little plasticy before you put it on. I don’t notice a difference now that its in place on my phone. I did mess up the edges a little bit when using the razor blade. There are little cuts in the silver rim. I have a case though, so its not noticeable when its on. All in all, this took me around 4 hours to complete. Other people in reviews said it took them an hour or two. I think my phone is a pretty bad scenario and the more shards, the longer it will take. I also was really slow and cautious at first.

We Were Acquired (and We Still Like Each Other)

It’s been a crazy awesome roller coaster of almost six years. This week, our company KZO Innovations, was acquired by Bedford Funding to be integrated into Peoplefluent’s workforce talent management product. It is a great fit for our technology and gives us the opportunity to take our vision to the next level.

Thanks to the whole team for their hard work. We need a full team pic, this is most definitely not everyone.

REI Habanera Women’s Sleeping Bag Review - Part 1

I am the ultimate cold sleeper. I need the ultimate sleeping bag when temps drop below freezing. I recently bought the REI Habanera Women’s Sleeping bag to see if its up for the challenge. The sleeping bag I’ve been using for the last year or so is the REI Sub Kilo +15 . It has 750 fill down and is super light and awesome but just doesn’t cut it when temperatures drop below ~35 degrees (for me anyway).

I chose the Habanera bag after tons and tons of research and comparison. A couple big things stood out for me: the price (I paid $209 on sale) is great for its rating and it is EN 13537 tested. It’s really difficult to compare sleeping bags or trust the rating without the EN test offering some sort of metric.

A lot of companies over estimate the rating of their bags (North Face seems to be one of the worst). For example, this North Face 0 Degree Snow Leopard bag claims in the title to be zero degrees, but the product listing shows its EN Rating at : Comfort: 25° F / Limit: 12° F / Extreme: -22° F . Extreme basically means you won’t die if you stay in it for 6 hours at those temps. So it’s pretty crazy they advertise it as a zero degree bag.

Check out the EN Rating tag at the end of this post. I still consider it a fuzzy guideline for comfort level (its too subjective), but compared to other bags I’ve looked at this is the best bang for your buck.

More to come when I actually get to use it.

Ruby on Rails - Bundle Install Fails With SSL Certificate Error

After a fresh install of Ruby and Ruby on Rails on a new Windows 7 machine, running “bundle install” in my Rails 3 project results in the following SSL certificate verification error:

1
2
3
4
5
Gem::RemoteFetcher::FetchError: SSL_connect returned=1 errno=0 state=SSLv3 read
server certificate B: certificate verify failed (https://rubygems.org/gems/rake-
0.9.2.2.gem)
An error occurred while installing rake (0.9.2.2), and Bundler cannot continue.
Make sure that `gem install rake -v '0.9.2.2'` succeeds before bundling.

This was a bug that was fixed and running the following command fixed my issue:

1
gem update --system

I found this solution on stack overflow, but it is buried at the moment and difficult to reference. Hope this helps someone!

What Sites See When You Login With Facebook

I’ve been working on a lot of web apps with social networking authentications lately and it has been interesting to see what developers can see when you login via Facebook (as well as other social networks). Below is an example of what a site has access to when you login via Facebook. The below example is a request for “basic information” and “email”. When you login, Facebook will tell you what the site is requesting access for. You can think of the array below as the minimum amount of data you normally give them access to. In reality, most apps request access to more data than this including your wall posts, contacts, likes, etc.

For my profile, requesting access to “read_feed” resulted in an array 2,054 lines of data containing gps coordinates of all my check-ins, photos I’ve been tagged in, and everything someone has said on my wall in the last 6 months as well as the full name and facebook ids of my friends who posted on my wall.

To give you a visual perspective, here is an extremely zoomed out screenshot of the data returned with just feed permissions.

Below is an array of the “basic information” you give sites when you login with your facebook account:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
Array
(
    [FB] = Array
        (
            [Me] = Array
                (
                    [id] = 15601718
                    [name] = Jodi Wilkinson
                    [first_name] = Jodi
                    [last_name] = Wilkinson
                    [link] = http://www.facebook.com/jowilki
                    [username] = jowilki
                    [hometown] = Array
                        (
                            [id] = 123456789101112
                            [name] = Southern, Virginia
                        )

                    [location] = Array
                        (
                            [id] = 123456789101112
                            [name] = Reston, Virginia
                        )

                    [work] = Array
                        (
                            [0] = Array
                                (
                                    [employer] = Array
                                        (
                                            [id] = 123456789101112
                                            [name] = KZO Innovations
                                        )

                                    [location] = Array
                                        (
                                            [id] = 123456789101112
                                            [name] = Reston, Virginia
                                        )

                                    [position] = Array
                                        (
                                            [id] = 123456789101112
                                            [name] = Co-founder, VP of Products
                                        )

                                    [start_date] = 2007-03
                                )

                        )

                    [education] = Array
                        (
                            [0] = Array
                                (
                                    [school] = Array
                                        (
                                            [id] = 123456789101112
                                            [name] = Degrassi High
                                        )

                                    [year] = Array
                                        (
                                            [id] = 123456789101112
                                            [name] = XXXX
                                        )

                                    [type] = High School
                                )

                            [1] = Array
                                (
                                    [school] = Array
                                        (
                                            [id] = 123456789
                                            [name] = Example University
                                        )

                                    [year] = Array
                                        (
                                            [id] = 1234567891123145
                                            [name] = XXXX
                                        )

                                    [concentration] = Array
                                        (
                                            [0] = Array
                                                (
                                                    [id] = 1234567891123145
                                                    [name] = Information Technology
                                                )

                                        )

                                    [type] = College
                                )

                        )

                    [gender] = female
                    [email] = email@example.com
                    [timezone] = -4
                    [locale] = en_US
                    [verified] = 1
                    [updated_time] = 2012-04-18T00:14:05+0000
                )

        )
)

See Graph API Reference and click on each link to see more examples of data that is available. I’m not one of those super privacy freaks, I just think everyone should be informed when they allow other websites access to their Facebook data. I think it becomes more of a reality when you see it in this format.

Logging in via Twitter, for example, is generally a better option because it does not provide websites or developers access to your email address. It also has less personal information for the most part. Twitter discloses your “display name” which can be a pseudonym and doesn’t require your real first name or last name.

Running Shells as Cronjobs With CakePHP on Ubuntu

I found it a little tricky to get my CakePHP shell to run as a cronjob on my Ubuntu server, so I thought I’d do a little write up on how I ended up doing it. First off, I’m using Cakephp 2.0 and Ubuntu 10.04 LTS. I’m not a linux expert, which is probably why I had issues figuring it out in the first place.

The first step is to have a shell script you want to run. For the following example, I have a shell called HelloShell.php located in /var/www/example.com/public_html/app/Console/Command/ . See Cake’s Console and Shells guide for more details on writing shell scripts.

I use the cake console pretty often for the bake functionality, so I always add a path to it so I can access from any directory.

To do this, I edited .profile in my home directory and added this line at the bottom to the location of my cake console:

1
export PATH=/var/www/example.com/public_html/lib/Cake/Console:$PATH

I believe you have to logout and back in for it to take effect.

Now type:

1
cake -app /var/www/example.com/public_html/app hello

If your path is set properly, you should see the output of your HelloShell.php script. Now we’re good to go to setup the cronjob.

Type

1
crontab -e

to open up the editor.

Here are the settings I used to run my cronjob every 30 minutes:

1
*/30 *   *   *   * /var/www/example.com/public_html/lib/Cake/Console/cake -app "/var/www/example.com/public_html/app" hello**

You can also output to a log file with various levels of verbosity:

1
*/30 *   *   *   * /var/www/example.com/public_html/lib/Cake/Console/cake -app "/var/www/example.com/public_html/app" hello --quiet >> /home/myusername/hello_cron.log**

Hope this helps someone!

Pinterest Plugin for Wordpress

I just developed a new plugin for Wordpress, called Pretty Pinterest Pins, that pulls the latest images, captions, and links from your latest Pinterest activity and shows it off on the sidebar. There are several customizations you can make to it to match the look and flow of your site.

You can read more about it and download the plugin for free from the Wordpress plugin directory.

There will be a lot more great features to come once Pinterest opens their API to developers.

Feel free to post any questions in the comments or ask me on twitter.

Easiest Way to Make a Form in CakePHP

The easiest way to make the HTML for a simple form is to use CakePHP’s built-in FormHelper. Once you get your model and table set up with the fields you need, a little shortcut is to use the inputs() function so that you don’t have to type out each individual field input:

1
2
3
4
5
<?php
echo $this->Form->create('Post');
echo $this->Form->inputs();
echo $this->Form->end('Submit');
?>

This method puts Cake’s automagic form elements to work and will save some time and shave off a couple lines of code if your form isn’t too complicated.

Installing an Aftermarket Stereo in a Volkswagen Beetle

I recently installed a new aftermarket stereo in my 1999 Volkswagen Beetle. I was kind of forced into getting a new radio because I took my car in to a shop to diagnose a battery drain and they ended up cracking my factory radio when they pulled it out.

I have no real experience working with cars, and the install definitely took a lot longer than expected, but I think this is a task that most people can handle. My install was complicated by the fact that the shop that diagnosed my battery drain also removed the fuse to the radio (fuse 42, fyi) and didn’t tell me about it.

I ordered most of the parts I needed off of Amazon.

The stereo I bought was the Sony Xplod CDXGT55UIW. It has both USB connectivity with iPhone support and an AUX port for connecting anything else. It definitely beats the tape deck in my old radio.

Here’s the full list of items I needed: