Hacking Google Chrome

Friday, September 12. 2008

I recently installed Google Chrome and I like it. However one thing has been bugging me and that is the way it does not let me save a password for a site, once I have blacklisted the site with the 'Never for this site' button.

However, with a little digging, I was able to figure out how to do it. The steps are below.

  1. Download SQLite Database Browser from here.
  2. Close Google Chrome. If you try to make this change with the browser still open, not only will the change fail to take effect, it will hang the browser and you will have to kill it.
  3. Launch the 'SQLite Database Browser.exe', ignore the Security Warning, and click Run. Open the database located here: C:\Documents and Settings\{account}\Local Settings\Application Data\Google\Chrome\User Data\Default\Web Data
  4. Open the Browse Data tab, and open the 'logins' table. Scroll horizontally to the 'blacklisted_by_user' column.
  5. Find the row having a value of '1' in this column that you want to reset. Double-click on the row and change the value to 0, and click 'Apply Changes'.
  6. Save the database, and close the SQLite browsing window.
  7. Open Google Chrome, navigate to the site, and login. The 'Do you want Chrome to save your password?' bar will appear.

Purify Clip

Sunday, August 31. 2008

Purify Clip

For the first time I recorded Luke playing the real drum kit with a single room microphone about 6ft away and 4ft off the floor.

Track 1 - Crowdster acoustic guitar DI caepo 3rd fret panned -50
Track 2 - Crowdster acoustic guitar DI panned +50
Track 3 - Motif XS6 All Bars Percussion organ DI
Track 4 - Zion electric guitar bridge pickup, Ibanez TS9 overdrive Drive=12:30 Tone=3:00 Level=10:00, Fender Hot Rod Deluxe Dirty Channel Drive=4 Master=2 EQ=0 Presence=4, mic'd with single SM57 straight on against the grill, panned -30 with DAW reverb
Track 5 - Zion electric guitar same setup panned 40 with DAW reverb
Track 6 - Mapex Drums with AT3035 room mic
Track 7 - Pedulla Bass into Marshall guitar amp with 2:1 DAW compression above -14dB and parametric EQ

DAW Mastering

Multiband Compressor - Classical Master
Studio Reverb - Mastering Reverb
Stereo Expander - Wider Field

Short Jam

Sunday, August 17. 2008

Short Jam

Here is the first recording in the new music room.

Track 1 - Crowdster acoustic guitar DI
Track 2 - Zion electric guitar, neck pickup, Boss compression, Ibanez TS9 overdrive, DL4 Delay, Verbzilla Reverb, Fender Hot Rod Deluxe with More Drive on, SM57 mic close straight center, Audition Stereo Expander Wider Field & Full Reverb Lecture Hall Dry 73% Wet 44%
Track 3 - Nathan Ibanez fretless bass into Fender cabinet, SM57 mic close straight center
Track 4 - Motif XS6 All Bars Percussion organ DI
Track 5 - Yamaha P250 XG Grand Piano DI
Track 6 - Motif XS6 canned drums

I used a much lighter pick on both the acoustic and electric. It was a Jim Dunlop .60mm.

Mastering

Studio Reverb - Mastering Reverb
Multiband Compressor - Classical Master
Stereo Expander - Wide Field

Basement Studio

Thursday, August 14. 2008

I reorganized the room in the basement where I play and record music.

It is arranged according to the LEDE (Live End Dead End) design. In this design, the front end of the room is heavily treated or "dead" to absorb nearly all reflections. The center of the room is the "sweet spot" or main listening area. The rear end of the room is partially reflective or "live". Acoustic energy is returned back into the room for ambiance.

Read more on studio acoustics here.

Here are some pictures.


















Crystal Report Viewer

Friday, June 27. 2008

Today I figured out how to preview Crystal reports that are populated with a list of POJO objects. Here is the code to do it.

The ReportViewerBean can be found in the Eclipse plugins directory, in the ReportViewer.jar library. Make sure to have the .rpt file available on the classpath, as well as your CRConfig.xml file.

javax.swing.SwingUtilities.invokeLater(new Runnable() {

public void run() {
try {
// create a viewer
ReportViewerBean viewer = new ReportViewerBean();
viewer.init(new String[0], null, null, null);

// create a window
JFrame frame = new JFrame("Crystal Report Viewer");
frame.setTitle("Crystal Report Viewer");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(viewer, BorderLayout.CENTER);
frame.setSize(700, 500);
frame.setVisible(true);

// display the report
IReportSource reportSource = report.getReportSource();
viewer.setReportSource(reportSource);
viewer.start();
} catch (Exception exception) {
System.out.println(exception.toString());
}
}
});

Mt. Gretna Maximum State Security Prison

Tuesday, June 24. 2008

A few weeks ago I was talking to Dad about the ruins of an old railroad station along the Conewago trail in Mt Gretna. During the conversation, he mentioned another ruins near Mt. Gretna, a state prison, that was never finished. My curiosity was piqued, and I did some research. I found some interesting information here (pdf), and decided to check it out.

So this evening we took a quick drive over to Lawn to try and find the ruins of the prison built there in the late 1930's. With the help of a little pamphlet from the Lebanon County Historical Society, entitled "The Mt. Gretna Maximum State Security Prison: A Monumental Failure" we were able to find something pretty quickly. The site is located just over the hill to the south of Lawn, in the PA State Game Lands, directly after the PA Turnpike bridge.





We found this octagon shaped foundation just as the pamphlet said, 1000 ft in from the gate, and to the left about 40 ft. Unfortunately, the multiflora prevented us from finding anything else. Supposedly, there is a partial structure with a few walls, as well as an old well casing, that still exists today. Perhaps a future visit will yield more information.

Bluegrass

Monday, June 23. 2008

I always thought the banjo was the definition of bluegrass music. But I never quite realized before how important a part the mandolin plays. Here is a YouTube video of Blue Highway performing their song Little Maggie; this is bluegrass music at its best.

Blue Highway

Monday, June 23. 2008

Last night I took the family to see Blue Highway, supposedly one of the best bluegrass bands in the country. I was not disappointed. They are a 5-member group playing guitar, upright bass, mandolin, banjo, violin, and dobro (resonator guitar, similar to steel guitar).

They were all good but the mandolin player and banjo player were exceptional. The bass player as you can see used an electric upright bass, which sounded good but you could tell it was not the real thing. The banjo player was playing a Huber banjo Lancaster model. We sat right beside Steve Huber who was there for the concert. Unfortunately I did not get to talk to him.

All in all it was a great way to spend a Sunday evening.

Mysql, DATETIME, and milliseconds

Thursday, May 29. 2008

Mysql does not store milliseconds in its DATETIME, TIME, or TIMESTAMP types. Dates containing millisecond precision will be truncated, removing the milliseconds.

From the Mysql docs:

However, microseconds cannot be stored into a column of any temporal data type. Any microseconds part is discarded.


This is a major pain when you want to order the results of records inserted very quickly in succession. You basically have no option but to create an extra Long field in the table whose only purpose is for sorting, and dump the milliseconds in there.

A couple Hibernate hints

Tuesday, May 6. 2008

Here are a couple things I just learned about Hibernate.

1. HibernateProxy.getHibernateLazyInitializer.getImplementation

Cast your objects as this proxy to find the expected class of your objects at runtime. I know it is not elegant but I have found myself in need of this information more than once.

You have probably seen the proxy classes; they look something like this:

    my.Person$$EnhancerByCGLIB$$114dd646

when what you really want is simply this:

    my.Person

2. @BatchSize(size = 100) instead of @Fetch(FetchMode.SUBSELECT)

The problem with FetchMode.SUBSELECT is that Hibernate blindly retrieves all the rows in the collection table, regardless of the size of the page set. BatchSize does not retrieve everything all at once, rather it optimizes the number of queries run when OneToMany collections are loaded for lists of objects. Note that the use-case case for this is one in which the collection of child objects must be loaded right away.

This also prevents the infamous n+1 dilemma encountered when no fetch strategy is specified.

For example, lets say you have Persons (parent) who own Cats (children) and you must list 10 Persons on the page along with the number of Cats owned by each Person. (person.cats.size) Of course you could just bite the bullet and let Hibernate run the 11 queries, that is not a problem. But what if you must list 500 Persons on the page? You don't want to run 500 queries. And you don't want to retrieve all the Cats in the Cat table, which is what happens with the FetchMode.SUBSELECT annotation.

By specifying the batch size, you are telling Hibernate to retrieve the Cats in batches, saving on queries. If you retrieve 10 Persons, and the batch size is set to 100, you will only run 2 queries; 1 to get the Persons and 1 to get the Cats. If you retrieve 200 Persons, and the batch size is 100, you will run 3 queries; 1 to get the Persons and 2 to get the Cats collections. Its a win-win.