jump to navigation

Making Progress! 26 June 2009

Posted by ojmason in Apple, iphone, objective-c, programming.
1 comment so far

DAY 11 and the pace is picking up. I managed to sort out two of the four tabs of the app, one including a table display of Esperanto/English dictionary entries (with the proper Esperanto diacritics), and the other one being a live-search on the English gloss entries. This one even pops up an automatic keyboard when first selected; the tab bar controller sends it a message when it has been activated. I even managed to answer a question on stackoverflow.com on that issue.

I also found somewhere a hint on how to automatically shrink the label size if the text is too long, wrote a converter from the Esperanto x-notation to unicode, etc. Really pleased! Both of these will appear here later.

One thing I don’t like too much is writing all the UITableViewDelegate methods when using a table. Quite a lot of boiler-plate code, but then, it is quite powerful. I just couldn’t be bothered writing yet another set of those methods for the final tab, the info view part. But there is nothing technically difficult with it. Objective-C is also getting easier and easier, and the auto-completion feature and API doc integration of XCode really helps. Though I think for serious code I will still use vile…

That leaves pretty much only the core part of the app: the Esperanto morphological analyser. I will implement this as a finite state machine, and working with Cocoa has given me the idea to implement it using delegates; an abstract hull which calls methods on the delegates whenever it needs to retrieve data, or match something. I have the feeling that this is pretty similar to Erlang’s OTP frameworks.

It is a really rewarding experience to see your own app on the iPhone. If only I was better at designing the tab bar icons! And I can already foresee one objection: one of the tabs has a star icon, the star being the Esperanto symbol. I think I need to change that, as the star is reserved for the ‘favourites’ meaning, and I don’t think Apple would appreciate the use of a star (even if it looks slightly slimmer) with another meaning.

More problems solved 24 June 2009

Posted by ojmason in Apple, iphone.
1 comment so far

DAY 10, second part. I was really annoyed by those database errors, and built in assertions to check for the size of the file, and whether the file existed at all. I think sqlite creates a database if the file doesn’t exist, and on subsequent runs the database is then empty and failure happens.

Then I had the nice situation where the program worked in the simulator, but not on the device (I wanted to check the speed on the actual phone). Again, first the file doesn’t exist, and then it’s empty. XCode didn’t seem to copy the file over. Finally it dawned on me, as I was searching for mentions of problems with copying files into the documents folder: my database file was not in the documents folder, it was within the application bundle. I thought about copying it over when the app first starts, but then, why bother? It’s a read-only database, so all I needed to do was to change the path in the db init code, using the application bundle instead of the documents folder, and hey presto, success!

I guess the problem was that I looked at the sample code for db stuff in the iPhone development book. Here a database is created in the documents folder, and I assumed that would be where my db should reside. Confusing, but finally sorted. Now I can go to sleep in peace!

Every character is important 23 June 2009

Posted by ojmason in Apple, iphone, objective-c, programming.
1 comment so far

DAY 10, and a little bit of progress. I found one error, which was about to drive me mad, until I more or less by accident stumbled over the solution on stackoverflow.com; in answering a slightly different question, Rob Napier commented on a bug in the way NSLog() was used.
NSLog(@"Returning %@ rows", [nodes count]);
Here, the -count method returns an int, but the %@ symbol expects an object. Result: a bus error. You need to use %d instead. And here was I, thinking how great it is not to bother with the old printf format codes, using the %@ way instead. I hate the primitive type/object distinction!

I then also found that I had created two superimposed Table Views (did I mention that I don’t really like Interface Builder after all?), so that my table got overwritten and looked all wrong. Now I’m struggling with getting the table to start at the first entry, not the 35th (indexPath seems to start counting sections at 1, rather than 0), and all of a sudden my database won’t work.

Preparing a straightforward SQL statement suddenly fails. I did not change that part of the code, the database file is still the same as it used to be before the error occurred, and I did tell XCode to do a full clean. Still, the error remains.

Grmph.

Tab Bar Errors 22 June 2009

Posted by ojmason in Apple, iphone, objective-c, programming.
add a comment

DAY 9 and more frustration. My ViewControllers didn’t seem to be called, and NSLog messages I put in didn’t appear on the console. And the whole thing crashed without me knowing what was going on.

Having another look at my iPhone development book, I realised the first mistake: the TabBar Controller wasn’t aware of which controllers to call up for the various tabs, something you need to set up in Interface Builder. Still don’t really like that way of doing things, as the fact you’ve done it (or not, as the case may be!) is not easily transparent.

After completing the tab bar attributes, the log messages suddenly turned up, which was good, and it also doesn’t crash. Well, at least not where it used to crash. Now it crashes in the loop where I read stuff out of the SQLITE database, and it crashes after the second iteration. Wonder what the cause is. Probably memory management. Mixing Objective-C and plain C makes things a bit confusing. And I don’t like that NSString is an object you need to allocate, but NSInteger is basically just an alias for int, so a primitive data type rather than an object.

Anyway, more bug hunting coming up. It all feels terribly slow, but then I’m only spending a few hours every couple of weeks on it at the moment.

App Store Idiots 20 June 2009

Posted by ojmason in Apple, iphone.
Tags: ,
1 comment so far

You have to be very careful when looking at reviews and ratings in the iPhone App Store (does ‘App Store’ need the ‘iPhone’ qualifier?). Some reviews are good and point out genuinely positive or negative issues with apps, but the majority can safely be ignored, as shown by the uselessness of their comments (’this app is rubbish, I want my money back’) and their inability to match what they say with what they do. The number of times I have seen reviews where the reviewer wrote ‘This app gets 5 stars from me!’ when they actually gave ONE, or the reverse (’this cr*p app gets zero stars from me’, but giving 5) is astonishing. Either those people are innumerate or incapable of keeping more than one thought in their head.

I haven’t got any hard facts, but have read somewhere that people are paid for leaving positive reviews of some apps and negative reviews of competing ones. That is about the only explanation for the number of stupid reviews that isn’t too depressing.

Table Frustration 31 May 2009

Posted by ojmason in Apple, iphone, objective-c, programming.
add a comment

DAY 8 and after a long pause I have been able to spend a bit more time on my project. And it was certainly frustrating, racking up the hours while trying to work out why it didn’t work. One thing I need to get used to are IDEs; more than a decade of simply editing code in vi and compiling it on the command-line leave you ill-prepared for working with XCode, nice though it may be. Interface Builder is also a great tool, but it hides things from direct view or easy inspection, at least if you don’t know where to look. And then something doesn’t work because you omitted a link from a View to its File Owner, or you set the base class of MainWindow.xib to a wrong class type.

After trying out some table code in the iPhone Development book I finally got a small demo going. I’m now trying to create an indexed grouped table display backed by a sqlite database working. But now it’s approaching midnight and I’m too tired to work out why it stopped working again…

However, despite all of today’s frustration, I’m getting more and more used to coding in Objective-C, which has to be a positive side-effect!

Further Education 11 May 2009

Posted by ojmason in iphone, objective-c, programming.
1 comment so far

I’m too busy with marking and a paper I have to write to get stuck in again. On the way home today I had a thought about the database-backed table view it will include: something regarding sorting which I came across when working at the Cobuild project. More on that later.

But I’m still using the time more or less productively by watching the lectures on iPhone programming from Stanford (available on iTunesU). Not too sure about the performance aspect, but it is great to be able to listen to those guys explaining the intricacies of Objective-C memory management. And I won’t complain, as it is freely available. Thanks for that, Stanford!

Building the database without glare 5 May 2009

Posted by ojmason in Apple, erlang, iphone, objective-c, programming.
1 comment so far

DAY 7 sounds like a lot, but again I’m only working a few hours in the evening after the kids have gone to bed. I have the feeling that there is a lot of ‘boilerplate’ code to write in Objective-C, or Cocoa at least. But then, that might be the problem with GUI-related programming. Erlang doesn’t nearly need as many lines to accomplish something, anything really! But then, the kind of Erlang programs I’ve been working on are basic R&D text-only affairs, not MVC-style user interface programming.

I have today learned how to turn off the iPhone program icon glare (add UIPrerenderIcon=true to info.plist in the bundle), which I think looks better on my icon which had a horizontal line just about where the glare-line was. I also created a SQLite database from a text file. Next I will need to integrate the DB with the table view, for the first part of actual functionality. I keep switching between chapters in the textbook, the one which builds tables and the one which deals with persistent storage. Why did nobody think of doing a database-backed table view? Need to check Apple’s sample code, they’ve got a book-storage one which might do that.

The depressing bit is that I write a little Noddy-program, and it takes me ages. Mainly getting used to Cocoa, Xcode, and Objective-C, but also going back to no garbage collection, and shifting data between classes I know not well at all (NSString, NSArray, etc). I think my niche will be little utilities, rather than glorious games!

Certified 5 May 2009

Posted by ojmason in Apple, iphone, programming.
1 comment so far

DAY 6 was a little frustrating, but ended on a positive note. First I was struggling with Xcode and multiple views, and strange errors. I had my iPhone plugged in to charge, and that made Xcode stop, complaining about the mismatch of a certificate or something. I then went to Apple’s site to activate my developer’s programme membership, and after some messing about with certificates and provisions it finall worked. And, instead of running the emulator, Xcode installed the app on my phone. It’s only a skeleton at the moment, but it is really exciting to see the first bit of software that I wrote myself running on the iPhone itself!

I then re-did the icon, using a darker colour, as the phone put in a highlight by itself, and it looks better that way. I need to do more icons now, as my tab-bar is text only at present. And then I need to code the actual program!

Program Development By Step-wise Refinement 26 April 2009

Posted by ojmason in Apple, iphone, objective-c, programming.
2 comments

DAY 5, and I’m making my first steps in Objective-C, other than keying in sample programs and trying little things out. It’s been such a long time since I had to worry about memory management, though it looks relatively easy, compare to original C. Still, would be better if one didn’t have to worry about it.

After I got into the Erlang mind-set with my most recent programming, I need some time to get back into C. I’m following a methodology I picked up more than 20 years ago, Wirth’s 1971 Paper on Program development by stepwise refinement, at least as much as I remember it. I haven’t read it since about 1990 I think. Basically you formulate your program in pseudo-code, and step-by-step get closer to actual code.

My first refinement step was to create a Stack class, which is little more than a wrapper around a NSMutableArray with just three methods: push, pop, and isEmpty. Trivial, but useful to practice getting used to the way things work in Objective-C. There is a lot which seems to be based on conventions, such as the names of mehtods which get called under the hood at various stages. Luckily there is plenty of material on the web to help you pick those things up!

As for my first app-project, a morphological analyser, I’m slowly getting there. The main part is probably about 50% coded, and the lexicon-lookup routine is still missing. I guess I’ll opt for a sqlite database here, seems like the most effective way to access that kind of data. But I’ll cover that in a later post.

Oh, and here is the reference for the Wirth paper:

  • Wirth, Niklaus (1971) Program Development by Stepwise Refinement, in Communications of the ACM, Vol. 14, No. 4, April 1971, pp. 221-227.