TweetFollow Us on Twitter

Jun 97 - Newton Q and A

Volume Number: 13 (1997)
Issue Number: 6
Column Tag: develop

Newton Q&A: Ask the Llama

by Apple Developer Technical Support Group

Q: I'm probably missing something obvious, but when I try to use an asynchronous output call in some situations, I get an exception, while synchronous calls seem to work fine. For instance, this code fails consistently with bus errors:

endpoint:output(headerCache,
   nil,
   {async: true,
   form: 'string,
   completionScript: func(ep, options, result)
      self:SendData(endpoint, qfCursor)});

On the other hand, this code works fine:

endpoint:output(headerCache, nil, nil);
self:SendData(endpoint, qfCursor);

I'd really prefer to use asynchronous calls, but I keep running into problems. Do you have any suggestions?

A: The key thing you're missing is that self (that is, the receiver) is not what you expect in your asynchronous callback. In your first example, you pass a completion frame as the third argument of the Output message. It's this frame that will be self (that is, that will be the context of the completionScript). This means that you send the sendData message to that completion frame.

What you probably want is to send the message to the ep argument passed to the completionScript. This will be the endpoint to which you sent the Output message. In general, you will have set this endpoint to have a _parent slot that points to your application. Assuming that the sendData method is in either the endpoint or your application, you would modify the body of the completionScript to be

ep:sendData(endpoint, qfCursor);

The same restrictions apply for Input and Option calls as well.


Q: I have a pop-up view that has an icon with some text, and I'd like the user to be able to edit the icon. I call MakeShape on the icon and draw it into a bitmap. I then have an interface for the user to modify the icon. The problem occurs when I try to display the modified icon in the pop-up. It either doesn't show up, has incorrect bounds, or throws an exception. Before I modify the icon, it looks like something that would be returned by GetPictAsBits:

{data: <bits, Length 42>, bounds: {0,0,15,15}, }

Once I call MakeShape on the icon, it looks like this:

{class: bitmap, bounds: <boundsRect, Length 8>,
   data: <pixels, Length 54>, }

The pop-up chokes on this when I try to display it. First it threw an exception because it was expecting a frame instead of a binary object in the bounds frame. So I called SetBounds to set the bounds frame to {0,0,15,15}. This enabled the pop-up to open, but the icon wasn't in the right place. Fiddling with the bounds frame didn't seem to help. So I'm guessing that the next problem is that I have pixels instead of bits in the data slot. I tried calling SetClass on the slot to change it from pixels to bits. That actually didn't throw an exception, but the length is still different and it didn't look right. How can I get my shape or bitmap back into a form that the pop-up will be happy with?

A: The basic problem is that the binary object used by MakeShape to represent the picture (that is, <pixels, Length 54>) is not the same as that used in the bitmap structure (<bits, Length 42>). You have a couple of choices. Since the formats are documented, you can write some code to convert the object returned by MakeShape into a NewtonScript bitmap object. The other option, which seems more complex but is probably easier to implement, is to use the MakeShape representation only for your icon editor. Let the user modify the MakeShape representation, but keep track of the changes and use them to modify the bitmap. So, while the user is editing the icon, there will be two data objects: the original icon representation using the bitmap data structure and the MakeShape representation that the user sees and modifies. As the user changes the MakeShape object, your code is also modifying the bitmap object.

As a related side note, you can use DrawIntoBitmap to get the bits that represent the shape.


Q: In an application I'm building, I want to keep a serial communication session open with a GPS unit 24 hours a day, unattended by the user. Both the MessagePad and the GPS unit are powered by the car. The GPS unit sends out data approximately every two seconds. I'm using the "Basic Serial" Newton DTS sample code as the starting point. The communications code in the application works fine except that occasionally I get a -18003 exception, which results in a kMessage_BufferOverrun message. I've tried turning on useSoftFlowControl and useHardFlowControl in the kCMOInputFlowControlParms parameter frame inside the MBuildConfigOptions method, but that doesn't seem to help.

Can you explain when/why this exception is raised? Can I safely ignore the exception by revising the MNotifyError method? What can I do to prevent the occurrence of the exception in the first place?

A: A -18003 error can indicate several things, including bad parity or a framing error. Usually it indicates that the Newton's UART (SCC chip) buffer has overrun. You can just ignore this error, repost the input specification, and go on your merry way.

To repost the input specification, call the endpoint's SetInputSpec with the relevant input specification. Before reposting the input specification, you may also want to flush the communication tools buffers using the serial discard data option (kCMOSerialDiscard) and flush the NewtonScript buffer with FlushInput. Regardless of whether you flush, you will have lost some data in the process, although for most GPS applications that should be fine. You may also want to try increasing the size of the serial input buffer; this might give you just enough time to process all the data.

A better solution would be to have the GPS receiver support some type of flow control, though this will depend on the manufacturer of the unit.


Q: I have a view with a protoKeyboard button. The input lines within the view all take numeric input, and when the user double-taps, the numeric keypad pops up. But the keyboard button brings up the full QWERTY keyboard instead. How can I make the button open the numeric keypad?

A: The keyboard button is behaving correctly. If you don't specify which keyboard to open, it will always open the global alphanumeric keyboard. There are two ways you can get the behavior you want:

  • Override the 'defaultKeyboard slot in your protoKeyboardButton. This slot contains the keyboard that you want to use. In this case you want the symbol 'numericKeyboard, which specifies the default numeric keyboard.
  • Override the buttonClickScript in the protoKeyboardButton. You can use the OpenKeypadFor function and specify your input line as the view. This will usually do the right thing since calling OpenKeypadFor has just about the same effect as the user's double-tapping in an input line.

Q: I noticed that the NTK project preferences dialog lets you compress your application. How much slower will the application run if I do this?

A: Unfortunately, there's no simple answer to this question. The speed of execution depends on a number of factors, including how many times the system has to uncompress pages from your application into a cache and how full the system heap is.

The best way to find out is to try your application with the three different compression options: none, compressed, or faster compression. Make sure that you perform your tests a number of times and under different memory-loading conditions. If your application will be doing communications, that's a good thing to test. You can also use HeapShow (which comes with NTK) to fill the system and NewtonScript heaps to simulate low-memory conditions.

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Sierra Cache Cleaner 11.0.6 - Clear cach...
Sierra Cache Cleaner is an award-winning general purpose tool for macOS X. SCC makes system maintenance simple with an easy point-and-click interface to many macOS X functions. Novice and expert... Read more
Live Home 3D Pro 3.1.2 - $69.99
Live Home 3D Pro, a successor of Live Interior 3D, is the powerful yet intuitive home design software that lets you build the house of your dreams right on your Mac. It has every feature of Live Home... Read more
Pinegrow 3.04 - Mockup and design webpag...
Pinegrow (was Pinegrow Web Designer) is desktop app that lets you mockup and design webpages faster with multi-page editing, CSS and LESS styling, and smart components for Bootstrap, Foundation,... Read more
DiskCatalogMaker 7.1.2 - Catalog your di...
DiskCatalogMaker is a simple disk management tool which catalogs disks. Simple, light-weight, and fast Finder-like intuitive look and feel Super-fast search algorithm Can compress catalog data for... Read more
Apple iTunes 12.6.2 - Play Apple Music a...
Apple iTunes lets you organize and stream Apple Music, download and watch video and listen to Podcasts. It can automatically download new music, app, and book purchases across all your devices and... Read more
Transmit 5.0 - Excellent FTP/SFTP client...
Transmit is an excellent FTP (file transfer protocol), SFTP, S3 (Amazon.com file hosting) and iDisk/WebDAV client that allows you to upload, download, and delete files over the internet. With the... Read more
Adobe Lightroom 6.12 - Import, develop,...
Adobe Lightroom is available as part of Adobe Creative Cloud for as little as $9.99/month bundled with Photoshop CC as part of the photography package. Lightroom 6 is also available for purchase as a... Read more
Google Earth 7.3.0.3830 - View and contr...
Google Earth gives you a wealth of imagery and geographic information. Explore destinations like Maui and Paris, or browse content from Wikipedia, National Geographic, and more. Google Earth combines... Read more
Cocktail 10.4.1 - General maintenance an...
Cocktail is a general purpose utility for macOS that lets you clean, repair and optimize your Mac. It is a powerful digital toolset that helps hundreds of thousands of Mac users around the world get... Read more
iMazing 2.3.2 - Complete iOS device mana...
iMazing (was DiskAid) is the ultimate iOS device manager with capabilities far beyond what iTunes offers. With iMazing and your iOS device (iPhone, iPad, or iPod), you can: Copy music to and from... Read more

Latest Forum Discussions

See All

The best deals on the App Store this wee...
There are quite a few truly superb games on sale on the App Store this week. If you haven't played some of these, many of which are true classics, now's the time to jump on the bandwagon. Here are the deals you need to know about. [Read more] | Read more »
Realpolitiks Mobile (Games)
Realpolitiks Mobile 1.0 Device: iOS Universal Category: Games Price: $5.99, Version: 1.0 (iTunes) Description: PLEASE NOTE: The game might not work properly on discontinued 1GB of RAM devices (iPhone 5s, iPhone 6, iPhone 6 Plus, iPad... | Read more »
Layton’s Mystery Journey (Games)
Layton’s Mystery Journey 1.0.0 Device: iOS Universal Category: Games Price: $15.99, Version: 1.0.0 (iTunes) Description: THE MUCH-LOVED LAYTON SERIES IS BACK WITH A 10TH ANNIVERSARY INSTALLMENT! Developed by LEVEL-5, LAYTON’S... | Read more »
Full Throttle Remastered (Games)
Full Throttle Remastered 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: Originally released by LucasArts in 1995, Full Throttle is a classic graphic adventure game from industry legend Tim... | Read more »
Stunning shooter Morphite gets a new tra...
Morphite is officially landing on iOS in September. The game looks like the space shooter we've been needing on mobile, and we're going to see if it fits the bill quite shortly. The game's a collaborative effort between Blowfish Studios, We're Five... | Read more »
Layton's Mystery Journey arrives to...
As you might recall, Layton's Mystery Journey is headed to iOS and Android -- tomorrow! To celebrate the impending launch, Level-5's released a new trailer, complete with an adorable hamster. [Read more] | Read more »
Sidewords (Games)
Sidewords 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: Grab a cup of coffee and relax with Sidewords. Sidewords is part logic puzzle, part word game, all original. No timers. No... | Read more »
Noodlecake Games' 'Leap On!...
Noodlecake Games is always good for some light-hearted arcade fun, and its latest project, Leap On! could carry on that tradition. It's a bit like high stakes tetherball in a way. Your job is to guide a cute little blob around a series of floating... | Read more »
RuneScape goes mobile later this year
Yes, RuneScape still exists. In fact, it's coming to iOS and Android in just a few short months. Jagex, creators of the hit fantasy MMORPG of yesteryear, is releasing RuneScape Mobile and Old School RuneScape for mobile devices, complete with... | Read more »
Crash of Cars wants you to capture the c...
Crash of Cars is going full on medieval in its latest update, introducing castles and all manner of new cars and skins fresh from the Dark Ages. The update introduces a new castle-themed map (complete with catapults) and a gladiator-style battle... | Read more »

Price Scanner via MacPrices.net

Sale! New 15-inch MacBook Pros for up to $150...
Amazon has the new 2017 15″ MacBook Pros on sale for up to $150 off MSRP including free shipping: – 15″ 2.8GHz MacBook Pro Space Gray: $2249 $150 off MSRP – 15″ 2.89Hz MacBook Pro Space Gray: $2779 $... Read more
DEVONthink To Go 2.1.7 For iOS Brings Usabili...
DEVONtechnologies has updated DEVONthink To Go, the iOS companion to DEVONthink for Mac, with enhancements and bug fixes. Version 2.1.7 adds an option to clear the Global Inbox and makes the grid... Read more
15-inch 2.2GHz Retina MacBook Pro, Apple refu...
Apple has Certified Refurbished 2015 15″ 2.2GHz Retina MacBook Pros available for $1699. That’s $300 off MSRP, and it’s the lowest price available for a 15″ MacBook Pro. An Apple one-year warranty is... Read more
13-inch 2.3GHz Silver MacBook Pro on sale for...
B&H Photo has the new 2017 13″ 2.3GHz/256GB Silver MacBook Pro (MPXU2LL/A) on sale for $1399 including free shipping plus NY & NJ sales tax only. Their price is $100 off MSRP. Read more
Apple Tackles Distracted Driving With iOS 11...
One of the most important new features coming in iOS 11 is Do Not Disturb while driving, intended to help drivers stay more focused on the road. With Do Not Disturb while driving, your iPhone can... Read more
iMazing Mini for Mac: Free Automatic and Priv...
Geneva, Switzerland-based indie developer DigiDNA has released iMazing Mini, their free macOS utility designed to automatically back up iOS devices over any local Wi-Fi network. The app offers users... Read more
Clearance 2016 13-inch MacBook Airs, Apple re...
Apple dropped prices recently on Certified Refurbished 2016 13″ MacBook Airs, with models now available starting at $809. An Apple one-year warranty is included with each MacBook, and shipping is... Read more
9.7-inch 2017 iPads available for $299, save...
B&H Photo has 2017 9.7″ 32GB WiFi iPads on sale for $30 off MSRP for a limited time. Shipping is free, and pay sales tax in NY & NJ only: – 32GB iPad WiFi: $299, $30 off Read more
Welcome to the new MacPrices.net!
Welcome to the newly redesigned MacPrices.net! MacPrices has been comprehensively redesigned from the ground up over the past couple of weeks. The new design is cleaner, with less clutter, minimal... Read more
Clearance iMacs available for up to $370 off...
B&H Photo has clearance 21″ and 27″ Apple iMacs available for up to $370 off original MSRP, each including free shipping plus NY & NJ sales tax only: – 27″ 3.3GHz iMac 5K: $1929 $370 off... Read more

Jobs Board

Frameworks Engineering Manager, *Apple* Wat...
Frameworks Engineering Manager, Apple Watch Job Number: 41632321 Santa Clara Valley, California, United States Posted: Jun. 15, 2017 Weekly Hours: 40.00 Job Summary Read more
Manager, *Apple* Media Products - Apple Inc...
Job Summary The Apple Media Products Discovery, Fraud and Abuse team is responsible for protecting the integrity of Apple services. As a manager of the team, you Read more
*Apple* Watch, Accessories, Engineering Proj...
Job Summary Engineering Project Manager, Apple Watch Accessories. The Accessories group is looking for an Engineering Project Manager (EPM) to lead the design and Read more
Sr. Technical Writer - *Apple* Information...
Changing the world is all in a day's work at Apple . If you love innovation, here's your chance to make a career of it. You'll work hard. But the job comes with more Read more
Full Stack Web Developer - *Apple* Maps Tra...
Changing the world is all in a day's work at Apple . If you love innovation, here's your chance to make a career of it. You'll work hard. But the job comes with more Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.