It’s been awhile since I’ve released a new version of NewsBee, but it’s not like I’ve been idle. I’m happy to announce that NewsBee 1.2 is complete and waiting for Apple’s review!
I’ve been using version 1.2 for the last few months now, making tweaks and changes to the way the application handles extended characters (i.e. “international”) and parses RSS and HTML data. Oh, and I completely rewrote the event handling code to rely on GCD instead of performSelector. Yeah, that was a biggie. I really had no idea how big of a job it would be until I made the changes and then began the process of stripping out all the old code. Woof!
I’m glad I did it though. Under GCD, NewsBee is running very smoothly even with a large number of active sites. No more momentary delays when you pop open a menu or perform a manual refresh. Sure it was just a few milliseconds, but it seemed a little sloppy to me. Well, delays no more!
It’ll take Apple a little while to get back to me, but I want to thank all of the testers who helped me with this version. I especially want to thank those of you from around the world who sent me feeds to test and helped me deal with the thorny issues of character sets. NewsBee 1.2 is way better because of your help!
Ok, so I’ve been tuning up the latest version of NewsBee and the working is going well. The only problem is I had this strange little bug that caused the app to crash every few weeks.
Application Specific Information:
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM insertObject:atIndex:]: index 27 beyond bounds [0 .. 23]'
terminate called throwing an exception
Now, I recalled back in the mists of time that there was a nice way to take an OSX crash log and extract the line number, but for some reason I couldn’t make my brain give me the information beyond the fact that I needed to use atos. Now that I’ve unraveled the bits and pieces I already knew, I figured I’d drop it in a blog post so that I could recall it later (when I inevitably forget once more).
What is this “atos” of which you speak?
The atos command converts numeric addresses to their symbolic equivalents. If full debug symbol information is available, for example in a .app.dSYM sitting beside a .app, then the output of atos will include file name and source line number information. Mac OS X Developer Tools Reference
Buh? Don’t worry, that’s just some fancy talk from the Apple docs. What it means is that if you give atos your application’s binary and a starting memory address it can tell you things about related memory addresses, including the source file and line number.
Great, so how do I use it?
To begin, open up your crash log and scroll all the way down to the “Binary Images” section. You should see the name of your application on the first line. The very first HEX number is the starting address:
In this case, the number I need is 0x10ae52000. Yay!
Next, I need the address where the bad things happened in my app. To get this, scroll up to the top of your crash log and look for the “Application Specific Backtrace” section. There are probably a number of lines here, but what you want to locate is the specific call out for your app.
From the example above, I want to grab 0x000000010ae5e276. This tells me where my app tried to be bad an insert items out of turn. Now, I’m ready to put it all together and get the mystery reveal on the offending source code.
$ atos -o NewsBee-1.2.app/Contents/MacOS/NewsBee -l 0x10ae52000 0x000000010ae5e276
got symbolicator for NewsBee-1.2.app/Contents/MacOS/NewsBee, base address 100000000
-[newsBeeController _loadMenu:] (in NewsBee) (newsBeeController.m:325)
In the first line, I’ve provided the command. The “o” option is for the binary. In this case, I’m looking at the NewsBee app and drilling down to the compiled executable. The “l” option is used to specify the load address I want atos to use when bringing the binary into memory. The final number is the place where the code went wonky.
On execution, atos loads up the binary and helpfully repeats my explanation above in obfuscated language. Then, it’s kind enough to tell me right where the problem is: line 325 in newsBeeController.m. As it turns out, the problem is happening right where I expected it to be (the _loadMenu function), but knowing for sure is awesome because the error itself is difficult to replicate.
Of course, everything I’ve said here can be gleaned by simply reading the man page for atos, but why do that when you can google, right? 😉
Racist, sexist, bigots are everywhere and unfortunately more than a few have learned to write. Like most chronic diseases, these individuals flare up from time to time. Sure they’re irritating but they’re also dangerous as well. They do real damage those they pursue to say nothing of the perception of their craft. They also recruit others to their cause, which is perhaps the worst part of all.
Later, he tweeted an apology for cranking out his post in a hasty manner. I thought… Well, at least he did something, and I told him so. His response?
Now think about this for a second. This guy didn’t just write a blog post, or even a single book about this issue. He created an entire universe and a trilogy where he could grapple with issues of race and gender while still providing readers with a rockin’ good ride.
This is a little more than trying in my opinion. It sounds like a helluva lot of doing. Writers like Toby make me want to be a better writer and a better human being. They make me want to DO something.
So, I did… I bought Tobias Buckell’s books.
All of them. Including different formats of the books I already owned.
Then a tweet by Mur Lafftery pointed me in another direction:
Huh. Bigot pees on the Internet. Time to buy a spec fic book by a woman. Do I have all of @nkjemisin‘s work yet? *heads to amazon wish list*
Am I saying that opening your wallet and doing something good for people who are trying to do good is the way to combat chronic assholery? Yes, I that’s exactly what I’m saying.
And sometimes, the people who need a boost are those who haven’t always been good. Sometimes you have to extend a hand to someone who is trying to do better, trying to lift themselves out of the shit and be a better person:
This sucked to write. Moreso to post. But here we go: “I Confess to Killing the Soul of a Woman Just to Watch It Die” bit.ly/16e0ipo
I don’t carry electronic apparatus. I don’t have a tape recorder. I don’t have a computer. I write everything in longhand, and I usually write it twice. I write it during the day in a small notebook and at night I expand it in a larger notebook. For 40 years that’s what I’ve done. And then when I get home I type it out. I used to use a typewriter, now I use a computer. But it’s all written, hundreds and hundreds of pages of notes, some of which I use, others not.
I heard about Squarespace (over and over) while listening to a marathon session of This American Life podcasts. I have to admit, it’s a little strange to hear Ira Glass pitching web services so I thought I’d check them out.
What is Squarespace
Squarespace is an all-in-one platform for hosting web content and eCommerce. The tool provides a simple, yet comprehensive back-end for content management and a fairly sophisticated “LayoutEngine” for building pages and making them look swell.
$10/mo ($8/mo if you pony up for a year in advance) – 20 Pages. 500GB of bandwidth, 2GB of storage, 2 contributors, mobile skin, and a custom domain.
$20/mo ($16/mo for a year in advance) – Everything above, except unlimited. You also get form building tools and Google Apps/MailChimp sync along with publishing to Facebook.
$30/mo ($24/mo for year in advance) – You get eCommerce added in, along with all the lovely features needed to support such a venture (product catalog, inventory, tax, coupons, etc).
Overall, these prices aren’t too bad. You can self-host a website for about the same price, though you won’t have unlimited storage and you’ll have to do all the heavy lifting yourself. The real question here is whether the tools Squarespace provides are worth the price.
* It’s also worth noting here that Squarespace uses Stripe for payments. I address this in the eCommerce section below, but you should be aware that eCommerce will incur additional costs outside of Squarespace (usually 2-3% of the purchase price).
So, let’s get on with a trial run…
A Trial Run with Squarespace
In the spirit of all things testy, I decided to set up an account with Squarespace and give it a go. They give you 14-days to play around with the product and then you need to shell out.
Selecting a Template
Selecting the initial template for your site is the first thing that happens. The gallery of stock templates is chock full of nice designs that give you the sense that you’re creating something chic, like a high-end magazine:
When you select a design, Squarespace shows you other sites using the same layout templates. This is pretty smart since it gives the user a sense of the customization potential.
Once you have your template, Squarespace asks you to sign up. It’s a typical form (name, email, password); no credit card required. Your site is live as soon as you fill out the form.
Squarespace sends a confirmation email and then sends a second email that provides a video walk-thru:
Editing and Adding Content
Editing content in Squarespace is very simple. The editor is WYSIWYG, meaning that you’ll basically see the page as it looks in real life. Just clicking on the elements of the page invokes the editor for each type of content (text, images, etc).
Squarespace also provides a quick edit pop-up when you’re looking at your site. Unlike most mini-editors (WordPress, I’m looking at you), Squarespace has provided a powerful tool that allows you full editing capabilities. This is particular useful when you need to make quick changes to a site for typos and such.
* One thing I didn’t like was the lack of revision history. That said, versioning is a complicated bit to pull off in a user-friendly way.
When you add new content to Sqaurespace (via the Add Block button), you are faced with a ton of choices:
The choices are all pretty self-evident. Form allows you to create a form. Text allows you to add text. The test account will also allow you to add products for eCommerce. I’ll talk a little about that later.
Any block you add is popped onto the end of the page. From here you can edit or move the block as you see fit.
Adding new pages to the site is just as intuitive as editing content. Squarespace provides a high level tree view of all of your content. You can drag and drop items to change the order. You can click on them to change their relative URLs. To add a new page or section, just click Add Page.
I thought it was pretty helpful to have the Not Linked section in the nav as well. This area lets you know when orphaned content is on the site.
Out of the box, Squarespace provides simple tracking of visits, popular content, referrers, and search terms. Nice for a quick view, but you can also add your Google Analytics account ID for seamless integration (Settings->General).
eCommerce on Squarespace
Since I have a trial account, I can’t go end-to-end on eCommerce, but I can get pretty close.
Setting up Shop
First, I have to give kudos to Squarespace for the easy setup of the product catalog. Adding a new product is just like adding content to the site. In fact, you even do it in the same place within the tool. You can also merchandise your products on any content page. This is a nice feature.
To add a product, you need to select an existing collection of products or create one. To create a collection, you select Add Page and select the option for Products.
From here, you click the Add Product button and walk through the steps to create a physical or digital product. The set up for both products is fairly similar, the difference is that with a digital product you provide a file and for a physical product you provide variant or SKU details.
Like many new eCommerce platform startups, Squarespace is using an outside vendor for payment processing. In this case, it’s Stripe. Stripe has a good reputation in the developer community and I’ll do a review on their services at a later date.
Squarespace allows you to create coupons in four basic categories:
Any Order – Global discount without any qualifier.
Order Threshold – Discounts applied when order totals reach a certain dollar value.
Category Discount – Broad discounts based on a products within specific categories.
Single Product – Which should be fairly obvious…
The discounts include basic flat discounts and percentage discounts. Free shipping is also available as a discount type with Any Order or the Order Threshold promotions.
Once you create the promotion, you can add coupon codes. You can also set the duration of each code.
Overall, it’s a pretty basic setup in terms of promotions. I’d say 90% of what most very small vendors might need, which is pretty good.
Order and Customer Management
Super basic here. You can see pending, completed, and cancelled orders. You can also export orders as a CSV. This won’t be enough for complicated eCommerce businesses.
Digging Deeper – Development Options
When you pop into settings, you’ll notice that Squarespace provides extensive configuration options. There are tweaks for SEO, comment engines (Disqus is supported), Amazon associates, social account hookups, and more. In commerce, you can configure order and shipping confirmation emails too. However, as great as the tools may be, there’s always going to be an itch you need to scratch. To get at that itch, you’ll need to get inside Squarespace and they give you two basic options: code injection and straight up developer access.
Conclusion – Powerful Content Editor with Rising Potential
Creating a tool with this breadth is not an easy task. You have to make a lot of decisions about which tools to include and which to hide. Overall, I think Squarespace has made a lot of good choices. It’s a balanced tool and the pricing is very fair.
I’d give Squarespace a grade of A on the content management side of things. As for commerce, the grade is B-. It’s super basic but enough for small sellers without complex inventory management issues. Again, the order and customer management features look really weak which is something everyone should be aware of. Still, it’s obvious that Squarespace is dedicated to improving the platform. If they put the same thought and energy into eCommerce that they’ve shown in content, I would expect this grade to improve.