While Rosyna is making Silk 2.0 final, I've done some work too. Being outside all day (and without Internet) makes me pretty productive, so a bunch of updates were done in the passed week:
We plan to release most of these in the first week of June, if all goes well, so stay tuned!
Well, I'll probably release Silk 2.0 fc1 tonight if all goes well. Sorry about the huge amount of time that's passed between beta/test versions but during it's session and until school (where I work) gets out on Wednesday then I clean up on Thursday I've been terribly busy working.
My body is not quite made for a job where I sit and wait for something to break for 6 hours a day especially if I am unable to talk to anyone online. It's becomes tedious and annoying. Often I come home and immediately take a nice long nap, wake up a few hours later, try to get back to sleep, fail, succeed at 1am then get up and do it all over again at 6am.
So yeah, those not on the beta list that would like to be email me. rosyna at unsanity.com. Not unsanity.org and not anything else. I've gotten a few emails that weren't to the above email address. I've ignored them. Reading comprehension is a very important attribute in a person to me. Deal.
Version 2.0fc1
- Hopefully removed a problem where a dialog would appear when choosing an inappropraite font but dismissing it would cause it to be chosen again. Would cause an infinite loop of sorts of error dialogs. Now we beep and log.
- No longer replaces system fonts in cocoa apps when expired.
<more to come>
Version 2.0b3
- Sped up initial font pane loading a lot. So much it might make caching useless (and slower).
- As a side effect, this also eliminates cases where the same font could be listed twice like Times New Roman on some people's weird setup.
- No longer draws the original and replacement font boxes when switching tabs before the new tab is shown. Odd that tableViewSelectionDidChange: is called in this case.
- Now shows a warning if you are trying to name a preset using a name that already exists. This was way more tedious than it should have been but that was because I was implementing it wrong.
- Should no longer replace the menu fonts when demo registration expires.
- Now caches font names. Means no more Font Name-> Font ID -> Replacement Font ID -> Font Name. Might make cocoa replacement faster.
- Reset Demo Period. This is the first and only time.
- Should show bold theme fonts when appropriate. That was a stupid bug on my part. It only occurred if you had font substution on as well. The ConstructWithFontID was calling GetThemeFont and then ATSUSetAttributes then in there it was ignoring the style. This should fix other problems with styles too.
- As a side effect, this might cause a speed up when logging is off since I no longer get the font name when ATSUSetAttributes is called.
Version 2.0b2
- Sped it up a whole lot! It used to check for every single font call if you were registered. Now it does it at "logical" times.
- Made nag a lot less annoying.
- Adding/Editing of Regular Expressions now save only if you click the OK button, not as you type. Also added a cancel button to? cancel changes. This also fixes the lag with telling every application the preferences have changed everytime you change something.
- If you switch between the font table and the substitution rule table by clicking on an already selected item, the buttons are no properly updated (Remove/Replace).
- Removing an application did not always update the application pop-up button. It does now.
- The "Custom" Preset choice is now always displayed as enabled.
- Can no longer make a substitution rule that replaces a font with itself. It wasn't causing any harm if you did, but it was just weird.
- No longer throws an exception if you have fresh prefs and try to drag a font onto the "Original Font" box.
- Can no longer add an application from the pop-up button in the Font settings pane. This "fix" exposed another bug when deleting the last custom application/reg ex, which is now also fixed.
- Can now correctly add the entire "Categorized" item to the substitution list.
Version 2.0b1
-Added Registration and Expiration.
Version 1.5a3
- Now refreshes the font boxes if you delete a substitution rule.
- Moved some logging to only appear if log stuff is checked.
- Redid GUI some more.
- Can now drag the font substitution fonts into text editors (like email in case I ask for your rules)
- About box works again
- Fixed a problem that could cause some odd problems in cocoa applications when loading nibs if Minimum font size was enabled, but theme font was disabled and there was no theme font ever set (the Theme Font box would say "No Font"). This would cause crashes in some applications like Chimera. The conditional operator saves the day. This bug was reported in the MacNN forums instead of directly to me. Err!
- Remove is now enabled if you set a replacement font.
- Can no longer select an invalid font in the Font Panel.
- Added regular expression per app settings.
- New individual settings are now based off the global settings instead of what I think should be default.
- Adding a new application now causes the individual settings list to scroll to the selection.
- No longer tries to find matching individual settings for the current application once it is found.
- Added an option to prefer outline fonts. This will make fonts like Geneva, Monaco, and the like anti-aliased at point sizes where a screen font exists.
- When silk crashes, it should now point blame at itself instead of hiding behind the shadows.
Version 1.5a2
- Bug Free*
- Fixed a problem that caused the Theme font to be replaced in Cocoa if minimum font size was enabled.
- New applications are now shown when you add them to the Application popup in the Font tab.
- Automatically selects the newly added application.
- Fixed a problem where the RKAlias class would not be loaded if FruitMenu or some other pref panes were clicked before Silk was opened. Blank Items will no longer appear.
- Can now actually delete presets
- Fixed a problem that causes a cocoa exception if you try to add a font by drag and drop onto a font box and there were no previous substitution rules in place. Also fixed the other exceptions that occurred after this fix. I hate exceptions because they sometimes happen deeper down than they should and prefer errors. Thanks to Philippe Martin for finding and reporting this bug.
- Can no longer set a replacement font via the font views (boxes) if there is no original font. This was easier than fixing the bugs that occurred if you tried it. Also fixed all the bugs associated with this change.
- Changed the GUI around a little bit.
*Except for the bugs that exist in silk, of course.
Version 1.5a
- Font substitution
- No longer freeware
- Theme Font Replacement
- Minimum Font Size
- Moved to .APE
- Some other bugs fixed I can't remember. Like this one caused by a bug in OS X that makes it so Silk can't get the path of a CFM unbundled application using CFBundle.
Our blog has been a pretty silent place lately. I wonder why.
On my side, I have been working on an APE update along with a new version of Labels X. It now got a Label menu in the Finder's File menu (partially working at the moment), along with an ability to display label information in all applications (in the open/save dialog boxes, for example), plus some necessary fixes.
I may have mentioned it before, but the city I live in (St.Petersburg, Russia) is celebrating its 300 year anniversary all next week. For us city citizens this means things are going to be hectic -- all the city center is closed for the car traffic, and giant car jams are already being gathered on the streets; everything else is going to be crowded and not nice as well (well, at least for people who don't enjoy all these masses of people). Either way, I am going to escape it all and leave to our summer cottage for one week, with ocassional returns to the city to check email (GPRS is not yet working in the area the usmmer cottage is). I'll take my work with me and probably will make much more progress, as there's no Internet to distract me.
See you in a week, and we'll probably have a slew of product updates shortly after. ;)
Just a few (actually, just two) noteworthy things that are somehow related to me, the company, or the blog entries I've posted here --
I am the only child in my family. This being said, I have no direct brothers and sisters, but I have 6 cousins, with 2 of them being of my age, and, coincidentally, my pretty good friends. We used to hang out together in the childhood and teenage years, and now of course the life has pulled us apart a little bit, but we're still pretty close.
I've been on a wedding of one of these 2 cousins on Saturday and Sunday, so he has joined the married man land.
Things are not going too well with my second cousin. My second cousin got hooked on drugs a few years ago and we have barely talked since then for obvious reasons. Most of his interests has became on where to get the money for more drugs, and that's about it. It's been a tough 2 or 3 years (for me, and probably not to him) -- feeling I need to help somehow yet realizing I cannot do anything. He has been on medical treatment a few times, and slipped back to drugs over and over again.
Yesterday he called me. It was a first time in 2 or 3 years when I heard him not being stoned. Moreover, he sounded pretty serious in his intention to get over it and begin a life all over again, doing small steps, one at a time. It sounds like he finally got the guts (or trying to) to actually pull it off -- and he apologized for the trouble he has been, and asked for a little support and praying for him from my part.
It was a first time in a long period I've been so sentimental (sp?) after his call. Being a close friend with a person for 20 years then losing him because of the drugs is very emotionally hard, and there were periods when I almost was thinking he'll die because of his addiction. That, and knowing there's not much I can do on my end, was sitting on me like a stone. Yesterday, for the first time in 4 years or so, I got the faith in him again. I hope he'll have the guts to get over himself, and I will try my best to help him in that.
Small, simple things like friendship, caring and hope is what moves us in this life. Sometimes we all need lessons like this (and hopefully not from your own family/friends) to realize that again. Work, money and career are good too, but they are nothing (nothing!) compared to these simple things.
As mentioned below, we're having a boat-load of fun with a spammer spoofing our domain.
When are we as an Internet community going to get sick of spam to the point where we completely redo the way email works?
I don't see this being to far out. Spam is increasing at an amazing rate. Somehow my personal email address which I have religiously protected from spam for years has fallen victim. I now get about 10 junk mails a day for various drugs. (90% of which I've never heard of...)
What are the options out there? Who has the best plan to kill the spam situation once and for all? Does anyone think it's possible to kill spam without an overhaul of the current system?
Personally the quicker it happens - by "it" I mean a complete overhaul - the happier I'll be. I despise spam. I also despise the fact that it actually works. Obviously there would be nobody spamming if it wasn't lucrative.
Ah well, back to filtering all this crap from our various systems while dreaming of a better email era to come. :)
So congratulate me on getting a second monitor -- identical to the one I've got (Apple Studio Display 17") -- so now I'm working using two 17" CRT displays. Love it so far -- the left monitor is occupied with iChat, Proteus, Terminal and Console while right one (main one, too) is available for work. Kinda useful.
To do this, I had to buy a DVI->ADC adapter and a new video card (ATI Radeon 9000 Pro in exchange for my nVidia GeForce 4MX). Still, I think it is worth the money, as my screen is now double in size (34", heh).
Now to save up some money and replace dual 17" to dual 23".... Mmm... Maybe in my next life. ;)
PS For some reason, my Mac refused to boot when I plugged in another monitor. After a series of single user boots and verbose mode boots it turned out to be a Logitech kext confusing the second monitor USB hub with a Logitech mouse, or something like that (at least the boot freezed up at the IO matching on that kext). After I've moved the kext out of the way in single user, everything started to work just fine. Update: apologies to good folks at Logitech. It happened that my primary hard drive failed, leaving 55 overlapping files, one of which happened to be inside of abovementioned kext. After the repairs, everything is great and I can finally enjoy my new setup.
Nice. Somebody used our domain to send out spam (Jackson at unsanity.org and Trinity at unsanity.org), so we've just got a couple of thousands of non-delivery reports. Hosers. =(
The much ranted about update to Application Enhancer is almost done. As a last step before doing some pre-release testing I have expanded the APE Manager preference pane to allow uninstall of the whole APE system, and to temporarily disable it to diagnose problems, if these ever arise. The GUI might get changed around by the time we hit release, but either way, the basic functionality will remain.

Once APE 1.3 will be done, I'll update most of the haxies (commercial titles first) to take advantage of the new enhancements (mostly performance-related) in it. Stay tuned!
Something is going to happen on May 22nd. Can someone please tell me what it is? I'm not even sure the category of what will happen on May 22nd will be in.
Well, it is better late than never. ;) I think I have finally recovered from the partying mood (first Moscow, then my wife's birthday [happy birthday, Masha!], with a series of other weird retreats), so it's time to post a few random pictures from the recent Macintosh users meeting I've been at.
First time in 4 or 5 years I am attending the event it's been so cold we could barely hang out on a traditional small island in a park. Some people (me included) even had to revert from traditional beer to vodka to keep themselves warm. I've brought some Unsanity t-shirts to give out, but due to the weather there were not many brave souls wearing them (oh of course everybody did snagged one, but not many decided to actually dress up ;). Among the brave ones who actually did wear the t-shirt was Alex Lagutin, programmer of Rogue Amoeba Software (he's the guy on the photos in a blue t-shirt and a baseball cap, with a black purse on his belt). Anyway, in 4 or so hours outside we decided to relocate to some more convenient and warm place where the party continued.
Below are some random pictures of the event featuring random Mac-using people:
Next time we meet is in September. I hope the weather will be better.
Mini-poll: How many of you use the standard "pill mouse" ?
Along with the new eMacs announced by Apple today, it seems we have a new mouse and keyboard also.
I never even took my pill mouse out of the wrapper. The hockey puck was a disgrace to the mouse name and I don't think much better of the pill. I had a new Logitech mouse purchased and waiting before my MDD G4 ever arrived.
With the pill, I am constantly clicking when I don't want to click, getting the cord stuck under the front edge of mouse, and just generally not liking the feel while using it.
I think maybe I'll found Despisers of Apple Mice Club. I can't understand how a person can use both a standard Apple offering and then try out a cheap 2 button scroll wheel mouse and not instantly pay their membership dues and join the DAMC.
My brother was a pill user for a year. He thought it was great, no complaints, "bah, I don't need no stinking two buttons". I stole his pill and made him use a 2 button scroll wheel mouse. Yup, he paid his fee and is a proud member of DAMC to this day.
I have waited for years for Apple to wake up, prove me right, and announce that they screwed up and just realized they forgot to ship the cool new useful mouse they had sitting in a warehouse somewhere and it should be on our doorsteps within the week.
(sure would be fun to stroll through Apple HQ and see how many 3rd party mice are sitting on desktops...)
Until then, I'm sure DAMC will continue on whining and collecting membership fees. There's a bright side to everything. :)
Any of you using the Silk betas (it's at b3 now), or possibly WSX or another haxie that flashes the screen and shows a registration reminder might have seen a white box appear where the reminder appears in some Cocoa applications. It seems to appear as soon as the Cocoa application is ready to start processing events and the window is still on screen which is probably it happens so infrequently in other haxies and so much more often in Silk since I show it when the menu bar is ready. The window that shows the pretty icon and the text is a Carbon WindowRef with the class kOverlayWindowClass. I've tracked this "white" problem down to what seems to be a bug in Cocoa's handling of Carbon windows introduced in 10.2.
Cocoa's event loop does not support the Carbon event loop so Apple designed what seems to be an abstraction layer in Mac OS X 10.2. It's a really well designed layer it seems and it allows you to use pretty much all of Carbon in Cocoa applications although the above documentation doesn't seem to list the caveats of using the layer. Other than the quirk above and maybe another one. I'm not sure if I can begin a CGContext on a window that isn't on screen in Carbon. Anyways, this abstraction level places Carbon items into Cocoa class "wrappers". In the case of a Carbon window the class is question is oddly enough named NSCarbonWindow (where do they come up with these obscure names?). This class has a method called display that seems to set the clip area, and the visible area of the window and then if the windows have any handlers on it for updating the contents of the window, it calls them. The problem is that before it calls the handler, it ERASES the contents of the window.
I don't remember giving Cocoa permission to update the contents of the window. I've even passed kWindowNoUpdatesAttribute, kWindowNoActivatesAttribute, and kWindowOpaqueForEventsAttribute (which the documentation for on Apple's site is wrong since it says a window with that attribute set receives no events) separately and together and it still erases my window. For some reason -display is calling EraseWindowRegion() before it calls the event handlers. As far as I can tell, Carbon does not do this. Armed with the cause of the problem and the ASM dump of -display I created a patch with APE for -[NSCarbonWindow display]. From within my patch of -[NSCarbonWindow display] I set a patch on EraseWindowRegion and SendEventToEventTarget then call the original. When EraseWindowRegion is called I just return noErr in my patch. Then when SendEventToEventTarget is called I remove the patch for EraseWindowRegion and SendEventToEventTarget so that I don't get called if the real event handler wants to call either of those functions. After the real -[NSCarbonWindow display] is called I make sure both of my other patches are removed and if they aren't I remove them from there. I really do not want to do anything other than fix this "bug".
This method works perfectly and stops the "white" bug from appearing. At least I assume this is a bug. It seems to have no side effects whatsoever. This is a perfect example of APE fixing a bug in someone else's software. This is also a very good use of APE Lite. I'm not sure what our licensing policy is on licensing APE Lite to those that need to fix bugs in Mac OS X from their own application.