Easily create a cryptographic MD5 hash in VB.NET

http://www.a1vbcode.com/vbtip-149.asp

Theoretically, this works.

Imports System.Text
Imports System.Security.Cryptography Private Function GenerateHash(ByVal SourceText As String) As String
'Create an encoding object to ensure the encoding standard for the source text
Dim Ue As New UnicodeEncoding()
'Retrieve a byte array based on the source text
Dim ByteSourceText() As Byte = Ue.GetBytes(SourceTStext)
'Instantiate an MD5 Provider object
Dim Md5 As New MD5CryptoServiceProvider()
'Compute the hash value from the source
Dim ByteHash() As Byte = Md5.ComputeHash(ByteSourceText)
'And convert it to String format for return
Return Convert.ToBase64String(ByteHash)
End Function

Move all windows to main screen in OS X

If you use an external monitor as a primary display for your laptop while using the laptop’s screen as a secondary display, you’ve probably run into the annoyance of having a bunch of windows stay on the secondary display when you plug in the primary.

AppleScript can help! I modified the script found here as follows. Save this as an application, run it, and it will move all application windows onto your primary display.

You do have to run it once in each virtual desktop if you use Spaces. If I actually knew AppleScript, I would fix this “bug.”

-- Example list of processes to ignore: {"xGestures"} or {"xGestures", "OtherApp", ...}
property processesToIgnore : {}

-- Get the size of the Display(s), only useful if there is one display
-- otherwise it will grab the total size of both displays
tell application "Finder"
        set _b to bounds of window of desktop
        set screen_width to item 3 of _b
        set screen_height to item 4 of _b
end tell

tell application "System Events"
        set allProcesses to application processes
        set _results to ""
        repeat with i from 1 to count allProcesses
                set doIt to 1
                repeat with z from 1 to count processesToIgnore
                        if process i = process (item z of processesToIgnore) then
                                set doIt to 0
                        end if
                end repeat
                
                if doIt = 1 then
                        tell process i
                                repeat with x from 1 to (count windows)
                                        set winPos to position of window x
                                        set _x to item 1 of winPos
                                        set _y to item 2 of winPos
                                        
                                        --if (_x  screen_width or _y > screen_height) then
                                        
                                        set position of window x to {0, 22}
                                        
                                        --end if
                                end repeat
                                
                        end tell
                end if
        end repeat
end tell

Bookmarklet for today's time report in Basecamp

javascript:var%20d=new%20Date();location.href='https://YOUR_URL.basecamphq.com/time_entries/report?subject_id=YOUR_SUBJECT_ID&from[month]='+(d.getMonth()+1)+'&from[day]='+d.getDate()+'&from[year]='+d.getFullYear()+'&to[month]='+(d.getMonth()+1)+'&to[day]='+d.getDate()+'&to[year]='+d.getFullYear()+'&commit=Create+report';
Replace YOUR_URL and YOUR_SUBJECT_ID with your Basecamp URL and the user’s ID of interest. You can get a user ID by running a custom time report for just that user in Basecamp. Look next to “subject_id” in the URL of the report.