Friday, June 23, 2017

Trying out Git Subtree

Currently I have 5 projects on my computer which use WinLamb library. So far I’ve been keeping copies of the library directory on each project; these directories are kept in sync with FreeFileSync Portable. Although this approach works, it’s very cumbersome.

Since each project is versioned as a Git repository, and WinLamb itself is a Git repository on GitHub, I started searching for an alternative, and I choose Subtree over Submodule. Following is a summary of the commands I needed to do on my Windows 7 x64, using Git portable v2.13.1:

1. Remote

Add a remote with the path to the repository of the shared project:

git remote add otherproj --no-tags git@github.com:username/otherproj.git

Or if a local project:

git remote add otherproj --no-tags d:/stuff/otherproj

You can view the remotes with:

git remote -v

2. Subtree

Run the Subtree command:

git subtree add --prefix otherproj otherproj master --squash

This will copy the library into the subdirectory and create a commit, with the hash in the message. It’s unnecessary, but you can provide a custom message for the subtree commit:

git subtree add --prefix otherproj otherproj master --squash -m "Subtreeing otherproj."

3. Updating

To update your project with new library code:

git subtree pull --prefix otherproj otherproj master --squash

This leads us to a nice bash function to our ~/.bashrc file:

function gitsubtreepull { git subtree pull --prefix $1 $1 master --squash; }

Which eases our life when updating our Subtree library:

gitsubtreepull otherproj

So far this approach seems to the better than the old-fashioned directory sync, although it still feels a bit “loose”. I’m still avoiding pushing code from the local repository to the shared library; if I change something, I just copy the code to there, then I update the library repository itself.

Note: beware amending a commit on the remote library. The next time you try to update the dependency, it’s likely to get lost, and you’ll have to remove the subtree and add it again.

Tuesday, April 4, 2017

After 4 years, SRTEd 1.3.0

So finally I released a new version of SRTEd, my own subtitles editor. Honestly, in these four years I didn’t see a better subtitle editor, I still think it’s the most user-friendly editor out there.

The interface didn’t improve much, but there are many bugfixes and minor UI adjusts. It took so long because I entirely rewrote it using my new Win32 library, which I expect to release as open source soon, together with an article explaining what it is and how to take the best out of it.

It can be downloaded from CNET or Softpedia.

Sunday, March 19, 2017

Remembering Randy Rhoads

Randy Rhoads last day was March 19, 1982, 35 years ago today. After influencing so many guitarists, I just want to leave this humble tribute here. I’ve played “Crazy Train” in bands in the past, and it was always a lot of fun.



After publishing the video, I realized the guitar track was a bit too loud in the mix. Well, too late, but not too bad.

I used my Suhr Modern Satin, with Suhr SSV/SSH+ (neck/bridge) pickups, and the POD HD500X connected via USB. After using Billy Gibbons’ .007 signature gauge set exclusively for about one year and a half, I tried the D’Addario EXL130 set again, however with a .012 for the G, as I found on my graphic string tension calculator. It feels very balanced now. I don’t know if I’ll use this custom .008 set on all guitars, but I’m keeping it on the Suhr, at least.

Tuesday, February 28, 2017

A graphic string tension calculator for guitar

I was assembling a custom string set for my guitar, and for that I needed to calculate the tensions of the string gauges, according to the scale length. Although I found a couple string tension calculators online, pretty much all of them had terrible usability. So I decided to write my own string tension calculator, with the best usability I could think of as an user.

It’s hosted on GitHub Pages: https://rodrigocfd.github.io/string-tension-calc/

I also made it open source on my GitHub account, and I hope to make further improvements.

Saturday, November 19, 2016

Fixing bad font rendering on Chrome 54

I’ve been using Google Chrome browser on Windows 7 x64 these days, and it annoyed me how bad the fonts were being rendered. Too light and somewhat pixelated. After a quick search I found some tips, with most fixes revolving around the LCD antialiasing setting, which didn’t work for me. What did the magic was actually installing and configuring an extension named Font Rendering Enhancer.

This extension has only one setting: “font width”. After adjusting it to “50”, voilà, the fonts started looking good. And, of course, allowing it to work in incognito mode.

Friday, October 28, 2016

Clean tones of Ibanez JPM100 P2

I recorded an improvisation of my 1997 Ibanez JPM100 P2, which has DiMarzio Crunch Lab + LiquiFire instead of the stock DiMarzio Steve’s Special + Air Norton. The previous owner did the replacement, and I kept it because it sounds crazy good. In fact, these new pickups sound very similar to the original ones, but with more gain.

I used my POD HD500X straight into the computer and a set of .007 Dunlop Rev. Willy's Lottery strings.

Monday, September 12, 2016

Visual Studio Code slow startup on Linux

Recently I’ve been having a problem with Visual Studio Code, current version 1.5.2, on Linux. The program startup was too slow. I mean, the absurd of waiting over 40 minutes from the doubleclick until I see the window!

I discovered that there are two executables within the VSCode package: one at the root directory, and other inside “bin” subdir. The outer seems to be a wrapper to the inner, since I made a test and ran the inner executable alone... and bang, VSCode started in about 3 seconds – not an example of quick startup, but acceptable.

So I redirected my shortcut to point directly to the executable inside “bin” subdirectory. Whatever the outer executable does, it’s clearly buggy.

Tuesday, August 23, 2016

Visual Studio Code keyboard shortcuts

These days I’ve been using Visual Studio Code at work. It’s a nifty editor written in NodeJS. Being a Visual C++ user, however, I missed some keyboard shortcuts I like to use. To remedy this, I customized the “keybindings.json” file to make it more familiar. To use it, go File → Preferences → Keyboard Shortcuts.


As a meta side node, this is the first time I use GitHub’s Gist to share code of mine.

Sunday, May 1, 2016

Git .gitignore file to Visual C++ 2015 Update 2

After upgrading my Visual C++ 2015 from Update 1 to Update 2, I noticed that a new file appeared in the root directory of the projects I was opening. The file was always named ProjectName.VC.db. Indeed according to the release notes, a new SQLite-based database engine is now being used by default, and that’s the file where the database is stored. The old file, named ProjectName.sdf is now unused and can be safely deleted.

The change also demanded an update on my .gitignore files to also ignore this new database file, and here it goes:
Debug/
Release/
*.aps
*.db
*.ffs_db
*.ncb
*.opensdf
*.rar
*.sdf
*.suo
*.user
*.VC.opendb
TODO.txt
If you import and old .vssettings file, however, the option to use the new SQLite-based database can be rolled back to the old .sdf files. To manually change it, go to: Tools → Options → Text Editor → C/C++ → Advanced → Browsing/Navigation → Enable New Database Engine. Set it to “true”.

Wednesday, March 23, 2016

Disabling C++ exceptions in Visual Studio 2015

When using the STL with Visual Studio 2015 – and older versions, probably –, C++ exceptions are enabled by default. To view the options specified below, first add at least one CPP file to your project.

The first thing to change on the project settings is under C/C++ code generation, enable C++ exceptions: set this to “no”.

Then, on the project settings, C/C++ preprocessor, to each configuration and platform individually, add the following preprocessor definition:
_HAS_EXCEPTIONS=0
This way you’ll be able to use the STL without the C++ exception handling mechanism.

Saturday, March 5, 2016

Clean tones of PRS Custom 24

This is the most beautiful sounding guitar I’ve ever owned or played, possibly. Being a hardcore superstrat player, I’m having a hard time adapting to the radiused fretboard and the unbalanced body shape – not unbalanced as a Les Paul, but definitely butt-heavy.

So I recorded this improvisation using the POD HD500X looper. I see myself selling this guitar soon: that’s how I want to remember it.



The video was recorded with the great Samsung Galaxy S6, in 1080p and 60 fps.

Wednesday, December 30, 2015

Evernote abandons C# in favor of C++

It’s with a feeling of “I knew it already” that I read this note, from 2010, where Evernote team abandons C# and rewrite the whole thing from scratch in C++. It’s not that C++ is a good language – it’s awful – but the point is that this whole managed code hype destroys any hopes of performance one may have. I’ve seen benchmarks comparing raw loops and things that doesn’t matter, when in fact the problem is the huge runtime needed for these programs to run, which slows everything down and eats a lot memory. The point is that managed programs, specially WPF stuff that Evernote used, just can’t beat native ones.

Technically, C# is a beautifully designed language, but in real world its programs are slow and sluggish. C++ is a horrible language, but being compiled directly to native code, generates optimized programs. Evernote guys just realized that.