/dev/trouble
Eric Roller's Development Blog

Google Search Tips

- Posted in General by

Added this blog post to get that piece of scrap paper off my desk and also to remember these tips by means of typing them in.

apples oranges Search for pages with both apples and oranges.

apples OR oranges -worms Either or, not others.

"candied apples" Exact phrase.

+fruit filetype:ppt Only the exact word, in PowerPoint presentations.

~fruit site:meals.com Include synonyms, but only on that site.

define:egoism Search after definitions.

BMW 318...328 Search for ranges, e.g. not the bad 316 model.

link:macworld.com Search after sites linking to macworld.com.

info:www.apple.com/se Show information about apple.se.

related:cdon.com Search for similar sites.

**mac*** All words beginning with mac, e.g. macworld, macintosh.

ARN BSL Search for routes between airports.

Harry Potter For books with harry potter, select the book icon.

stocks:AAPL Stock information.

weather Stockholm Search for weather information.

time Cupertino Get the current time for other places.

sunrise Kuusamo Get the sunrise times, try also "sunset".

5*9+(sqrt 10)^3= Evaluate calculations.

10.5 cm in inches Unit conversions.

66 GBP in EUR Currency conversions.

**Shakespeare wrote *** Let Google fill in the blanks.

P.S. Of course, Google has its own help page on this topic.

We can use iTunes to play music while we do circuit training, i.e. 40 seconds music while we work out, and 15 seconds pause while we rest or go to the next station:

  • save the following AppleScript in ~/Library/iTunes/Scripts; you will probably have to create the Scripts directory;
  • open iTunes with a suitable playlist; we recommend a good song and a Genius playlist;
  • select the first song;
  • launch the script from Scripts menu.

NB. This is an updated version of a previous script.

(* AppleScript for circuit training with iTunes.
The default circuits are 40 seconds each, with pauses of 15 seconds.
At the beginning, the script allows you to set different times.
After every second set, iTunes is asked to go to the middle section
of the next song.

version 2.1, ©2010, Eric Roller
*)

property wCount : 40
property tWork : 40
property tRest : 20
property tFudge : 1.0 -- use this to adjust the rest times

on run
    -- begin by asking for the workout and delay times
    set wCount to askUser("Number of Workouts", wCount)
    set tWork to askUser("Workout Time in Seconds", tWork)
    set tRest to askUser("Rest Time in Seconds", tRest)
   
    -- whether to skip to the next song, but only every other time
    set skip to false
    set remaining to wCount
   
    try
        with timeout of 6000 seconds
            -- enter the workout loop
            repeat while (remaining > 0)
                announceCount(remaining, wCount)
                -- wait, play the music, wait and then stop it again
                sleepFor(tRest, "Rest")
                tell application "iTunes" to play
                sleepFor(tWork, "Workout")
                tell application "iTunes" to pause

                if skip is true then
                    -- every other time, change the track
                    tell application "iTunes" to next track

                    -- skip to the middle section of the next track
                    set tForward to trackSeconds() / 2 - tWork
                    tell application "iTunes" to ¬
                        set the player position to tForward
                end if
                set skip to not skip
                set remaining to remaining - 1
            end repeat
        end timeout
    on error errText number errNum
        if errNum is not -128 then ¬
            display dialog "Error: " & errNum & return & errText
    end try
   
    -- finish by pausing iTunes
    tell application "iTunes" to stop

    -- work out how many iterations we did
    set remaining to wCount - remaining
    if remaining is greater than 0 then ¬
        say "Well done! You completed " & (remaining as text) ¬
        & " workouts."
end run

-- small helper to ask the user for an integer
on askUser(aText, aDefault)
    set anInt to the text returned of ¬
        (display dialog "Set the " & aText default answer aDefault)
    return (anInt as integer)
end askUser

-- helper to announce how many more workouts there are
on announceCount(aCount, maxCount)
    if aCount = maxCount then
        set message to "Starting " & (aCount as text) & " workouts."
    else if aCount = 1 then
        set message to "Last one."
    else if ((2 * aCount) as integer = maxCount) then
        set message to "Half time."
    else if (random number from -1.0 to 1.0) > 0.0 then
        set message to (aCount as text) & " more"
    else
        set message to (aCount as text) & " to go"
    end if
    delay (tFudge / 2)
    say message without waiting until completion
end announceCount

-- helper to wait for a given amount of seconds
on sleepFor(tDelay, workType)
    set tOut to tDelay
    -- apply a fudge factor for the rest times
    if workType is "Rest" then set tOut to tDelay - tFudge
    -- we use a dialog message with a delay
    set answer to display dialog (tDelay as text) & " Seconds " ¬
        & workType buttons "Stop" with title "Circuits Loop"  ¬
        giving up after tOut
    -- trigger an error if we want to stop
    if the button returned of the answer is "Stop" then ¬
        error "User canceled." number -128
end sleepFor

-- helper to determing the length of the current track in seconds
on trackSeconds()
    -- ask iTunes for the track length (MM:SS)
    tell application "iTunes" to get the time of the current track
    set the tLength to the result

    -- split the length into minutes and seconds
    set saveDeli to AppleScript's text item delimiters
    set AppleScript's text item delimiters to {":"}
    set tMinutes to the first text item of the tLength
    set tSeconds to the last text item of the tLength
    set AppleScript's text item delimiters to saveDeli

    -- add up the total length in seconds
    return (tSeconds + 60 * tMinutes)
end trackSeconds

Symptoms: When 'mounting' the external disk, shared over the AirPort Extreme WiFi network, it is not added to the Finder's sidebar; instead, you get an error like this:

The alias can't be opened because the original item can't be found.

Also, dragging the disk icon from the SHARED section in Finder's sidebar to the DEVICES section is not possibe; the Finder just displays a "can't drop it here" icon.

Searching online, I found a discussion on Apple's forums which contained the solution.

Fixing permissions with Disk Utility was not an option since a network-shared disk is not accessible within the app.

Apparently, the disk acquired an "alias" attribute by mistake. This can be checked in the Terminal, where the alias attribute is the capital 'A':

% /usr/bin/GetFileInfo /Volumes/AirDisk
directory: "/Volumes/AirDisk"
attributes: Avbstclinmedz

You can use the following command to turn the alias attribute off (then check again with the above GetFileInfo command and look for a lowercase 'a'):

% /usr/bin/SetFile -a a /Volumes/AirDisk

After that, the mounting problem disappeared.