Rixstep
 About | ACP | Buy | Industry Watch | Learning Curve | News | Products | Search | Substack
Home » Products » Reviews » The Very Ugly

Change Finder 0.4

You're a star.

You want to be a Hollywood star? Do like this. Catch a Greyhound or Trailways to LA; hitchhike from the terminal to Beverly Hills; take a seat at a bus stop on Rodeo Drive; and hang out there all day. You're a star.

You want to be a wizard open source programmer? Do like this. Get yourself a page at SourceForge. Take a simple OS X command line (or two but no more) and wrap it in Cocoa. Then post it at Apple's Unix and Open Source Downloads microsite. You're an open source programmer.

Here are the 'release notes' for Change Finder version 0.4. [You might remember something called Change Finder version 0.3. It's no coincidence.] Note that according to the currently accepted scheme this masterpiece is still in 'beta'. We have a long way to go until we're up to scratch and in 'production'.

Release Name: chgfndr-0.4

Notes: Readme Notes for Change Finder (Unix Name chgfndr) Change Finder (ver 0.4) consists of 2 wrapped shell scripts. CF-A is the script to change finder -all and CF-R is the script to change finder -regular. After unzipping the archive, place the folder anywhere you wish on your hard drive. That's it, you're done. Now anytime you want to use finder to view and open your hidden files such as .profile, .xinitrc, etc..., just double click the CF-A script wrapper and then double click the CF-R script wrapper to return to normal view. IMPORTANT NOTE: When you do a CF-A, you will notice icons are overlapped, especially in your home folder if you have a lot of dot (.) files. If you use 'Clean Up Selection' or otherwise change your view, be sure to do so again after using CF-R. Otherwise, the top of your Finder window will be empty and it will appear as if you lost your files. (You didn't, they are just further down in the window, below where the dot files were appearing.)

Changes: Change Log for Change Finder (Unix Name chgfndr) July 3, 2006 - first file released. July 5, 2006 - released version 0.2 with installation text. July 8, 2006 - released version 0.3 as double clickable applescripts. August 7, 2006 - released version 0.3.1 with added text files regarding using the application, specifically addressing using 'Clean Up Selection' with Change Finder. January 18, 2007- released version 0.4 as shell scripts with Platypus wrappers.

Platypus wrappers??!?? For a bloody command line??!?? Oh well. Now here are the two command lines - the 'open source'.

Following is the shell script for CF-A:

defaults write com.apple.finder AppleShowAllFiles TRUE&&killall Finder &

Following is the shell script for CF-R

defaults write com.apple.finder AppleShowAllFiles FALSE&&killall Finder &

So what is this 'open source application' trying to do?

It's trying to toggle Finder's 'show all files'. The above two commands do it. You can also do it by editing com.apple.finder.plist manually if you run Finder at all that is. [If you're smart and don't this isn't an issue.]

<key>AppleShowAllFiles</key>
<false/>
 <key>AppleShowAllFiles</key>
<true/>

Download

This 'product' has been downloaded over three thousand times. The latest update was 18 January 2007. It's 105 KB (107999 bytes - which makes it bigger than the entire CLIX download with a real program inside and with fifteen command files with over 1500 commands - this one has only two commands).

Let's download and take a look.

37 items, 262672 bytes, 648 blocks, 0 bytes in resource forks.
Change Finder/.DS_Store
Change Finder/CF-A.app
Change Finder/CF-A.app/Contents
Change Finder/CF-A.app/Contents/Info.plist
Change Finder/CF-A.app/Contents/MacOS
Change Finder/CF-A.app/Contents/MacOS/CF-A
Change Finder/CF-A.app/Contents/PkgInfo
Change Finder/CF-A.app/Contents/Resources
Change Finder/CF-A.app/Contents/Resources/.script
Change Finder/CF-A.app/Contents/Resources/appIcon.icns
Change Finder/CF-A.app/Contents/Resources/AppSettings.plist
Change Finder/CF-A.app/Contents/Resources/en.lproj
Change Finder/CF-A.app/Contents/Resources/en.lproj/InfoPlist.strings
Change Finder/CF-A.app/Contents/Resources/en.lproj/MainMenu.nib
Change Finder/CF-A.app/Contents/Resources/en.lproj/MainMenu.nib/classes.nib
Change Finder/CF-A.app/Contents/Resources/en.lproj/MainMenu.nib/info.nib
Change Finder/CF-A.app/Contents/Resources/en.lproj/MainMenu.nib/keyedobjects.nib
Change Finder/CF-A.app/Contents/Resources/script
Change Finder/CF-R.app
Change Finder/CF-R.app/Contents
Change Finder/CF-R.app/Contents/Info.plist
Change Finder/CF-R.app/Contents/MacOS
Change Finder/CF-R.app/Contents/MacOS/CF-R
Change Finder/CF-R.app/Contents/PkgInfo
Change Finder/CF-R.app/Contents/Resources
Change Finder/CF-R.app/Contents/Resources/.script
Change Finder/CF-R.app/Contents/Resources/appIcon.icns
Change Finder/CF-R.app/Contents/Resources/AppSettings.plist
Change Finder/CF-R.app/Contents/Resources/en.lproj
Change Finder/CF-R.app/Contents/Resources/en.lproj/InfoPlist.strings
Change Finder/CF-R.app/Contents/Resources/en.lproj/MainMenu.nib
Change Finder/CF-R.app/Contents/Resources/en.lproj/MainMenu.nib/classes.nib
Change Finder/CF-R.app/Contents/Resources/en.lproj/MainMenu.nib/info.nib
Change Finder/CF-R.app/Contents/Resources/en.lproj/MainMenu.nib/keyedobjects.nib
Change Finder/CF-R.app/Contents/Resources/script
Change Finder/chgfndr source
Change Finder/Readme

Wow. That takes a walloping 324 KB on disk. For two command lines? 324 KB for two command lines? Someone lost a sense of proportion here? As in 'really lost it'?

Let's look at some of the ugly stuff.

  • There's a .DS_Store. Of course there is.
  • There are two 'Cocoa bundles': CF-A.app and CF-R.app. The one toggles Finder to show all files and the other restores default behaviour.
  • Both bundles have a useless and empty file called .script. Empty as in 'zero bytes'. Useless as in 'empty'.
  • Each bundle has its own icon.
  • Each bundle has an identical 'AppSettings.plist'.
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
    "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>Creator</key>
        <string>Platypus-3.2</string>
        <key>EncryptAndChecksum</key>
        <false/>
        <key>IsDroppable</key>
        <false/>
        <key>OutputType</key>
        <string>None</string>
        <key>RemainRunningAfterCompletion</key>
        <false/>
        <key>RequiresAdminPrivileges</key>
        <false/>
        <key>ScriptInterpreter</key>
        <string>/bin/sh</string>
    </dict>
    </plist>
  • Then we have the scripts themselves. Note the cute use of the logical AND operator. Not that it accomplishes much - it's always cool to kill Finder.

    #!/bin/sh
    defaults write com.apple.finder AppleShowAllFiles TRUE&&killall Finder &
    #!/bin/sh
    defaults write com.apple.finder AppleShowAllFiles FALSE&&killall Finder &
  • The InfoPlist.strings files tell us who the author is.
    CFBundleName = "CF-A";
    CFBundleShortVersionString = "0.4";
    CFBundleGetInfoString = "CF-A version 0.4 Copyright 2007 Jeff Tutt";
    NSHumanReadableCopyright = "Copyright 2007 Jeff Tutt.";

Time to look at the NIBs. We need only look at one because the two are identical. [You sorta knew that, didn't you?]

This is like a cartoon.




Also of note: the author's using the nonstandard 'en.lproj' instead of 'English.lproj' and using a directory at all when there's no localisation.

Now it's time to look at the executables.

$ file CF-A
CF-A: Mach-O executable ppc
$ file CF-R
CF-R: Mach-O executable ppc

Oops! Didn't version 0.3 have universals? Oh well - one step forward and two miles back. So how big are they?

$ ls -l CF-A
-rwxr-xr-x   1 rixstep  staff  58272 Jan 19 01:46 CF-A
$ ls -l CF-R
-rwxr-xr-x   1 rixstep  staff  58272 Jan 19 01:46 CF-R

Oops! Same size??!?? Are they identical? Tell us they're not! Please!

$ cmp CF-A.app/Contents/MacOS/CF-A CF-R.app/Contents/MacOS/CF-R
$

Ouch! They are identical! What's inside? (We need to check only one. Haha.)

0000000000000960 /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa
00000000000009b4 /System/Library/Frameworks/Security.framework/Versions/A/Security
0000000000000a10 /usr/lib/libSystem.B.dylib
0000000000000a3f P/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa
0000000000000a97 X/System/Library/Frameworks/Security.framework/Versions/A/Security
0000000000000af7 0/usr/lib/libSystem.B.dylib
0000000000000bd7 T/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
0000000000000c33 \/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
0000000000000c97 d/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
0000000000000d03 P/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit
0000000000000d5b </usr/lib/system/libmathCommon.A.dylib
0000000000000d9f l/System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices
0000000000000e14 /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox
0000000000000e9b ,/usr/lib/libz.1.dylib
0000000000000ed0 /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SpeechRecognition.framework/Versions/A/SpeechRecognition
0000000000000f67 `/System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox
0000000000000fcf X/System/Library/Frameworks/AudioUnit.framework/Versions/A/AudioUnit
000000000000102f t/System/Library/PrivateFrameworks/DesktopServicesPriv.framework/Versions/A/DesktopServicesPriv
00000000000010ab 0/usr/lib/libxml2.2.dylib
00000000000010e3 `/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices
000000000000114b l/System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration
00000000000011c3 0/usr/lib/libicucore.A.dylib
00000000000011fb 0/usr/lib/libobjc.A.dylib
0000000000001233 T/System/Library/PrivateFrameworks/Bom.framework/Versions/A/Bom
0000000000001290 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE
0000000000001318 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS
00000000000013a0 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSync.framework/Versions/A/ColorSync
0000000000001434 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics
00000000000014d0 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore
0000000000001564 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD
00000000000015ec /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LangAnalysis.framework/Versions/A/LangAnalysis
0000000000001688 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices
0000000000001720 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthe
00000000000017c0 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/FindByContent.framework/Versions/A/FindByContent
000000000000185c /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchService
00000000000018fc /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/CarbonSound.framework/Versions/A/CarbonSound
0000000000001987 l/System/Library/PrivateFrameworks/DiskArbitration.framework/Versions/A/DiskArbitration
00000000000019fc /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/Resources/libCG
0000000000001a7c ATS.A.dylib
0000000000001aa4 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/Resources/libCS
0000000000001b24 ync.A.dylib
0000000000001b4c /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/Resources/libPD
0000000000001bcc FRIP.A.dylib
0000000000001bf8 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/Resources/libPS
0000000000001c78 RIP.A.dylib
0000000000001ca0 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/Resources/libRI
0000000000001d20 P.A.dylib
0000000000001d47 X/System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio
0000000000001da7 T/System/Library/Frameworks/vecLib.framework/Versions/A/vecLib
0000000000001e03 0/usr/lib/libiconv.2.dylib
0000000000001e3c /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore
0000000000001ecc /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices
0000000000001f64 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CFNetwork.framework/Versions/A/CFNetwork
0000000000001ff4 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/WebServicesCore.framework/Versions/A/WebServicesCore
0000000000002090 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit
000000000000211f ,/usr/lib/libbsm.dylib
0000000000002153 0/usr/lib/libcups.2.dylib
000000000000218b 4/usr/lib/libcrypto.0.9.7.dylib
0000000000002214 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvMisc.dylib
00000000000022a4 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvDSP.dylib
0000000000002330 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
00000000000023bc /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib
000000000000244b 0/usr/lib/libresolv.9.dylib
0000000000002483 0/usr/lib/libssl.0.9.7.dylib
00000000000096fc Quit %@
0000000000009704 About %@
0000000000009710 Hide %@
0000000000009718 /tmp/pltpsTmpSecureScptFile
0000000000009734 Authorization for script execution failed - Error %d
000000000000976c Error %d occurred when attempting to run AuthorizationExecuteWithPrivileges. Terminating...
00000000000097c8 Quit
00000000000097d4 Task completed
00000000000097e4 AppSettings.plist
00000000000097f8 script
0000000000009800 .script
0000000000009808 Corrupted app bundle
0000000000009820 Vital configuration and script files were missing from the application bundle.
0000000000009870 OutputType
000000000000987c ProgressBar
0000000000009888 TextWindow
0000000000009894 RequiresAdminPrivileges
00000000000098ac RemainRunningAfterCompletion
00000000000098cc EncryptAndChecksum
00000000000098e0 ScriptInterpreter
00000000000098f4 ScriptChecksum
0000000000009904 Invalid Checksum
0000000000009918 The script checksum does not match, which indicates that the script for this application is either corrupt or has been tampered
0000000000009998 with
00000000000099a0 /tmp/
00000000000099a8 Unable to write temporary files
00000000000099c8 Could not write to the /tmp/ directory.  Make sure this directory exists and that you have write privileges.
0000000000009a3c ScriptExecController
0000000000009a54 NSObject
0000000000009a60 /System/Library/Frameworks/AppKit.framework/Headers/NSEvent.h
0000000000009aa0 NSMutableArray
0000000000009ab0 NSString
0000000000009abc NSFont
0000000000009ac4 SillyStringEncrypt
0000000000009ad8 NSBundle
0000000000009ae4 NSTask
0000000000009aec NSPipe
0000000000009af4 NSNotificationCenter
0000000000009b0c NSTimer
0000000000009b14 NSApplication
0000000000009b24 NSFileHandle
0000000000009b34 NSFileManager
0000000000009b44 NSDictionary
0000000000009b54 STChecksum
0000000000009b60 NSAlert
0000000000009b68 cancelButton
0000000000009b78 messageTextField
0000000000009b8c progressBar
0000000000009b98 progressWindow
0000000000009ba8 textOutputWindow
0000000000009bbc textOutputCancelButton
0000000000009bd4 textOutputTextField
0000000000009be8 textOutputProgressIndicator
0000000000009c04 hideMenuItem
0000000000009c14 quitMenuItem
0000000000009c24 aboutMenuItem
0000000000009c34 task
0000000000009c3c outputPipe
0000000000009c48 readHandle
0000000000009c54 outputStr
0000000000009c60 arguments
0000000000009c6c fileArgs
0000000000009c78 interpreter
0000000000009c84 scriptPath
0000000000009c90 hiddenScriptPath
0000000000009ca4 appName
0000000000009cac execStyle
0000000000009cb8 outputType
0000000000009cc4 isDroppable
0000000000009cd0 remainRunning
0000000000009ce0 encryptAndChecksum
0000000000009cf4 childPid
0000000000009d00 isTaskDone
0000000000009d0c isTaskStarted
0000000000009d1c authorizationRef
0000000000009d30 fatalAlert:subText:
0000000000009d44 cancel:
0000000000009d4c loadSettings
0000000000009d5c applicationShouldTerminate:
0000000000009d78 application:openFile:
0000000000009d90 getData:
0000000000009d9c taskFinished
0000000000009dac checkPrivilegedTaskStatus
0000000000009dc8 executeScriptWithPrivileges
0000000000009de4 checkTaskStatus
0000000000009df4 executeScript
0000000000009e04 applicationDidFinishLaunching:
0000000000009e24 dealloc
0000000000009e2c init
0000000000009e34 alloc
0000000000009e3c initWithCapacity:
0000000000009e50 release
0000000000009e58 stringWithFormat:
0000000000009e6c setTitle:
0000000000009e78 setUsesThreadedAnimation:
0000000000009e94 startAnimation:
0000000000009ea4 center
0000000000009eac makeKeyAndOrderFront:
0000000000009ec4 userFixedPitchFontOfSize:
0000000000009ee0 setFont:
0000000000009eec stringWithContentsOfFile:
0000000000009f08 sillyDecryptString:
0000000000009f1c writeToFile:atomically:
0000000000009f34 addObject:
0000000000009f40 mainBundle
0000000000009f4c bundlePath
0000000000009f58 count
0000000000009f60 addObjectsFromArray:
0000000000009f78 pipe
0000000000009f80 setStandardOutput:
0000000000009f94 setStandardError:
0000000000009fa8 fileHandleForReading
0000000000009fc0 defaultCenter
0000000000009fd0 addObserver:selector:name:object:
0000000000009ff4 readInBackgroundAndNotify
000000000000a010 setLaunchPath:
000000000000a020 setArguments:
000000000000a030 launch
000000000000a038 scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:
000000000000a07c isRunning
000000000000a088 getCString:maxLength:
000000000000a0a0 objectAtIndex:
000000000000a0b0 sharedApplication
000000000000a0c4 terminate:
000000000000a0d0 initWithFileDescriptor:
000000000000a0e8 defaultManager
000000000000a0f8 fileExistsAtPath:
000000000000a10c removeFileAtPath:handler:
000000000000a128 setKeyEquivalent:
000000000000a13c stopAnimation:
000000000000a14c setStringValue:
000000000000a15c object
000000000000a164 userInfo
000000000000a170 objectForKey:
000000000000a180 length
000000000000a188 initWithData:encoding:
000000000000a1a0 autorelease
000000000000a1ac string
000000000000a1b4 stringByAppendingString:
000000000000a1d0 setString:
000000000000a1dc scrollRangeToVisible:
000000000000a1f4 terminate
000000000000a200 pathForResource:ofType:
000000000000a218 executablePath
000000000000a228 lastPathComponent
000000000000a23c dictionaryWithContentsOfFile:
000000000000a25c isEqualToString:
000000000000a270 boolValue
000000000000a27c doesFileMatchChecksumString:checksumString:
000000000000a2a8 isWritableFileAtPath:
000000000000a2c0 addButtonWithTitle:
000000000000a2d4 setMessageText:
000000000000a2e4 setInformativeText:
000000000000a2f8 setAlertStyle:
000000000000a308 runModal
000000000000a318 @"NSTask"
000000000000a324 @"NSPipe"
000000000000a330 @"NSFileHandle"
000000000000a340 @"NSString"
000000000000a34c @"NSMutableArray"
000000000000a368 ^{AuthorizationOpaqueRef=}
000000000000a384 v16@0:4@8@12
000000000000a394 v12@0:4@8
000000000000a3a0 v8@0:4
000000000000a3a8 i12@0:4@8
000000000000a3b4 c16@0:4@8@12
000000000000a3c4 @8@0:4
000000000000a3cc /usr/bin/cksum
000000000000a3e0 File %@ is a folder
000000000000a3f4 File %@ does not exist
000000000000a40c NSArray
000000000000a414 isFileValidForChecksum:
000000000000a42c doesFileMatchChecksum:checksum:
000000000000a44c getChecksumForFileAsString:
000000000000a468 getChecksumForFile:
000000000000a47c intValue
000000000000a488 arrayWithObjects:
000000000000a49c readDataToEndOfFile
000000000000a4b0 componentsSeparatedByString:
000000000000a4d0 fileExistsAtPath:isDirectory:
000000000000a4f0 c12@0:4@8
000000000000a4fc c16@0:4@8l12
000000000000a50c @12@0:4@8
000000000000a51c sillyEncryptString:
000000000000a530 spaceNewlineDeobfuscate:
000000000000a54c spaceNewlineObfuscate:
000000000000a564 rot13:
000000000000a56c getCharacters:
000000000000dfb8 -[ScriptExecController init]
000000000000dfd5 -[ScriptExecController dealloc]
000000000000dff5 -[ScriptExecController applicationDidFinishLaunching:]
000000000000e02c -[ScriptExecController executeScript]
000000000000e052 -[ScriptExecController checkTaskStatus]
000000000000e07a -[ScriptExecController executeScriptWithPrivileges]
000000000000e0ae -[ScriptExecController checkPrivilegedTaskStatus]
000000000000e0e0 -[ScriptExecController taskFinished]
000000000000e105 -[ScriptExecController getData:]
000000000000e126 -[ScriptExecController application:openFile:]
000000000000e154 -[ScriptExecController applicationShouldTerminate:]
000000000000e188 -[ScriptExecController loadSettings]
000000000000e1ad -[ScriptExecController cancel:]
000000000000e1cd -[ScriptExecController fatalAlert:subText:]
000000000000e1f9 +[STChecksum getChecksumForFile:]
000000000000e21b +[STChecksum getChecksumForFileAsString:]
000000000000e245 +[STChecksum doesFileMatchChecksum:checksum:]
000000000000e273 +[STChecksum doesFileMatchChecksumString:checksumString:]
000000000000e2ad +[STChecksum isFileValidForChecksum:]
000000000000e2d3 +[SillyStringEncrypt rot13:]
000000000000e2f0 +[SillyStringEncrypt spaceNewlineObfuscate:]
000000000000e31d +[SillyStringEncrypt spaceNewlineDeobfuscate:]
000000000000e34c +[SillyStringEncrypt sillyEncryptString:]
000000000000e376 +[SillyStringEncrypt sillyDecryptString:]

Wow! There sure is a lot of funky stuff inside! Stuff like 'SillyStringEncrypt' and 'rot13:' and 'sillyEncryptString:'. And all this - for two measly command lines? Maybe we'd better run one of these suckers and see what they're up to. Another cartoon - but this time more like «Преступление и наказание».




So!

  • Anybody see a menu?
  • Anybody see anything?
  • Anybody see the progress bar?.
  • Anybody see the text window?
  • WTF was that shit anyway?
  • This is open source? And the scripts aren't even syntactically correct?
  • We double-clicked one freaking Cocoa bundle to run an embedded command line of either 83 or 84 bytes. People somewhere must be really stupid.
  • We couldn't even use one bundle instead of two and have a switch for the one toggle and another switch for the other toggle.
  • We couldn't even read the current status of the toggle.
  • WTF did we have the bundles with their menus, progress bars, and windows for? Who wrote this piece of shit? And where's the source code if this is open source? Is there any code?

Two sides of the same wooden nickel. On the one side we have a programming wannabe who picked up a book on Beige Box BASIC™, found himself tutt-ally fascinated, and decided to embark on a career as a software engineer.

Now flip the coin over. This platform known as OS X is used at Los Alamos. And NASA. And the Pentagon. And thousands of universities around the world. Just look at this page. And now these people are going to wander over to Apple's website and see 'Change Finder' listed under Apple's meagre 'open source' resources.

What are they going to think?

PS. If you do sit at the bus stop on Rodeo Drive be careful you don't get picked up for vagrancy. And don't forget you have to find a place to sleep for the night and no the bus stop on Rodeo Drive is not a good place to do that.

PPS. If you decide to try to get a job in one of the boutiques and they tell you «we're sorry we don't want any more stuff» it's not that they think you're a drug dealer - they're telling you they're not hiring on any more employees.

PPPS. If you really want to be an open source programmer and you initially run into trouble like this make a new version - there are always a few thousand unwitting fools around. [They're just not at Los Alamos or NASA.]

PPPPS. If you see a guy making espressos with a lemon twist, that's Serge. Say hello. And if you see two girls folding scarves, that's Romi and Michele. Say hello. And tell them yes, CLIX already has the commands anyway.

About | ACP | Buy | Industry Watch | Learning Curve | News | Products | Search | Substack
Copyright © Rixstep. All rights reserved.