This Technote discusses changes and corrections in the next generation of Mac OS: Mac OS 9. This system follows Mac OS 8.6 and contains several enhancements and revised features.
All developers interested in creating products compatible with Mac OS 9 will want to review this document.
Mac OS 9 can be installed on any Macintosh that originally shipped with a PowerPC processor that has at least 32 megabytes of physical RAM and a minimum of 40 megabytes of logical RAM (virtual memory is set to 64 by default if there is less than 64 megabytes of physical RAM installed).
For installation on 6100, 7100, and 8100 models, the computer must be booted from the Mac OS 9 installation CD.
The "Install Mac OS" application program requires System 7.1.2 or later to run, allowing users to install the full CD-ROM system installation of Mac OS 9 over System 7.1.2 or later. Users running Mac OS 7.5.1 or earlier are required to boot from the CD to perform an installation.
The installer script for Mac OS 9 supports the concept of "Feature Sets" that allow users to select different kinds of installations beyond "for this computer" and "universal." These new installation types are tailored to suit the needs of particular interest groups such as, for example, Education, Business, or Gaming.
The Finder provides a graphical interface for the user along with other Apple event-based services for applications utilizing the file system.
Adds support for copying files over 2GB in size (up to a theoretical limit of 263 bytes in size) and displaying information about them in Get Info windows.
Long unicode file names are now preserved in file copies.
Volumes which don't support the Desktop Manager (typically floppy disk volumes) with large "Desktop" files now mount much faster.
The Finder creates an invisible folder called "TheVolumeSettingsFolder" on each writable disk, which it uses to keep track of information about open window positions, desktop printers, and other items.
When the Finder attempts to open an item inside of a package's folder, it sends an 'odoc' event containing a list of documents to open. The difference here is the document list is stored in an optional parameter with the key 'fpdl' (Finder package document list).
In the Finder interface, packages behave identically to applications even though they are stored as folders. The internal contents of packages are hidden from the user.
If an alias is created to an item in a package (say, while using an earlier system version) and the user attempts to open the alias, then it will be passed to the package's application using an 'odoc' event with an optional 'fpdl' parameter (even if the application's 'BNDL' does not list the file type).
An Encrypt item has been added to the File menu. When selected this item will launch the "Apple File Security" utility, passing the selected documents to it for encryption. Files encrypted in this way can be decrypted by double-clicking on their icons. Note: Apple File Security cannot encrypt a folder (even if it is a package).
The Mac OS 9 Finder does not allow icon positioning by way of AppleScript for icons appearing in icon views where either the "keep arranged" or the "snap to grid" option is turned on. If a script attempts to set the position of an icon in such a view, the Finder will return error code number -15274 (window wrong type).
In Mac OS 9, Apple Guide is used to coach users through sequences of commands required to perform a task.
For both versions 2.3.1 and 2.4.1 of Apple Guide, the Gestalt version selector for Apple Guide returns 2.3.1. For Apple Guide 2.5, the Gestalt selector 'ag_v' returns 2.5.
The ability to search locally for Internet-based Help content, and then launch a web browser to view it.
Apple Data Security introduces security features to the Mac OS. New security features include facilities for signing and verification of file signatures, password maintenance, and file cryptography.
Apple Code Signing is a new technology in Mac OS 9 that allows applications, plug-ins, and content to be signed by developers. Apple Code Signing Certificates assure your customers of your identity and the integrity of your products. For more information, please see the Mac OS Security and Cryptography Web site.
Apple File Security provides cryptographic facilities. Users can use this application to either encrypt a file with a password or decrypt an encrypted file. The Finder's Encrypt menu item is dependent upon the Apple File Security application residing within the Applications folder. Apple File Security does not have the ability to compress and encrypt a folder. This precludes it from encrypting a package.
CMS is a high-level digital signature API. For more information about CMS, refer to the Cryptographic Message Syntax Standard documentation provided by RSA Laboratories, and for information about the APIs provided in Apple's implementation, refer to the documentation at the Mac OS Security and Cryptography web site.
A beta version of an API for accessing CMS has been introduced with Mac OS 9.
Carbon is the set of programming interfaces for use in Mac OS applications. Carbon includes about 70 percent of the legacy Mac OS APIs. With Mac OS 9 comes the first installation of the Carbon APIs. The following sections summarize Carbon APIs available in Mac OS 9.
New routines GetControlID and SetControlID have been added. These routines allow controls to be referenced by ID number.
A new control definition packaging model has been introduced in which controls are stored as CFM Code Fragments rather than as standalone code resources.
It's now possible to write a control definition to support contextual menus.
Attributes have been added to control properties. Control properties can be marked as persistent so their data will be saved when a control is flattened.
Six new Control Manager APIs have been introduced that allow controls to support the drag-and-drop feature. This new feature can be turned on either on a per-control or on per-window basis.
Menus are now stored as opaque data.
Automatic handling of the Apple Menu.
New APIs have been added for defining custom menu definitions.
New APIs or managing virtually every aspect of the printing process.
Extended printer settings structures for storing more user settings.
The ability to provide "promised" scrap data, allowing applications to defer the creation of data until if and when it is requested. This is a concept similar to the Drag Manager's "promised" flavor model.
CarbonLib is a shared library that allows Carbon-based applications to run in Mac OS 9. Carbon applications link against CarbonLib instead of linking to InterfaceLib, etc. as CFM-based applications do today.
CarbonLib 1.0 is new for Mac OS 9.
CarbonLib 1.0 with only load with Mac OS 9. It will not load with earlier versions of the Mac OS, nor will it load with later versions of the Mac OS.
CoreFoundation extracts various APIs and services from Mac OS X's Cocoa APIs and makes them available to multiple stacks on multiple platforms using C APIs and pure C implementation.
String type to provide a unified and simple way to deal with Unicode strings. Easy ways to convert between these and Pascal and C strings in various 8-bit encodings are provided.
Additional collection classes (Dictionary, Array, Data) that, along with String, provide "property list" functionality.
XML support for reading and writing property lists.
Abstractions for Date/Time along with some utilities.
Preferences support for reading/writing user preferences that can be per user and/or per app.
Bundle APIs to manage Carbon application wrappers containing executables and arbitrary localizable resource files.
For future compatibility, developers should begin using these string types in their software for all international string data.
Core Foundation Documentation (coming soon).
The following summarizes new APIs introduced by CarbonLib 1.0 that is installed as a part of Mac OS 9.
New APIs for Ptr, Handle, and heap validation.
The System file contains code and resources for running the computer. This section describes new features, changes, and bug fixes in the System file. The functionality provided by the System file is always present under Mac OS 9, even when the shift key is held down at system startup.
Memory requirements for ATSUI have been reduced.
Breakline is now a linguistic break based on the unicode utilities.
Improved performance breakline operation is faster, along with faster layout.
Many new features have been added to the APIs.
Technote TN1142, "Mac OS 8.5"
Technote TN1163, "Mac OS 8.6"
The 68K Code Fragment Manager (CFM-68K) is the 68K implementation of the Code Fragment Manager. The 68K Code Fragment Manager is the part of the Mac OS on 68K machines that loads 680x0 code fragments into memory and prepares them for execution. CFM-68K is not appropriate for use on PowerPC machines.
Several CFM-68K fragments have been removed from the system. As Mac OS 9 only runs on PowerPC-based systems, these are no longer needed.
Technote TN1084, "Running CFM-68K Code at Interrupt Time: Is Your Code at Risk?"
Technote TN1077, "Calling CFM Code From Classic 68K Code, or There and Back Again, A Mixed Mode Magic Adventure"
The Communications Toolbox provides an API for basic communications and connection services.
The Communications Toolbox Resource Manager (CRM) was reporting the incorrect maximum allowable serial port speed. In Mac OS 9, the CRM has been revised so it reports the correct maximum allowable port speed.
Calls which have an asynchronous variant (_Control, _Status, _Read, _Write) are now accessible synchronously from MP tasks. To test for the availability of this functionality, developers can use the gestaltMPCallableAPIsAttr Gestalt selector.
Carbon applications no longer have access to a dialog's item list handle. New routines have been added so Carbon applications can edit items in an item list.
The Drag Manager supports drag-and-drop operations between windows and applications.
A new API has been introduced allowing applications to enable or disable various Drag Manager behaviors during particular drag and drop operations. The new routine is shown in Listing 1.
theDrag is the drag reference that the behavior changes should be applied to. The specified change in drag behavior will be used the next time TrackDrag is called.
inBehaviorsToSet contains a set of flags indicating what behaviors should be enabled for the drag reference.
inBehaviorsToClear contains a set of flags indicating what behaviors should be turned off for the drag reference.
ChangeDragBehaviors allows callers to adjust some properties of the user interaction that will occur for a particular drag reference the next time the drag reference is passed to TrackDrag. In Mac OS 9, ChangeDragBehaviors can be used to turn off or on the zoom-back animation that occurs when a drag and drop operation is rejected by the destination. To turn off zoom-back animation for a drag reference, provide the kDragBehaviorZoomBackAnimation flag in the inBehaviorsToClear parameter. To turn zoom-back animation back on for that drag reference, call ChangeDragBehaviors again specifying the kDragBehaviorZoomBackAnimation in the inBehaviorsToSet parameter.
To specify that no behaviors are to be set or cleared, provide the kDragBehaviorNone constant in either the inBehaviorsToSet or the inBehaviorsToClear parameter.
Developers using the ChangeDragBehaviors symbol and linking against newer versions of DragLib who would like to have their products run with previous versions of the system software should weak-link against the ChangeDragBehaviors symbol. Unless this is done, the Code Fragment Manager will refuse to launch applications using ChangeDragBehaviors when an older version of DragLib is being used. Developers weak-linking against the ChangeDragBehaviors symbol in DragLib should check to ensure that the routine is defined before calling it.
Technote TN1085, "Using the Drag Manager to Interact with and Manipulate File System Entities"
The HFS+ API has been introduced with this version of the File Manager. It includes support for large files (forks over 2GB - up to a theoretical limit of 263 bytes in size), and long Unicode names. Named forks are supported if they are supported by the underlying file system implementation (none of the file systems included with Mac OS 9 support forks beyond the resource and data forks; however, it is possible for a FSM plug-in to implement support for this feature).
The maximum number of open files has been increased to 8169.
Parameter block calls which have an asynchronous variant, and high-level calls that are based on such calls, can now be made synchronously from an MP task. Calls which are always executed synchronously, such as PBMountVol, cannot be called from MP tasks.
The File Manager has been revised so it is no longer possible for malfunctioning software to accidentally overwrite the catalog or extents overflow files on HFS and HFS Plus volumes.
The File Manager now supports a new error code being returned from disk drivers, driverHardwareGoneErr (-503). Disk drivers should return this error in response to an I/O request to a drive whose device has been disconnected and can't be reconnected. This is especially useful for USB disk drivers. FireWire disk drivers should continue to use the FireWire routine FWWaitForDeviceRePlug to force the user to reconnect the device.
It is no longer possible to access the FCB table directly. Software that calls the PowerPC low-memory accessor functions for the FCB table will now halt the system with a dsMustUseFCBAccessors (119) system error. Developers needing to access FCB data should do so using the appropriate routines, as described in DTS Technote TN1184, "FCBs, Now and Forever."
Developers patching the existing File Manager programming interface in order to see all File Manager requests to a volume, will have to revise their software to patch the HFS Plus APIs as well.
Technote TN1184, "FCBs, Now and Forever"
New APIs have been added which allow FSM plug-ins to quickly locate FCBs when a large number of files have been opened.
New APIs have been added, allowing FSM plug-ins to both validate FCB pointers and map FCB pointers to file reference numbers.
A new API has been added that FSM plug-ins can use for checking permissions when using fork IDs.
File Manager now implements a compatibility layer so that FSM plug-ins don't have to support the new HFS Plus API calls. As long as your FSM plug-in does not set the kVCBFlagsHFSPlusAPIsBit in the vcbFlags fields of the VCB, the compatibility layer will emulate the HFS Plus call on your volume by making one or more old-style calls to your plug-in. If you want to support HFS Plus APIs directly, you can prevent the emulation by setting this bit.
The Folder Manager provides facilities for locating "special" folders (such as, for example, the Extensions folder) without relying on the names of those folders. This aids developers in application localization.
In Mac OS 8.1, 8.5, 8.5.1, and 8.6, calls to FindFolder specifying the kDocumentsFolderType folder with the create parameter set to kCreateFolder will not create the folder if the folder does not already exist. Developers wanting to create a documents folder can create one using the location and name returned by GetFolderDescriptor.
The Folder Manager has been revised to support multiple users.
A new extended version of the FindFolder routine has been added that accepts new flags and data parameters, allowing for more precise control of the FindFolder operation.
FindFolder now follows aliases to folders.
Notification callbacks have been added along with other facilities for managing multiple user settings.
IdentifyFolder performance has been improved.
A new volume selector, kOnAppropriateDisk, has been added. This selector allows developers to establish the location of a particular folder when it is possible for the folder to be located on a number of different volumes.
The maximum number of active font suitcases in the Fonts folder has been increased from 128 to 512.
Under Mac OS 8.6 the Font Manager was creating incorrectly formatted FOND resources and adding them to resource files. In Mac OS 9, the Font Manger has been revised so that it no longer does this. Furthermore, there is an update, Font Manager Update 1.0, available for use with Mac OS 8.6 that includes an extension to correct this problem, and a utility, Font First Aid, to fix fonts corrupted by this problem.
Enumerating fonts and font families.
Accessing information about font families, including name, character encoding, and member fonts.
Accessing information about fonts, including technology, format, and name.
Creating and managing a basic font menu.
Notifying clients of changes in the font database.
Mac OS USB is built into the Mac OS ROM file, and enables USB support for those Macintosh systems that have USB built in. The changes for v1.3 are described as follows.
Added support for driver-requested timeouts.
Implemented support in the HID driver to support vendor-specific drivers for Immersion-based force feedback joysticks.
Implemented support for the USB Expert to get the international strings from a USB device.
Provide USB suspend and resume-wake up support.
Fixed bug where device names were not showing up when the "not enough power" dialog was displayed.
USBExpertStatus calls are now re-entrant. This should solve the "missing messages" reported by some driver writers.
Added new functions allowing USB Class Drivers to get and set the Expert Status level. This will allow developers to debug specific problems they are experiencing and not overflow the log. This functionality is currently only used by USB Prober.
Added support for kNotifySystemSleepRevoke message.
Improved the performance of isochronous and interrupt transfer routines under Virtual Memory.
Fixed a problem that could permit dereferencing nil if we ran out of isoch descriptors.
Implemented the USBGetVersion call to obtain the version of USB present. This call is provided as an alternative for using Gestalt so that you does not need to link with InterfaceLib in order to obtain the version of USB present. Listing 2 contains an example of how one could use this call to determine the installed USB version. For this example, you weak link the USBServicesLib as part of the project. The result of the call is a 4-byte 'vers' response exactly like what would be returned by using the Gestalt call with the 'usbv' selector.
Listing 2. Determining the installed version of USB.
Fixed the Isochronous frStatus error codes. In USB 1.2 (and earlier) the wrong error codes were returned. For example a DataOverRun error would appear as a Stall error, and DeviceNotResponding was reported as a BitStuff error.
Fixed a problem with the OHCIUIM in which multiple overcurrent dialogs appeared when the root hub detected an overcurrent situation.
Made sure that the kNotifySystemSleepDemand messages are sent to the driver modules.
Fixed the Mouse driver to function better on USB CardBus-equipped PowerBooks.
Implements support for USB Audio Class devices, both speakers and microphones and for generic HID devices on USB speakers - volume, mute, bass, and treble adjustment.
Implements support for USB Communication Class devices that comply with the USB Communication Class Abstract Control Model.
Calls to the USB manager no longer return the USBPending result code. Now calls will always return either noErr or some other error code.
USBOpenPipe call is no longer supported. Developers should now use the USBConfigureInterface call to set the active interface for the device. This call will also open all pipes in the interface. Use the USBFindNextPipe call to access the pipe references that you will need in passing data through the pipe.
The USBOpenDevice call has been replaced with USBSetConfiguration. Developers should use USBSetConfiguration instead of a device request to perform a set_configuration operation. The USL issues a status message to the USBProber log whenever a set_configuration USBDeviceRequest is made.
NewHandle was crashing when the size parameter was a value between 0xFFFFFFE1 and 0xFFFFFFFF rather than returning NULL with MemError returning memFullErr. This problem has been corrected - now, for this size range, NewHandle returns NULL and MemError returns memFullErr.
Memory in Memory Manager free blocks is now released with the Virtual Memory function ReleaseMemoryData. This can greatly reduce the number of disk accesses when Virtual Memory needs to handle page faults. However, this also means that programs that attempt to use pointer or handle data after disposing it (a programming error) will likely get garbage data.
Technote IM_ERRATA 02, "Inside Macintosh - Memory Errata"
The Mixed Mode Manager provides services for switching between 68k emulation and PowerPC instruction execution environments.
Accelerated code resources no longer crash if they are moved in memory after they are initialized.
Technote 1077, "Calling CFM Code From Classic 68K Code, or There and Back Again - A Mixed Mode Magic Adventure"
MP tasks can now call WakeUpProcess.
MP tasks can now call DTInstall.
The MultiProcessing library now loads on all machines where Mac OS 9 can be installed.
Greater than 1GB RAM Support.
A new function has been added which simplifies the process of attaching a preview resource to a document (NavCreatePreview).
Support has been added for Carbon application packages. Packages appear as files to the user if the client requests them (kNavSupportPackages). An option is also available to allow packages to appear as folders, allowing users navigate into them (kNavAllowOpenPackages).
A new option is available to turn off the bevel frame around the custom control area (kNavDontUseCustomFrame), and another option prevents opened files from being added to the Recent menu (kNavDontAddRecents).
A new event selector notifies the client when the user has opened the current selection (kNavCBOpenSelection).
File filtering has been relaxed, allowing the component signature in the NavTypeList to have a wild-card value (kNavGenericSignature).
A number of new custom control selectors have been added, allowing the client to automate and restrict certain navigation actions (kNavCtlBrowserSelectAll, kNavCtlGotoParent, kNavCtlSetActionState, kNavCtlBrowserRedraw, kNavCtlTerminate).
The Notification Manager provides a mechanism for programs which are not the front-most application to notify the user of specific events.
The Notification Manager now displays alert notifications using a floating window. This allows the current application's event loop to continue running while a Notification Manager alert is on the screen. Rather than using the cancel button as in the older style "modal" alerts, these new Notification Manager alerts are dismissed by clicking in the window's close box. The new non-blocking Notification Manager fixes both of the problems described in TN1026, "The Notification Manager: Problems & Fixes".
The Notification Manager now plays custom alert sounds (specified with the nmSound field of the request record) asynchronously.
The Notification Manager no longer throws away notification requests that were posted during early boot time.
Some applications were built to depend on the event-loop-blocking behavior of Notification Manager alerts, and assumed that after posting an alert notification, the posting application would not run again until the user had dismissed the alert. This assumption has never been correct; there has always been a small window during which the posting application could be activated before the alert notification was displayed. With the new non-blocking behavior of the Notification Manager, it becomes very easy for the user to activate the posting application without dismissing the alert. Applications should be aware of this possibility and not reuse a request record before the user has dismissed the notification. An application may also wish to explicitly cancel an alert notification with NMRemove when the application becomes active.
As in previous versions of the Notification Manager, the notification response procedure will not be called until the user dismisses the alert. If your application reuses request records, it should always provide a response procedure that marks a request record as no longer in use. This will prevent your application from reusing the request record before the alert is dismissed.
Technical Q&A OPS22, "Notification Manager Reinitialized During Boot"
The Notification Manager chapter in Inside Macintosh:Processes.
The Process Manager shares the processor among multiple applications.
A problem in Mac OS 8.6 that could cause slower Apple event performance has been corrected.
There is no process in the system that is guaranteed to remain operational from system startup to system shutdown. As a result, control panels, system extensions, and applications should not assume that state variables belonging to other processes, such as, for instance, a processes' A5 value, will remain constant across calls to WaitNextEvent; and, nor should any process assume that it is safe to allocate persistent storage in another processes' heap zone and expect it to remain intact across calls to WaitNextEvent. Processes requiring persistent storage outside of their own heap zone can allocate memory in the system heap zone.
The Power Manager provides facilities for controlling electrical power usage on the computer.
The new Power Manager includes several new APIs that allow for finer control over energy consumption.
Technote TN1190, "Power Manager 2.0"
The Program-to-Program Communications Toolbox provides process-to-process communications facilities both for processes running on the same machine, and for processes running on different computers connected by either an AppleTalk network or a TCP/IP network.
The PPC Browser window now provides facilities for selecting processes on a remote machine over TCP/IP. Users can target a machine for display in the PPC Browser window by providing an address in either the domain name format or the dotted-decimal address format.
Guest access is not available for PPC over TCP/IP connections.
A new routine has been added for canceling outstanding list ports calls (IPCListPorts). The new routine IPCKillListPorts takes the parameter block from a pending IPCListPorts call and cancels the call immediately.
The implementation of PPC over TCP/IP listens at port number 3031 for incoming PPC over TCP/IP connections. Although it is not possible to change the listening port number, it is possible to specify a port number in outgoing PPC over TCP/IP connection requests.
This ability is useful in situations where multiple hosts share a single IP address. For example, on the outside of a network address translator (NAT) a number of different machines may have the same IP address, while on the inside of the NAT they may each have a unique IP address. In these cases, it is necessary for external clients to refer to different machines using different port numbers instead of unique IP addresses. The NAT itself must do the translation from port numbers to internal IP addresses using port number 3031.
Using this same example, external clients can select a specific target machine by specifying the machine's port number in the outgoing PPC over TCP/IP connection by providing the port number in the destination address. For example, the address eppc://myhost.mycompany.com:1234 specifies port number 1234.
LocationNameRec structure has been extended to support PPC Toolbox over TCP/IP. The new structure's definition can be found in "PPCToolbox.h" in Universal Interfaces 3.3 and higher. A new PPCLocationKind constant has been added (ppcXTIAddrLocation) to indicate the location field contains an XTI address. Also, a new union member in the location field, xtiType, has been added that holds the XTI address itself. The XTI address is stored in the same format used by Open Transport routines (such as OTConnect); for PPC Toolbox over TCP/IP, you can use either an IP address (AF_INET) or a DNS address (AF_DNS).
The maximum length of the XTI address stored LocationNameRec is 98 bytes. This restriction is required so as to not change the overall length of the LocationNameRec structure.
This is not a problem when connecting to an IP address, because the IP address structure (InetAddress ) is always a fixed size (16 bytes). It is potentially a problem for DNS addresses, which can be up to 255 characters long. If your software passes DNS addresses to PPC Toolbox and it receives a DNS address string longer than 96 bytes (98 minus the two-byte fAddressType field), it must resolve the DNS address to an IP address (using OTInetStringToAddress) before passing it to PPC Toolbox.
The code snippet shown in Listing 3 shows how you might target an Apple event over TCP/IP or AppleTalk by setting up the location field of the TargetID structure appropriately. Note that OTInitDNSAddress is an Open Transport routine that initializes an XTI address (AF_DNS) from a C-style string and returns the XTI address length.
// Set up sessionID and name fields of target as before.
Listing 3. Targeting and Apple event over TCP/IP.
The PPC Toolbox can now utilize Keychain Access to automate secure connections. This allows background-only applications to initiate secure PPC Toolbox sessions and to send Apple events to processes on machines requiring authentication. In the past, the user interaction required for authentication made it impossible for background-only applications to establish secure connections requiring authentication. Now, in Mac OS 9, the PPC Toolbox routine StartSecureSession (also used by the Apple Event Manager) works together with Keychain Access to allow any process to open one or more secure sessions without any user interaction.
If there is an unlocked keychain that contains an entry for the target machine, then a secure session can be established without user interaction; otherwise, if a keychain entry has not been created for the target machine, or if one exists but the keychain containing it is locked, then an error will be returned indicating a user interaction error has occurred.
Large cursor support has been added. It is now possible for developers to build cursors larger than the 16-by-16 pixel cursor of the past. In addition, it is possible to create animated color cursors that are updated at interrupt level. The new cursor facilities allow for hardware acceleration, which allows cursors to be rendered inside of the screen buffer and for switching between hardware and software rendering. To take advantage of this new facility, developers must create a cursor plug-in component. For more information consult the cursor plug-in component SDK (coming soon).
New "add noise" and Color XOr transfer modes have been added.
A flag has been added to tell NewGWorld to allocate memory for the raster data on the video card or AGP (Accelerated Graphics Port).
Facilities for adding user-defined transfer modes are now available. Users can specify new transfer modes by providing a callback procedure that implements the operations required.
Corrects a problem that could occur when scaling raster images for landscape printing where a column of pixels would not appear in the printed image.
Performance of the LockPixels and SetCPixel routines have been improved.
Accessor routines have been added for all QuickDraw structures.
Developers should begin using the new public accessors rather than accessing QuickDraw structures directly to ensure future compatibility of their source code.
A problem where clicking sounds could occur during sound playback on some PowerBook models when VM is turned on has been removed.
The Sound Manager has been re-implemented. The new implementation features improved performance and robustness.
In the new implementation it is only possible to have one sound input source active at a time.
Standard File provides a consistent user interface for accessing files by way of the Open and Save As... dialog boxes.
There have been no changes in Standard File; however, developers using Standard File in their applications should be aware that doing so makes their applications incompatible with Mac OS 9 packages.
Mac OS 9 packages are not displayed correctly by the Standard File dialogs. The dialogs displayed by Standard File allow users to navigate down into Mac OS 9 packages. Navigation Services handles display of packages correctly. Developers interested in providing a consistent user interface with other Mac OS 9 applications should replace their calls to Standard File with calls to Navigation Services.
The Standard File Package chapter of Inside Macintosh: Files.
StdCLib is a shared library located in the ROM on all PowerPC-based Mac OS compatible computers providing functionality for programs compiled using the C language. StdCLib has been present on all PowerPC models, and prior to System 7.6 updates were provided via the StdCLibInit system extension.
A problem in signal handling where native tools could crash when interrupted by Command-"." (period) has been corrected.
Support for AltiVec has been added, including new memory allocation routines that allocate memory on 16-byte boundaries for vector data, setjmp/longjmp variants that save and restore the processor's AltiVec state, and new printf and scanf format size specifiers for reading and writing AltiVec data. The new entry points vec_malloc, vec_calloc, vec_realloc, and vec_free have been added to support 16-byte aligned allocations for vector data.
A bug was found in the printing of vector data using the printf family in the 3.5 version of StdCLib shipped in Mac OS 9.0. In some cases, vector data could be misaligned on the stack and the output would be garbled.
The standard C library's string functions have been optimized for PowerPC.
Support for native 64-bit long integers (long long) has been added. The routines printf, scanf, atoll, strtoll, and others support this data type.
The C library's malloc implementation has been replaced. New features include improved performance, the ability to allocate more than 8MB in a single call, and a more intelligent scheme for returning sub-allocation blocks to the Macintosh Memory Manager - when memory is running low, the new malloc will return empty sub-allocation blocks to the Macintosh Memory Manager.
New FSSpec I/O routines have been added. These routines allow the use of Macintosh file specification records in conjunction with the standard C library I/O routines. The new routines are defined in FSpio.h header file. Routines provided include FSp_creat, FSp_access, FSp_fopen, FSp_freopen, FSp_fsetfileinfo, FSp_open, FSp_remove, FSp_rename and FSp_unlink. They function identically to their standard C library counterparts - the only difference being that they accept a FSSpec pointer rather than a string to identify the file.
<time.h> functions have been enhanced/fixed. The tm_isdst field is set correctly in mktime and localtime. The %p format specifier is now supported in strftime. The calculation of leap year has been corrected in localtime. The gmtime function is now fully supported.
fgets now recognizes line endings for Mac, DOS, and UNIX files.
All I/O functions requiring C-style path names to identify files now work correctly with names longer than 255 characters.
memchr and strchr now handle 8-bit characters correctly.
Two bugs in strncat were fixed. The first occurred when n % 4 == 3 and n < strlen(s2) - the last character was chopped off. The second occurred when n % 4 == 0 and n <= strlen(s2) <= n + 3 - the final three characters were chopped off.
Fixes to PLstr suite of routines. Specifically, the functions PLstrchr, PLstrrchr and PLstrspn had bugs where these functions would scan one character beyond the length of the target string (PLstrchr, PLstrrchr) or one character beyond the character set specifier (PLstrspn). These bugs were fixed. Also, a bug was fixed in PLstrncpy in which the destination string was mishandled when len(SRC) < n <= len(DST).
Fixed an off-by-one error in [S|U]Int64ToStr which could cause an extra (garbage) character to be output.
Double-rounding in scanf has been corrected.
Performance of getenv has been improved.
The StdCLib section in Technote TN1102, "Mac OS 8.0"
A full unicode text rendering engine (ATSUI) for drawing text.
The ability to add embedded objects like sound, graphics, and QuickTime movies.
More than 32K of text.
Built-in support for Drag & Drop.
Built-in support for inline input.
Support for advanced ATSUI font features.
Support for multiple levels of undo.
The Thread Manager is part of the operating system providing multi-programming services for use within application programs.
The routines GetDefaultThreadStackSize, GetSpecificFreeThreadCount, and GetFreeThreadCount were returning noErr when called with the kPreemptiveThread constant on a PowerPC. This was incorrect as it is not possible to create preemptive threads using the Thread Manager on PowerPC computers. This problem has been present in the Thread Manager since Mac OS 8.1, and it has been corrected in Mac OS 9.0. Now, these routines will return the paramErr error code as expected.
The Thread Manager routine SetThreadReadyGivenTaskRef now works correctly when given a reference to a stopped thread. This fix applies to the PowerPC version of the Thread Manager - it has not been implemented for the 68k version. In past versions of the Thread Manager, this routine did not work when it was called with a reference to a stopped thread.
The Unicode Text Utilities provide a set of APIs for working with Unicode text. These APIs provide services for sorting and collating Unicode text, finding word breaks, establishing character properties, and so on.
New character properties APIs have been added.
Unicode text boundaries/break discovery APIs have been added.
Bug fixes associated with the UCKeyTranslate routine tbd.
The UTC (Coordinated Universal Time) Utilities provide facilities for accessing the clock chip and APIs for converting dates between various formats.
New 64-bit routines are now available for accessing the system's clock in both UTC and Local Time formats. Converting a value returned by GetDateTime to a value usable by the new routines is just a matter of copying the value returned by GetDateTime into the low seconds value in the new time structure (along with initializing the other fields to their appropriate values).
Facilities have been provided for conversion between UTC (Coordinated Universal Time) and local time. With this release, these routines operate on dates between the years 1904 and 2108.
The new routines include provisions for calculating fractions of seconds. This fractional value is stored as a 16-bit value in the new time structure and is interpreted as seconds = value / 0xFFFF.
Technote TN1064, "Inside Macintosh: Operating System Utilities: Addendum to Chapter 4 - Determining If Daylight Savings Time is in Effect"
Fixed problem where cleaning a dirty page marked it "recently used" when non-DMA disk drivers access the page's data to write it to disk.
New API, GetVolumeVirtualMemoryInfo, for getting information on the volume's Virtual Memory uses for backing storage. This call will not be supported under Carbon.
A bug in the Virtual Memory Manager that was causing data corruption in a very rare case has been fixed. This bug was only seen on very fast striped hard disk arrays, where the stripe boundary for a read operation fell in the middle of a page.
Old-style control panel files (files of type 'cdev') are now launched in a separate Process Manager partition. By default, the size of this partition is about 200K; however, the size of this partition can be customized by including a 'SIZE' resource with ID = -16474. When such a 'SIZE' resource is present, the minimum and suggested sizes will be used.
The Process Manager will choose to launch a control panel file as an application if it contains either a 'CODE' ID = 0 resource (68K app), or it has a 'cfrg' resource with a fragment descriptor marked as an "application"type. Control Panels that meet these criteria will not have their 'cdev' resources called by the system.
For backwards compatibility with some control panels that must run in the Finder's partition, it is possible to open a control panel in the Finder layer by holding Command and Control keys while double-clicking the control panel icon. This technique only works for control panel files containing a 'cdev' resource. As this feature is only present for compatibility issues in Mac OS 9, it will likely be removed in the next system revision.
The Appearance Control Panel no longer leaks a large amount of memory in a reserved area of the system heap each time it is opened.
The new control panel provides a greater range of configuration options allowing association of ColorSync profiles with different functional uses.
Allows named settings allowing users to save and restore control panel settings.
By default, dates are now displayed and entered using four-digit rather than two-digit centuries.
File exchange now provides better support for 120MB SuperDisk disks in PC format.
Corrects a problem where an incorrect volume size could be assigned to a volume formatted by File Exchange.
File Exchange now informs the File Manager when a volume mounted by File Exchange has been unplugged (so long as the underlying disk driver supports the new driverHardwareGoneErr error code described in the File Manager section).
Some problems with reformatting PC format volumes into Mac OS format while PC Exchange is turned on have been corrected.
File Exchange no longer allows the name of a DOS disk to be changed to " " (blank).
Clicking on the Mount Now button in the File Exchange control panel's window now provides additional information and feedback in cases where no volume could be mounted.
Has been updated to support features of the new HDI driver, version 1.4.1.
Technote PT515, "Apple File Exchange Q&As"
The File Sharing control panel allows for end user configuration of file sharing services on the computer.
Adds support for Personal File Sharing over IP. Personal file sharing over TCP/IP is implemented by a new background process called "ShareWay IP Personal Bgnd." It works in conjunction with the File Sharing Extension, and was licensed from Open Door Networks. AppleTalk must be active to use File Sharing over IP.
Adds support for turning on or off Program Linking over IP.
Passwords are now entered using masked text for better security.
The Users and Groups control panel has been integrated into the File Sharing control panel. AppleScripts that were designed to work with the Users & Groups control panel will have to be modified to target the File Sharing control panel.
FontSync provides a common method for identifying fonts based upon the content of the font rather than just the name as a document is moved from machine to machine. In Mac OS 9, FontSync is installed in the "Apple Extras" folder. To use it, the user needs to drag the control panel into the System Folder.
This is a new feature introduced with Mac OS 9.
Introduces AppleScript support for configuring memory options.
The Monitors control panel provides facilities for configuring monitors attached to the computer.
In Mac OS 9 the Monitors & Sound control panel has been divided into two different control panels. The Monitors control panel provides the monitor configuration user interface elements formerly found in the Monitors & Sound control panel.
The Mouse control panel provides facilities for configuring the mouse's tracking speed and double-click time interval.
The new Mouse control panel features an updated graphic interface.
AppleScript support has been added.
The Text control panel provides user interface facilities for configuring international text handling.
On systems with bidirectional scripts installed, the Text control panel now only affects the line direction for applications localized into those scripts. Applications localized in non-bidirectional scripts are not affected by the direction setting. The default setting is now right-to-left.
The Sound control panel provides facilities for configuring alert sounds and configuring sound input and output preferences.
In Mac OS 9 the Monitors & Sound control panel has been divided into two different control panels. The Sound control panel provides the sound configuration user interface elements formerly found in the Monitors & Sound control panel.
Software Update provides a way to find and install the latest system software for your computer by way of the Internet.
Software Update is new for Mac OS 9. There are no public APIs for this facility.
When AppleScript 1.4 tries to locate an application, it will search the Scripting Additions folder for applications and application aliases. For example, if you put an alias to FileMaker Pro in the Scripting Additions folder, AppleScript 1.4 will be able to use that alias to locate the application even if the application is not running.
When searching for applications and application aliases in the Scripting Additions folder, AppleScript 1.4 will use the name of the item in the Scripting Additions folder (even if the item is an alias and it refers to a file with a different name). In many circumstances, this can be a convenience as it allows script developers to create aliases whose names are abbreviations for applications and then use those abbreviations in their scripts. For example, one might create an alias named "FM" referring to the application "FileMaker Pro" and place it in the Scripting Additions folder. After creating that alias, "FM" can be used in a script to refer to the application "FileMaker Pro".
"Tell" blocks can now accept URLs in the "machine" parameter, allowing delivery of AppleEvents to remote applications via TCP/IP protocol.
A facility for targeting particular applications in scripts (specifically, the "using terms from" construct) has been added replacing the double-tell block application targeting method described in the Mac OS 8.6 technote.
Script Editor is now a Carbon application.
The "file busy" flag to has been added to the FileInfo result to allow a script to wait until a file operation is complete (i.e., until the file is no longer busy).
Try blocks with optional "on error." It is no longer necessary to include the "on error" section before the "end try." This requirement has been removed.
The "mount volume" scripting addition provided with Mac OS 9 uses a PBVolumeMount that requests 2-Way Randnum Exchange. Some scripts may have been built that assume the "mount volume" scripting addition will fall back to using clear text passwords for logging into servers that only support clear text passwords (such as, for instance, Mac OS X servers or Windows NT servers). As described in the AppleShare Client section, this "fallback to a lower security mode" no longer occurs in PBVolumeMount calls. As a result, the "mount volume" scripting addition cannot be used to log in to servers that only support clear text passwords.
AppleScripts that use the new features of AppleScript 1.4 (specifically the "using terms from" clause and IP addressing) will not run on earlier versions of AppleScript or Mac OS.
AppleScript now loads at component registration time, not INIT time, so beware of load-order dependencies.
Technote TN1164, "Native Scripting Additions"
The AppleShare Client provides file sharing services for computers networked with Apple Filing Protocol (AFP) file servers.
The method used for mounting server volumes at startup has changed. Rather than using the older method where mounting information was stored in the AppleShare Prep file, a new folder entitled "servers" is placed in the Startup Items folder containing aliases of server volumes to mount at startup. Aliases of type 'srvr' will auto-route to this folder.
Support for Wake-on-LAN capable machines dozing functionality has been added.
A DHX User Authentication Module has been added. This allows for encrypted logins to Mac OS Server devices.
The PBVolumeMount call (for AppleShare Servers only) no longer negotiates a less secure connection than was requested in the UAMType field. This means that a PBVolumeMount call that requests 2-Way Randnum Exchange (UAMType = 6) will not fall back to using ClearText (UAMType = 2). This can be a problem when accessing servers that typically support ClearText only, such as servers running on UNIX, NT, or NetWare. The client will negotiate to more secure authentication methods if they are available.
AppleShare Client 3.8.5 or later is required for Mac OS 9. Earlier versions of the AppleShare Client will not work with Mac OS 9.
ColorSync provides system-level color management that enables publishing software to achieve repeatable, , and consistent color on-screen, in print, and for electronic delivery.
Functional area: input, output, proof, display.
Input devices such as scanners and digital cameras.
Starting with ColorSync 3.0, the name of the ColorSync profiles folder on Japanese system software will change from "ColorSync Tokusei" to "ColorSync Profiles" (in Kana). Software that relies on the name of the ColorSync Profiles folder needs to be updated. Developers should use the 'prof' Folder Manager selector introduced with Mac OS 8.5.
Technote TN1185, "New ColorSync 3.0 APIs"
Routines have been added for better context selection control.
Routines have been added allowing direct switching between two different DrawSprocket contexts.
Find By Content's overall performance has been improved for both indexing and searching.
A new API has been introduced allowing for the immediate indexing of new or altered files on demand. The new routine is declared as shown in Listing 3.
theItems is a pointer to an array of file specification records referring to the files to be indexed.
itemCount is the number of items in the array of file specification records.
FBCIndexItems indexes (or re-indexes) the files referred to in the array of file specification records passed as a pointer in the first parameter. If the volume containing a file already has an index, the document is added or re-indexed; and, if the volume does not contain an index, a new index is created.
Normally you will call FBCIndexItems after saving a file (or updating a file) on a volume containing an index. This will allow users to keep their indexes up to date without any additional effort. For more information about how to determine if a volume contains an index, refer to the Sherlock technote.
Expanded Language Support for indexing volumes has been added. Earlier versions of Find by Content supported a set of Western European languages, Japanese, and Korean. In Mac OS 9, support has been added for all other Roman-alphabet languages and for languages using the Arabic, Hebrew, Greek, and Cyrillic alphabets. The specific list of supported languages (and groups of languages) is Afrikaans, Arabic, Farsi, Urdu, Catalan, Croatian, Cryllic languages, Czech, Danish, Dutch, English, Estonian, French, German, Greek, Hebrew, Hungarian, Icelandic, Italian, Japanese, Korean, Latvian, Lithuanian, Norwegian, Other (Roman alphabet), Polish, Portuguese, Romanian, Slovak, Slovene, Spanish, Swedish, Turkish, and Yiddish.
Once an index has been created with a particular set of languages it is not possible to change the set of languages used in the index. To change the set of languages used in the index it will be necessary to delete the index file and create a new one with a new set of language settings.
Technote TN1141, "Extending and Controlling Sherlock"
Technote TN1180, "Sherlock's Find By Content Library"
Technote TN1181, "Sherlock's Find by Content Text Extractor Plug-ins"
HTMLRenderingLib is Apple's lightweight HTML rendering engine capable of displaying HTML 3.2 files.
Provides a convenient and easy to use API for displaying HTML files.
Clicking on HTTP links automatically launches the default browser to display a web page.
Adds universal USB support for all USB HID-compliant devices. This means almost any USB gaming device will work off the shelf, without a custom driver.
It is now possible for InputSprocket to use a mouse with more than two axes or more than three buttons.
Adds support for calibration of devices and provides an interface for doing so in the InputSprocket configuration dialog.
All input sprockets have been consolidated into one file.
Improved ColorSync Integration and Easy of Use with a simplified color matching panel in the print dialog.
Application Support for Scriptable Printing, allowing specification of printing options when printing from AppleScripts. New APIs have been introduced to support this feature.
Developers wanting to support the new scriptable printing features will need to make a few minor modifications to their applications.
It is now possible to create PostScript filters capable of modifying the PostScript data stream and locate them in the PostScript data pipeline between the LaserWriter 8 printer driver and the PostScript device. Furthermore, to allow for configuration of a filter's print job parameters, it is possible for a PostScript filter to add one or more dialog panels to the LaserWriter 8 print job dialog.
In earlier versions of LaserWriter 8, partial font downloading was only available for fonts with the particular style being requested defined in their type. Now, if the particular style variant is not defined for the font's type it will be synthesized "on the fly" from the plain text style of the font.
Technote 1179, "PostScript Output Filters for LaserWriter 8.7"
Technote 1177, "Introducing the LaserWriter 8 Driver Version 8.7"
Technote 1144, "Writing Custom Hoses for LaserWriter 8.6"
Technote 1146, "LaserWriter 8 and Fonts"
Mac OS Runtime for Java (MRJ) is Apple's implementation of the Java runtime environment. MRJ allows Java functionality to be embedded in Mac OS applications. Also, applications using MRJ's JManager API are able to run Java applets and applications. MRJ is a runtime environment and does not include development tools. If you are interested in Java development, you need a Java development environment and the MRJ Software Development Kit (MRJ SDK). For more information, see the MRJ developer page.
Mac OS Runtime for Java (MRJ) 2.1.4 is Bronze certified for running applications built with Oracle Developer 1.6.1 and deployed on Oracle Developer Server using Apple Applet Runner 2.1.4. For information on obtaining Applet Runner 2.1.4 and Oracle Bronze certification, see http://www.apple.com/java/.
MRJ 2.1.4 addresses several general Java security problems reported to us by Sun Microsystems, fixes a number of memory leaks, and provides solutions to a number of outstanding developer issues.
MRJ 2.1.4 is compliant with Sun Microsystem's Java 1.1.7 specification.
MRJ 2.1.4 is compatible with both Swing 1.0.3 and Swing 1.1. For more information or a copy of the Swing software, see the Sun Microsystems web site at http://java.sun.com/. To run Swing-based applets and applications, place the "swingall.jar" file in the MRJClasses folder, in the MRJ Libraries folder in the Extensions folder (inside the System Folder).
Multiple Users is a multi-user software extension that provides the capability for a number of users to access a single computer. Each user logs in to her own environment that provides her own preferences and some file security.
Allows users to have their own preferences when they log in. This includes, but not limited to: Preferences, Apple Menu Items, Startup Items, Desktop Items, and Favorites.
A voice authentication method has been provided for Multiple Users 1.0.
Technote 1186, "Being a good multiuser citizen"
NetSprocket 1.7 is a bug-fix and feature enhancement release. In addition to increasing the stability of the product, this new version adds new APIs that provide client applications with more flexibility in the way that they manage the players and teams within their NetSprocket applications.
API additions to allow a host to drop players from a game.
API additions to allow developers the ability to set time-out values.
Consolidated into a single file rather than two.
LDAP plug-in (support for LDAP protocol; implementation based on Netscape LDAP server).
NBP plug-in (support for NBP protocol).
Standard user interface that will allow users to browse for a service via the dialog provided in NSLStandardGetURL and then launch an appropriate application, obtained by Internet Config, with the resulting URL.
URL drag-and-drop support (drag URL from NSL dialog or any browser to desktop, creating a file on the desktop, which when double-clicked will launch the default browser and go directly to that URL).
Added OTCfgEncrypt and OTCfgDecrypt routines for encrypting and decrypting ARA passwords.
OpenGL for Macintosh is Apple's implementation of Silicon Graphics' industry-standard 3D graphics API.
Mac OS 9 ships with OpenGL 1.1 that supports the OpenGL API v1.1.
The Apple OpenGL web page.
Open Transport is the networking technology for Mac OS 9.
OT has been revised to include the implementation of Mentat Portable Streams version 3.3 and Mentat TCP version 3.5. As a result, clients to the Open Transport API can expect improved performance and stability.
The new implementation provides faster endpoint creation and disposal.
Open Transport 2.5 supports a new message that network drivers can send to the network stack. When a driver calls OTChangePortState(OTPortRef, ref, kOTPortNetworkChange, 0) it tells Open Transport that the network environment may have changed. If Open Transport is set to obtain its address using DHCP, then it treats this as a hint that it might now be on a different IP network, so it goes through INIT-REBOOT processing to verify that its address is still valid, and obtains a new one if necessary. The AirPort wireless driver uses this call every time it changes its base station connection. A wired Ethernet driver could use this call every time it detects a link state change, indicating that a cable has been connected, and this would allow the Mac to automatically acquire a new IP address whenever it is connected to a new network, without having to sleep or reboot the machine.
Copy stall problems should not occur any more over TCP/IP connections while transferring large blocks of data.
The number of Open Transport library files has been reduced to two, thereby reducing clutter in the extensions folder.
It is now possible to keep a protocol stack open across a sleep cycle.
Mac OS 9 includes a client/server version of ARA.
Dial-on-demand performance has been improved.
Corrects some problems affecting various third-party wireless modems.
Some internal timeout constants have been adjusted to prevent pausing behavior when attempting to obtain or renew a DHCP lease.
DHCP packets are now more compatible with Windows NT DHCP servers and other types of DHCP servers.
This implementation of Open Transport reduces its dependency on ASLM. Developers should avoid using ASLM in their products as it may not be used in future versions of Open Transport (and therefore may not be present in future versions of Mac OS).
It is possible for ARA to return error code -7100. This error code is also defined as an error code returned by the printing software.
OpenTransport now sends messages to registered clients providing information about changes in the status of the TCP/IP protocol stack. This allows clients to be aware of changes in the stack's state and avoid making inappropriate calls when the stack is down. The new events, listed in Table 1, are sent to registered Open Transport clients. Using these new events together with the OTInetGetInterfaceInfo routine (as discussed in Technote TN1145, "Living in a Dynamic TCP/IP Environment") it is now possible for your application to monitor the state of the TCP/IP protocol stack.
Table 1. TCP/IP protocol stack transition event codes.
Sent before Open Transport attempts to load the TCP/IP protocol stack.
Sent after the TCP/IP stack has been successfully loaded.
Sent before Open Transport unloads the TCP/IP stack.
In order to receive these messages, a client must register itself with Open Transport by calling OTRegisterAsClient. Once registered in this way, the notifier function installed by OTRegisterAsClient will be called with the messages listed in Table 1 in the OTEventCode parameter. Also, the notifier's cookie parameter will identify the protocol stack that sent the message (currently defined as kOTPRotocolTypeTCPv4 = 'ipv4').
When a kOTStackIsLoading message is received, the notifier's OTResult parameter contains a value indicating the type of hardware link the stack will be using once it has been loaded (these values are listed in Table 2).
Table 2. TCP/IP protocol stack transition event codes.
TCP/IP running on top of Ethernet.
TCP/IP running on top of 802.
TCP/IP running on top of a PPP dial-up connection.
In the future, other protocols may be revised to send stack transition events to registered Open Transport clients. As such, clients should check the notifier's cookie parameter to ensure the event refers to the particular protocol it is monitoring. For example, a client monitoring the TCP/IP protocol would check the cookie parameter to ensure it contains the value kOTPRotocolTypeTCPv4.
PlainTalk provides both speech recognition services and services for the translation of text into audible speech. The Mac OS 9 installation ships with English Text-to-Speech 2.0.2, Plaintalk Speech Recognition 2.0, and Mexican Spanish Text-to-Speech 2.0.2. English Text-to-Speech is installed as part of the default Mac OS 9 installation. Plaintalk Speech Recognition 2.0 can be installed as a custom install option. On some localized OS releases, individual Plaintalk components, may be moved to the CD Extras folder on the System Software CD or removed entirely from the OS.
Facilities have been provided to allow speakable items to be designated as either recognizable when a particular application is active or recognizable when any application is active.
Developers can install Speakable Actions for use when their application is active by creating a folder in the Apple Menu Items:Speakable Items:Application Speakable Items: hierarchy. Inside of this folder, add an invisible alias file referring to the application along with items (AppleScript applets or standard applications) associated with voice commands. The items in this folder will become speakable in when the application is active (i.e., is the front-most application).
The Speech Listener Application enables Applescript writers to listen for specific words as part of their scripts.
Speakable items commands have been updated to use Mac OS 9 features.
Built-in commands have been added to allow for application switching and launching based on the running processes, the contents of the "Recent Applications" folder and the contents of the "Favorites" folder.
Built-in commands allow for launching web browser and email client based on the selections in the Internet control panel.
A new dynamic help view that shows all available spoken commands - this can be accessed by way of the "Show Speakable commands" speakable command.
A set of new application speakable items designed specifically for Internet Explorer, Netscape Communicator, and Outlook Express.
Speaking the names of push buttons, radio buttons, and check boxes works in (most) applications.
AppleScript terminology for the SpeakableItems application is now available.
Provides superior 3D sound experience over previous versions.
API additions have been included so that clients of the OpenGL 3D graphics API can more easily use SoundSprocket.
A new API, NearestMacTextEncodings, has been introduced that allows callers to determine the best possible Macintosh character encoding that can be used to represent any arbitrary character encoding.
A new routine, UCGetCharProperty, has been added to the TEC interfaces. This new routine allows callers to establish character property information for UTF-16 character sequences.
A new API, TECSetBasicOptions, allows callers to set some of the options available in the UnicodeConverter to also be used by way of the TextEncodingConverter interfaces.
A new Unicode Converter option, kUnicodeTextRunHeuristics, has been added. This new option allows for finer control over conversion involving text runs including multiple character sets.
Support for the Euro currency symbol has been added for the Mac Cyrillic encodings.
Support for conversion from arbitrary Unicode to maximally decomposed Unicode has been added.
Fixed problems in building conversions involving Unicode variants, including UTF-8.
Fixed bugs related to booting and initialization, especially on localized systems.
Fixed bugs relating to locking tables for use at interrupt level.
Added support for the encodings ISO 8859-3 (Latin-3), ISO 8859-4 (Latin-4), ISO 8859-15 (Latin-9), Windows CP 1257 (Baltic Rim), Windows CP 1258 (Vietnamese).
The Network Browser application provides a convenient and easy to use graphical user interface for connecting to network-based file servers.
Network Browser now supports FTP connections to servers on TCP/IP networks.
Browsing services are now based on Network Services Location (NSL), allowing users to browse services on the internet.
The Network Services Location (NSL) section.
Adds the concept of Sherlock Channels, allowing internet search sites to be organized into discrete categories. Categories include People, Shopping, News, and general Internet searches.
Find by Content and Find File have been integrated into a single Files channel, allowing users to perform more complex searches than in previous versions of Sherlock.
The Sherlock application now provides a simple user interface for selecting which languages are to be supported for indexing. Thus, a user could select English, French, German, and Italian, for example, or German, Polish, and Russian. Of course, selecting additional languages will increase the size of index files.
The Find By Content section.
Utilities include items useful for maintaining your computer. Normally, these items are placed in the Utilities folder on your startup volume when you install your system software, but some of them can be found in the "Utilities" folder on the Install CD.
The Utilities folder on the Mac OS 9 CD contains an application called Package First Aid. This utility allows you to reset folders that have been incorrectly configured as application packages.
Drive Setup provides facilities for updating hard disk drivers and for formatting hard drives.
Commands have been added allowing volumes to be formatted as UFS and other common UNIX file system types.
Apple Extras include a number of items placed in on your hard drive during system installs. These items may include utilities, tools, or programs meant for specific purposes.
Palm Desktop is a updated version of Claris Organizer that Palm Computing acquired from Apple. It provides Personal Information Management (PIM) functionality and synchronization to Palm OS-based devices.
The primary features are unchanged from the currently shipping MacPac 2.1.
The following items are not supported in Mac OS 9. Attempts to install these components in Mac OS 9 and may lead to undesirable results. These components have not been tested with Mac OS 9.
Apple Telecom software is not supported in Mac OS 9.
Color StyleWriter 4000 series printers are not compatible with Mac OS 9, and will be removed by the installer if it is present in a System Folder that is being updated to Mac OS 9.
The Energy Saver API, as documented in TN1086, "Power Management & The Energy Saver API," is not supported with Mac OS 9. The Energy Saver extension is still present in among the control panels - only the API is no longer supported.
Applications attempting to utilize this API in Mac OS 9 will not work.
LaserWriter 8f is not compatible with Mac OS 9 and will be removed by the installer if it is present in a System Folder that is being updated to Mac OS 9.
QuickDraw GX is not supported in Mac OS 9 (QuickDraw GX printing was phased out in Mac OS 8.0. Graphics, line layout, and typography are now also phased out).
The PPC Toolbox section now shows how to send Apple events over TCP/IP.
Updated Thread Manager section to include specific reference to Mac OS 8.1 for the kPreemptiveThread bug fix.
New ChangeDragBehaviors API defined in the Drag Manager section.
AppleScript 1.4 (aliases in Scripting Additions folder), Font Manager (suitcase limit increase), new HTMLRenderingLib section, new Power Manager 2.0 section, PPC Toolbox (port number information), new Text control panel section, and new Text Encoding Converter 1.5 section.
AppleScript 1.4 (aliases in Scripting Additions folder, mount volume scripting addition note), AppleShare Client 3.8.5 (login security), ColorSync 3.0, File Manager (extents and catalog overwrite prevention), Finder 9.0 (icon positioning), Font Manager (suitcase limit increase), Hardware Requirements (boot from CD requirement), LaserWriter 8 version 8.7 (PostScript filters), Mac OS USB (USBPending fix), Memory 8.1.1 control panel, Multilingual Text Editor 1.1, Multitasking/Multiprocessing 2.1, Open Transport 2.5 (kOTPortNetworkChange), PlainTalk 2.0.2 (version numbers), PPC Toolbox (port number information), and StdCLib 3.5 (alignment of vector data in printf).
Other changes include updated documentation links and some cosmetic revisions.
Acrobat version of this Note (364K).


Many of our readers and industry affiliates know that in the world of recycling, certifications are key. E-Stewards, R2 RIOS, and various other ISO Certifications are essential in demonstrating to potential customers and the general public that your operations are safe, sustainable, and responsible.
It is important to understand and remember that, although these certifications are important and crucial in our industry, sometimes they are easy disguises for what really goes on. Just the other day it was reported that one of the largest recycling companies in the US, 2TRG allegedly abandoned multiple tons of CRT glass in their Cincinnati e-waste facility.
2TRG is a highly audited company with e-Stewards, R2 RIOS, and CAER certifications, yet their actions and conduct reflect differently. Initial estimates for the compliant and comprehensive cleanup of this mess range from $400,000 to $1 million.
So What Is Important, Certifications Aside?
In a world where sustainability and product life-cycles are of major concern, activities like this are of paramount concern. And this could be the tip of the iceberg for 2TRG. The truth is, audits and certifications can only go so far. What is more important is that leaders of the company are legitimately concerned about the environment and their sustainability. Customers and the public alike need to hold these companies accountable in situations such as this.
Cleanlites holds many of the same certifications as 2TRG, yet our commitment and sustainability remain a top priority outside of these audits. We encourage our clients and potential clients to ask questions, and trust us for themselves and be certain that we care about our environmental impact.


What are the top trends and tools for Big Data professionals?
Is it necessary to learn Hadoop to become a Data Scientist?
Why is an HR Certification your Best Bet?
What will be the IT job growth trajectory in 2019?


Organizational decisions are not as effective as they could be because organizational knowledge is not directly connected to the decisions that impact business performance. Decision modeling helps deploy existing knowledge and highlights knowledge gaps that need to be filled.
How do we know if we are making good decisions? When we are confident that we have used all available knowledge in making that decision.
How can we tell if our knowledge is good or bad? There is no clear measure of knowledge but its value is understood and appreciated. We know that there is a lot of effort and investment in increasing organizational knowledge. Procedure Manuals, Training Programs, Collaboration Sites, Intranets, Portals, Share point and others are all geared towards making organizations better through pooling and managing the communal knowledge.
Traditionally we have sought to impart knowledge to our decision makers through formal training programs, on the job training and mentoring. We have given our decision makers elaborate procedure manuals and handbooks. We have buried our decision makers under mountains of paper reports. We have created black-box systems with a mind of their own. And lately, we have been mystifying our decision makers with analytical models and optimization algorithms that are cool but difficult to apply to day-to-day decisions.
The reality is that we have accumulated organizational knowledge that we are fervently hoping our decision makers will somehow absorb, and then desperately wishing that this absorbed knowledge will somehow get applied to the daily decisions important for success and viability.
Don't you think this is rather inefficient?
Managing and applying organizational knowledge is a good idea and makes sense at a gut level. The big assumption is that the organization will be that much better because of 'smart' people. They will do a better job and everyone will benefit. This is fine at an abstract level but if the process has to be managed and improved, we need to delve deeper into the mechanics of how this occurs.
What if we evaluate the quality of decisions being made as a stand-in for the quality of organizational knowledge?
But wait, no one has formally defined what the decisions are that need to be made well for success. There are a very large number of operational decisions being made every day in every organization, along with quite a few tactical and strategic decisions. All of these decisions just happen and influence organizational performance metrics, but there has been no formal effort at listing or describing these decisions. If decisions cannot be described, they cannot be improved systematically.
The first order of business is then to discover and describe the decisions that matter. In most cases you can find them in the daily processes and also by inspecting daily reports and metrics. Since something is being done (activity) every day to achieve a performance level (metrics), there must be a bunch of decisions being made at every step. Some of these decisions may actually be embedded within our systems, like calculating a discount for a customer's order. These automated decisions are every bit as important as 'manual' or human decisions within the organization. A combination of all of these decisions being made in a collaborative fashion dictates the organization's destiny.
Now how are these decisions made? If we can describe the decision making with some rigor it would be possible to improve the overall decision by improving individual components.
What are the components of decision making? We need a suitable set of information coming into the decision that needs to be evaluated against all available knowledge at that point in time — then going on to pick the best choice from a finite set of options.
There you have it — making a decision requires information and knowledge.
Getting good, trusted information is a challenge of course. There are many data quality and data management initiatives underway to make sure that we have the best data available for making decisions. And it is a moving target because we have not described the decisions first. Despite all that we do have a reasonable handle on where the data is.
On the knowledge front, the situation is much bleaker. Most organizations have not realized that organizational knowledge is a business asset that can be curated and brought to bear systematically towards making organizations better. The few organizations that do appreciate the strategic nature of knowledge are also making heroic efforts for collecting, tagging and deploying organizational knowledge — similar to the brave souls organizing data for data's sake. Information Sources and Knowledge Sources in most organizations are either not being governed or being governed too much — with no clear purpose in either case, apart from the basic instinct for reporting 'everything'.
Decision modeling using the Decision Model Notation (DMN) is a proven, powerful technique not only for a sharp focus on decisions but also for clarifying knowledge requirements. The visual, simple notation for decision modeling is easily understood by all users and gives a degree of structure to how we would describe decisions in a natural language.
The overall structure makes it simpler to identify just the right type, quantity and quality of knowledge required to make specified decisions. All efforts and investments can then be focused on curating the knowledge sources that are already accessible, and on procuring the knowledge that is not yet available.
Decision modeling uncovers and structures organizational knowledge for success.
Read our white paper, Decision Modeling with DMN, to learn more.


With big data analytics, high-performance databases, and server virtualization, the demand for performance has never been higher. One of the biggest breakthroughs for data center operators has been the solid-state drive (SSD), which provides a significantly faster and more reliable alternative to the hard disk drive (HDD).
But not all SSDs are created equal. Many SSDs today still rely on interfaces that were designed with older technology in mind. This article explains the differences between SATA SSDs and NVMe SSDs, helping you understand the importance of choosing a progressive data center that offers cutting-edge data storage solutions to guarantee maximum performance and stability to meet the needs of modern internet applications.
Nearly two decades after its introduction, Serial ATA (SATA), a computer bus interface that connects host bus adapters to mass storage devices, is still the most dominant interface for storage in systems today. Because of its prevalence, the became the interface of choice for the first generation of SSDs, which are now referred to as SATA SSDs.
The problem is that SATA was designed with older technology in mind, and its transfer rate is capped at 600 MB/s because it uses the legacy protocol Advanced Host Controller Interface (AHCI), to connect the CPU/memory subsystem. It also suffers from high latency, making it unfit for real-time internet applications.
To overcome the limitations of SATA, more than 80 companies across the industry developed the NVM Express (NVMe) specification and released it on March 1, 2011. NVMe solves the problem that occurs when SSDs collide with legacy computer bus interfaces, bottlenecking, by capitalizing on the low latency and internal parallelism of solid-state storage devices and delivering over 3,000 MB/s of throughput.
When we at BaCloud decided to introduce a new range of dedicated Linux/Windows PRO VPS servers, NVMe technology was an easy choice.
As you can see from the graph above, NVMe SSDs are approximately 5 times faster than SATA SSDs. They also have much lower latency, which can largely be attributed to a streamlined storage stack and the fact that NVMe specification requires no register reads to issue a command.
With NVMe over Fabrics (NVMe-oF), a technology specification designed to enable nonvolatile memory express message-based commands to transfer data between a host computer and a target SSD or system over a network, the distances across which an NVMe host device and NVMe storage drive or subsystem can connect can be significantly extended while maintaining the very low latency available via NVMe.
Raw performance gains are always exciting, but data centers must deliver performance in a way that matters to the end-user. We at BaCloud have decided to exclusively use NVMe SSDs for our USA data center because we want our customers to benefit from extremely low annual failure rates, which are possible to achieve only with cutting-edge storage technology—not legacy solutions.


GCRS specialises in providing opportunities to develop skills and achieve goals through participation in recreation and sport. We have more than 180 sport, recreation and active lifestyle programs each and every week.
Click on the icon to choose an activity category.


Aliyun OSS will support shallow copy which means server will only copy metadata when copy object operation occurs.
With shallow copy, we can use copyObject api instead of multi-part copy api if we do not change object storage type & encryption type & source object is uploaded by Put / Multipart upload api.
We will try to use copyObject api, and check result. If shallow copy disabled for this object, then we will use multipart copy. So, I will remove fs.oss.multipart.upload.threshold configuration.


text:
Carriera

Palmarès

Nazionale

Club

Mannheim: 2014-2015

Individuali
Portiere dell'anno della DEL: 1
2012-2013
Maggior numero di shootout nella DEL: 4
2008-2009, 2013-2014, 2014-2015, 2015-2016
Miglior portiere del campionato del mondo di hockey su ghiaccio: 1
2010
MVP del campionato del mondo di hockey su ghiaccio: 1
2010

Altri progetti

Collegamenti esterni

redpajama_set_name: RedPajamaWikipedia


text:
Q: Setting Cursor To The Beginning of QLineEdit With Inputmask In PyQt5 I created a code for desktop software. That, In QLineEdit, I set an inputmask. When I run my program and clicked that lineedit, I saw my cursor position at the end of the line. Below is my some code....
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(380, 191)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(80, 20, 211, 41))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.lineEdit.setFont(font)
        self.lineEdit.setObjectName("lineEdit")
        self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_2.setGeometry(QtCore.QRect(80, 110, 211, 41))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.lineEdit_2.setFont(font)
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.lineEdit_2.setInputMask("00.00")
        self.lineEdit_2.setCursorPosition(0)
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

I already mentioned that setCursorPosition(0) after that. But it does not works. I want that cursor at beginning of that lineedit when I click my lineEdit_2.
self.lineEdit_2.setInputMask("00.00")
self.lineEdit_2.setCursorPosition(0)

A: You can install an event filter on the line edit and react to any mouse click event:
from PyQt5 import QtCore, QtWidgets
from ui_mainwindow import Ui_MainWindow

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.lineEdit_2.installEventFilter(self)

    def eventFilter(self, source, event):
        if source == self.lineEdit_2 and event.type() == QtCore.QEvent.MouseButtonPress:
            self.lineEdit_2.setFocus(QtCore.Qt.MouseFocusReason)
            self.lineEdit_2.setCursorPosition(0)
            return True
        return super().eventFilter(source, event)

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

Note that you should write the above in a separate script which you'll use as your main program; the code you posted, taken from the output of pyuic, should never be modified. Read more about using Designer.

redpajama_set_name: RedPajamaStackExchange


Searching for hotels in Toora (South Australia) or Toora accommodation? Toora is a small town in Victoria, with a population of only 674. This town is situated in the Gippsland Region, where many natural attractions are located such as the Agnes Falls Scenic Reserve. Adventure tourists will be more than satisfied to walk on these roads and view the rolling hills and rivers.
This quiet town has good accommodation and hotel options for all kinds of tourists. Miranda Bed and Breakfast, Gumleaf Cottage, and Toora Tourist Park are just some of the best accommodations in Toora.
- Browse the Toora Map or compare Toora accommodation from Hotels, Motels, B&Bs, Lodging & Hostels to Holiday & Caravan Parks.
Resources, Information and guides on Toora. For things to do, attractions, restaurants, holidays and sites refer below.
About Page: Toora Motels, Family Packages, Holiday Stays, Caravan Parks, Apartments, Hostels, Last Minute Toora accommodation, 5 star Luxury to 2 star Budget hotels and resort deals. Compare Toora hotel reservations, bookings and cheap rates.


Barnet, Enfield and Haringey Mental Health NHS Trust (BEH) are a large provider of integrated mental health in Barnet, Enfield and Haringey and also community health services in Enfield. We currently employ 2,900 staff and our annual income in 2017/18 is £195 million. We serve a population of just over a million.
We provide specialist mental health services to people living in the London boroughs of Barnet, Enfield and Haringey, and a range of more specialist mental health services to our core catchment area and beyond. Following the transfer of Enfield Community Services in 2011, we also provide the full range of child and adult community health services in Enfield and are increasingly integrating these with our mental health services to provide a range of more holistic services.
In 2014 we were awarded 'University Affiliated' by Middlesex University. The 'University Affiliated' status will facilitate stronger working relations, including the opportunity for experienced academics at Middlesex and experienced clinicians within the Trust to co-produce mental health education and research projects which meet the needs of local people. This agreement will enhance the current partnership between the two organisations, demonstrating a strong commitment to education, research and development.
To help people 'Live, Love and Do'.
You can read more about BEH on the Trust website - www.beh-mht.nhs.uk.


Like Movies? Like Gaming? Like Writing? Have Thoughts? WRITE FOR US!
Today Ubisoft released new information for the new Rainbow 6 game, Rainbow 6 Patriots. Team Rainbow faces a new and very real threat known as the "True Patriots," a highly-trained, well-organized group of militias. The True Patriots are capitalizing on the growing sense of frustration and anger in a modern day America that they feel is irrevocably corrupted by greedy politicians and corporate special interests. Lead by a calculating figurehead named Tredway, this grassroots, homespun, terrorist organization will stop at nothing to overthrow the government and financial institutions to reclaim their country. Capturing the reality of modern-day terrorism, players will take on the role of a new Team Rainbow member as they face critical scenarios that will require them to make tough ethical decisions in order to stop this new breed of terrorists.
· UNPRECEDENTED NARRATIVE – Patriots' storyline explores an ultra-realistic what-if scenario inspired by real events and characters. The game will allow players to experience events from multiple perspectives creating an unprecedented level of immersion.
· A NEW THREAT FOR A NEW TEAM – Terrorism has evolved and Team Rainbow must face an organized militia of home-grown insurgents. As the leader of a new squad, players will wrestle with difficult ethical decisions and determine if the doing-whatever-it-takes mentality is needed to stop the enemy.
· ENHANCED SQUAD MANAGEMENT – At the press of a button, the Rainbow squad will perform the most efficient and deadly tactic given the context of the situation. When extreme measures are required, or when players call for it, you can take full control of your squad to plan the perfect assault.
· EVOLVED COMBAT – The game's combat techniques have been pushed to the next level with cover and weapon systems redesigned to accommodate every combat situation. New Rappel and Breach mechanics are now enriched with multiple new techniques including Wall & Ceiling Breach, Fast Rope Rappel, inverted 'Aussie Style Rappel', Infiltrate & Subdue, to name a few.
· INTENSE MULTIPLAYER EXPERIENCE – Players will be rewarded for working as a team and mastering the game's new features that enhance communication and tactical execution between teammates. Once such feature found in the pre-game online lobby is the Sandtable, a holographic display that helps acquaint players with the level maps before they jump into the action. This will help players strategically coordinate attacks and add a new dimension to squad tactics.
· SURPRISE AND OVERPOWER ENEMIES – Utilize the game's new Scan mode to strategically breach and infiltrate areas. This new tool will provide a thermal read on the situation, allowing you to determine the squad's best course to overwhelm and defeat enemies.


House Republicans have unveiled the language of the long-term Continuing Resolution and are giving the pro-life community more good news when it comes to de-funding abortion and pro-abortion groups.
The deal pro-life Speaker John Boehner arranged late Friday night allows for the reinstatement of the ban on funding abortions in the District of Columbia, which is projected to save the lives of approximately 1,000 unborn children annually who may have otherwise become victims of taxpayer-funded abortions. The deal also forced the Senate to allow a vote on revoking the taxpayer funding of the Planned Parenthood abortion business, something pro-abortion Senate Democratic leader Harry Reid previously said he would not allow.
Today, in unveiling the language of the Continuing Resolution for fiscal year 2011, House Republicans have made further cuts that are sure to please pro-life advocates. Meanwhile, Reps.
Mark it on the calendar. The next big deadline in Washington is May 16, if not earlier.
Treasury Secretary Tim Geithner now estimates that the nation's debt ceiling will be reached no later than that date. In a letter to Senate Majority Leader Harry Reid, Geithner wrote that Congress must act in a matter of weeks to raise the limit or face a fiscal calamity potentially worse than the one from which the nation is recovering.
Senate Democratic Leader Harry gave a speech on the floor of the Senate this morning confirming Senate Democrats will not budge on requiring Americans to fund the Planned Parenthood abortion business in the federal budget.
"I'm not going to be part of that. I won't do it," he said about efforts to cut Planned Parenthood funding on the part of House Republicans.
House Speaker John Boehner dashed cold water Thursday on claims that the two parties had agreed on how much to cut from the rest of this year's budget, saying Republicans would "continue to fight" for an earlier budget proposal Democrats adamantly oppose.
Democrats had earlier claimed negotiators were working on a proposal for around $33 billion in spending cuts. Vice President Biden reported "good progress" on budget talks, and Senate Majority Leader Harry Reid, D-Nev., went so far as to claim the parties had "agreed upon a number."
President Obama has signed a second short-term spending bill to keep the government running, this time through April 8, giving lawmakers more time to agree on a package of spending cuts Republicans are demanding.
Obama signed the bill Friday at the White House before he heads out on a five-day tour of Latin America.
In a new interview, Speaker John Boehner talked about the upcoming strategy behind the next steps in the battle to de-fund Planned Parenthood and he urged pro-life advocates to be patient.
The House of Representatives approved an amendment Congressman Mike Pence offered to the continuing resolution bill to keep the federal government running. The amendment ensures the Planned Parenthood abortion business and its affiliates are not eligible for any federal taxpayer dollars across any federal programs or departments.
Although the House voted on a strong margin to de-fund Planned Parenthood, the next steps are more tenuous. The battle to yank federal funding is complicated by the fact that Senate Leader Harry Reid and his pro-abortion Democratic colleagues control the Senate agenda and pro-abortion President Barack Obama occupies the White House.


text:
2717 Galilee Avenue, Zion, IL, 60099
Courtesy of: First Weber, Inc
Address: 2717 Galilee Avenue
City: Zion
Neighborhood: Zion
Excellent investment opportunity. Unique 6 Unit generating great cash flow. 5 of 6 units currently rented.
Courtesy of: First Weber, Inc Based on information submitted to the MRED as of date and time shown below. All data is obtained from various sources and has not been, and will not be, verified by broker or MRED. MRED supplied Open House information is subject to change without notice. All information should be independently reviewed and verified for accuracy. Properties may or may not be listed by the office/agent presenting the information. © 2022. http://www.mredllc.com/comms/resources/DMCA_Notice.pdf Updated: 31st January, 2023 6:43 AM (UTC)

redpajama_set_name: RedPajamaCommonCrawl


I'm taking a slight diversion now, to show you how the main worker processor runs. There are two parts to it – the actual worker, written in PHP, and the script that keeps running it.
For testing with return from the worker, we'll just return a random number. In order to avoid returning a normally used exit value, I've picked a few numbers for our controls, up around the 100 range. By default a 'die()' or 'exit' will return a '0', so we can't use that to act on – though we will use it as a fall-back as a generic error. Ideally, we won't get one, instead we want the code in all the workers to just run as planned, and then have the worker execute a planned restart – and we will just immediately restart. We may also choose to have the worker process specifically stop – and so we'll have an exit code for that. If there are any codes we don't understand, we'll slow the system down with a 'sleep()' to avoid running away with the process.
The actual script that is run from the command line is a pretty simple BASH script – all it's got to do is to loop, until it gets a particular set of exit values back.
If its any other value, we pause, and restart.
The bash command 'exec $0 $@' will re-run the current script ($0) with the original arguments ($@) – but with the 'exec', replaces the current process with a specified command. Normally, when the shell encounters a command, it forks off a child process to actually execute the command. Using the exec builtin, the shell does not fork, and the command exec'ed replaces the shell.
Save both the PHP and bash script, and then you can start the script with 'sh runBeanstalkd-worker.sh', run it a few times to see a lot of (deliberate) errors that cause the bash script to pause before restart, immediately restart and finally exit.
With this bash script in place, we can now run the script as many times as we need – and it will keep running, until we specifically tell it to exit. As usefully, we can exit the php worker, and have it execute a planned restart – which will clear any overheads that the script may have picked up with memory or resource allocation.
Next time, we'll put some simple tasks into the queue.
Thanks for the article series. It is very helpful. I have some questions after reading your articles. How should we decide whether to do a planned pause/restart or planned restart?
And what are the criteria used to trigger the planned restart and planned complete exit?
That depends very much on what sort of things your workers are doing. You might decide that if a worker has run, but there's nothing for them to do, you'll let the shell script pause for a while before it restarts. Equally, you might also elect to just have the beanstalk client block, waiting for the next job to become available – in that case, you might not have need of any planned pauses in the shell script at all.
The only difference between a planned and unplanned restart is that an unplanned restart was probably a problem, and so waiting a little while before you try again stops things from spiraling out of control by running too quickly.
1/ If you will be keeping an eye on it, you could just run it within 'screen' or the more recent tmux). Both allow processes to keep running while you disconnect. I've had instances of 'screen' running for literally months.
2/ Upstart, or init.d scripts aren't too hard to write, and considering they are probably already running most of the daemons on your server, they are a great choice that are already available. If you need to run more than one worker on the same machine then you would need multiple copies, so it's not so useful if you are going to run more than a few.
3/ If you will be running many copies (and I've done more than 50 identical workers before on the same machine), then supervisord (http://supervisord.org/) has the max number of workers as a simple number in the configuration, as as many as you need, up to the limit can be started.
Actually it was because my PHP script was echoing some data and you can't run the shell script without redirecting the output.
Hi! Questions are good, I'm happy to help out.
Putting a 'sh' in there is equally valid, but I think that's just the way you are calling it that you need it.
I'm going to guess that the current directory, where the script you are running is placed, is also on the executable path (run set | grep -a ^PATH and look for a lone ., possibly at the start or end of the PATH). That's actually not recommended to do – see the below URLs, and particularly the notes about security.
The $0 in the script needs to be able to re-run the same command, but it doesn't get the 'sh' call. It needs to be able to run what it does get.
You can also add a process-ID at the end there (those are the numbers in brackets) to narrow down the part of the tree to look at.
Here's a couple of peoples thoughts as to why it's not a great idea to have the current directory in the PATH.
1 Pings/Trackbacks for "Doing the work elsewhere – Sidebar – running the worker"