blog
April 28th, 2011

Memory Leak In 4D’s PROCESS HTML TAGS

I'm now taking the policy that if 4D asks me to do their QC work for them, then I'll post the problem publicly... I'm sorta tired of them not taking quality control seriously. Case and point - I gave them a test case that showed a memory leak when generating HTML documents. They narrowed it down to a memory leak in PROCESS HTML TAGS, but then told me to create a simpler test case. I was sorta floored by the request... It's a verified memory leak and they can't be bothered to do their own test case... Remarkable.

So, I've done the test case. Here's the core method... It repeatedly sets 15 variables (5 text, 5 blobs, 5 long inteters), and then calls PROCESS HTML TAGS which composes a simple page using those variables. Some of the text and blobs are a bit large - but nothing that's too big for 4D to handle.

Here's the core method in the database...

C_TEXT($path_t)
C_TIME($doc)
C_LONGINT($loop_l)

Compiler_Test_Vars 

SET BLOB SIZE(test_template_x;0)
SET BLOB SIZE(test_output_x;0)

$path_t:=System_GetStructureFilePath +"test:test.htm"

If (Test path name($path_t)#Is a document)
ALERT("Can't find "+$path_t)
Else 

DOCUMENT TO BLOB($path_t;test_template_x)

$doc:=Utility_CreateDocument (System_GetStructureFilePath +"test:output:loop-counter.txt")
CLOSE DOCUMENT($doc)

$loop_l:=0

Repeat 

For ($i;1;1000)
  If (Not(Macintosh command down & Macintosh control down))
      //put random variables on the page of different sizes...
    test_text1_t:=Utility_Gibberish (10;0)
    test_text2_t:=Utility_Gibberish (100;0)
    test_text3_t:=Utility_Gibberish (50;0)
    test_text4_t:=Utility_Gibberish (1000;0)
    test_text5_t:=Utility_Gibberish (75;0)

    SET BLOB SIZE(test_blob1_x;0)
    SET BLOB SIZE(test_blob2_x;0)
    SET BLOB SIZE(test_blob3_x;0)
    SET BLOB SIZE(test_blob4_x;0)
    SET BLOB SIZE(test_blob5_x;0)

    TEXT TO BLOB(Utility_Gibberish (10;0);test_blob1_x)
    TEXT TO BLOB(Utility_Gibberish (100;0);test_blob2_x)
    TEXT TO BLOB(Utility_Gibberish (1000;0);test_blob3_x)
    TEXT TO BLOB(Utility_Gibberish (5000;0);test_blob4_x)
    TEXT TO BLOB(Utility_Gibberish (10000;0);test_blob5_x)

    test_longint1_l:=Random
    test_longint2_l:=Random
    test_longint3_l:=Random
    test_longint4_l:=Random
    test_longint5_l:=Random

    PROCESS HTML TAGS(test_template_x;test_output_x)

    BLOB TO DOCUMENT(System_GetStructureFilePath +"test:output:output"+String($i;"0000")+".htm";test_output_x)

    SET BLOB SIZE(test_output_x;0)

  End if
End for
$loop_l:=$loop_l+1

$doc:=Append document(System_GetStructureFilePath +"test:output:loop-counter.txt")
If (Macintosh command down & Macintosh control down)
SEND PACKET($doc;"Loop "+String($loop_l)+" aborted")
Else
SEND PACKET($doc;"Loop "+String($loop_l)+" complete")
End if
CLOSE DOCUMENT($doc)

Until (Macintosh command down & Macintosh control down)

ALERT("Done")
End if

If you want to see the memory leak in action, download the test database with the memory leak and run the method test_SimpleCacheLoop and then watch memory usage of 4D - you'll see it go up quite quickly. It's Mac only at the moment. Press Command + Control to end the test or quit 4D. In my tests it went from 57 MB of real memory to over 250 MB of real memory in about a half hour.

My point in all of this is that they need a testing routine that has test cases that stress test every command and function in their product. This is a bug that's simple to identify and catch, but it's been in their product for a long time now and no one has caught it. If a developer catches something like this 4D needs to understand it's their job, not the developer's to get to the bottom of it once the problem is validated and not the result of a coding error on the part of the developer. In the case of a memory leak, 4D should do basic checks (like writing a test database as I did) to validate the error and see if it can be reproduced easily.

Digg It!  Add to del.icio.us  Add to StumbleUpon  Add to Reddit  Add to Technorati  Add to Furl  Add to Netscape

February 20th, 2011

Ways In Which Firefox Is Better than Chrome

For a few months now Google's Chrome has been my primary browser. I had been having problems with Firefox and wanted something that was faster and more stable. Chrome did seem a lot faster than Firefox and stability seemed better too. But then little things kept bugging me about it and I'd have to switch back to Firefox. Here are some of the items I've encountered..

Chrome doesn't display XML documents nearly as well as Firefox

Firefox uses a default stylesheet whenever it encounters an XML document. Here's an example (the server info document from the Wowza streaming server):

wowza firefox

Chrome, on the other hand, treats XML as HTML and does a horrible job displaying it...

wowza chrome

Firefox's rendering of the XML document is great - very readable and usable. In contrast, Chrome's rendering of XML aweful.

Chrome doesn't let you get the URL of an RSS feed

In Chrome, when you view an RSS feed it blanks out the URL. If you need the URL you can't get it. Here's an example in Chrome...

rss chrome

Notice there's no URL at the top. Now here's Firefox which makes it easy to get the URL...

rss firefox

Chrome doesn't display the page title clearly

This one is somewhat ironic. The most important element on any page - in order to get it to rank in Google, is the page title. Yet, Google doesn't clearly display the page title. They place the title in the tab at the top of the window. If your title is long, or you have many tabs open you don't see the entire title. You can get it if you hover over the tab, but it's not clearly displayed like it is in other browsers. Here is an example of the problem in Chrome. I've hovered over one of the tabs to see the title, but it takes a while for the hover text to show up - it's not easy to see.

And here is the title clearly shown in Firefox...

title firefox

While it may not seem important, if you're an SEO, it's VERY important.

Chrome's status bar just isn't as good or useful as Firefox's

Chrome tried to save vertical space. They don't show the page title (see above) and they don't really have much of a status bar at the bottom of the browser. In fact there is no status bar at all until you scroll over a link, then you get a small status bar that doesn't show the entire URL (though it expands after a few seconds of hovering).

status bar chrome

By contrast in firefox you not only get the entire URL, but you can have all sorts of helpful stuff at the bottom to give you other information about the page...

status bar firefox

As a web developer and SEO all the info is invaluable to me. Yes, there is an SEO plugin that you can use, but you have to click on something to see the information - it's not easy to see.

Chrome discontinued native support for H.264

Last year Google bought the company On2 and then proceded to give the crown jewel of the companyaway for free (the video codec VP8/WebM). While it was a nice move, they then discontinued support in Chrome for the most viable competing video codec - H.264 which is more widely used and preferred by many people. Yes, H.264 is still supportedin Chrome via Flash, but native HTML5 support is gone. While it's great that Google gave away VP8/WebM, it's a bit mercenary that they're trying to undermine H.264. All Google managed to do is extend the life of Flash and delay the adoption of native HTML5 video.

Chrome has problems with some PDFs

With Chrome I can't always download some PDFs. When I try to get a PDF statement on Chase's website something converts it to HTML, which defeats the purpose completely.

There are no ways in which Chrome is all that much better than Firefox

While I can name a bunch of ways Firefox is better than Chrome, after months of using Chrome as my primary browser I can't really think of any ways in which Chrome is better than Firefox. Yes, I had some stability and speed issues with Firefox, but I'm starting to see similar problems with Chrome. It won't always ask if I want to remember a password, and sometimes it forgets passwords. I think my primary problem with Firefox was that I was using a profile that had been upgraded since the days when Firefox and Thunderbird were merged and called Netscape Navigator. I think my user profile had become "dirty" and a clean install of Firefox will fix my problems.

Digg It!  Add to del.icio.us  Add to StumbleUpon  Add to Reddit  Add to Technorati  Add to Furl  Add to Netscape

October 14th, 2010

4D’s direction with v13 and Wakanda

UPDATE: A couple days after writing this blog post, Jean-Michel Biraghi, 4D's Director of Marketing, pulled me aside for a chat. I've revised the blog post based on that discussion...

I'm not doing a blow-by-blow blog of 4D Summit this year. But I am twittering things blow-by-blow - Check out my Twitter feed for all the little details - twitter.com/SummitNotes - instead what I want to blog is sorta a birds eye view of what's going on...

The future of 4D is Javascript development

A lot of time was spent going over 4D's new/future product - Wakanda. Wakanda is an object-oriented Javascript development environment that greatly simplifies the development of RIAs. It will be to web development what 4D is to client/server - and integrated approach where you can get a lot done relatively easily. Like other pure Javascript solutions, Wakanda is not for public facing web sites where you want organic traffic from search engines - there is nothing of substance in the HTML document for search engine spiders to digest. Instead, it's appropriate for use once a person has logged in - in the non-public areas of a web site, or for powering ancillary content in iFrames. Wakanda will take client-server like functionality and put it onto the web as easily as you deploy 4D today.

It's important to note that Wakanda is not a future version of 4D, though they do have plans to enable it to be integrated in a 4D environment. It's more like 4D Web 2.0 Pack on massive doses of steroids.

4D is doing well - and that may be a bad thing...

That's a little hyperbole, but let me explain... 4D SAS/Inc now has $9M sitting in the bank. They could go for 6 months collecting no revenue and still be OK. In a way that's good - it means 4D will be around for a long time. But there's a downside to it as well - they're not hungry. Jean-Michel made note of that comment and swore they were hungry. In rethinking it, Wakanda is a huge change for 4D and 4D is sinking so much money into it that I'm sure there is a certain hunger to make sure it's not a flop. Whether there's 'hunger' the way a New Yorker (like me) would define the term, has yet to be determined...

What is abundantly clear is that 4D is a technology driven company. You may think that's a good thing for a technology company, but what it means is that they're not a sales and marketing driven company. Yes, they're relatively innovative, but there isn't the deep desire to sell more or get more marketshare. However, while they're developer community feels like it's getting smaller, their sales are up, so they do seem to be doing something right when it comes to sales. It would appear they're getting (possibly) fewer customers to make bigger and bigger investments in their products.

Like someone selling books, 4D is in the publishing business in that the first product they sell costs them millions of dollars and every product after that is close to zero cost. Every additional customer they get is almost pure profit. I just wish they'd be a more aggressive in their attempts to get additional sales. Maybe they are and I just don't see it...

Can 4D get marketshare for Wakanda?

For years I and many other 4D developers were mystified by 4D's apparent lack of a marketing strategy. For example, try to find a description of 4D on 4D.com - it's not there. They have a paragraph or so that gives and overview, and they have descriptions of each product, but I'm talking about an overview page that someone with industry experience (a potential customer) could look at and understand where 4D fits into the technical landscape. Even the product descriptions - they describe the feature list, but don't give an overview of where that product fits into the overall concept. Take the page on 4D Server as an example - it has a features list including some of the ways you can interact with 4D Server, but there's no diagram or in-depth details explaining all the ways you can connect to a 4D Server (client/server, web, SQL, JSON, web services, etc.), nor are there benchmarks descriptions of 4D Server's capabilities and limitations. Giving customers a really good understanding of what your product is all about is Goal One of any website, yet the 4D website fails at that really basic objective. That says a lot...

But in their defense, the comment was made that getting additional marketshare in a mature market like client/server is extremely difficult and expensive. With their current product their lack of marketing almost makes sense (but not quite). They seem to be doing a decent job with actually selling 4D (revenues are up). But the real problem is that they've now got a new product in a competitive market, yet so far they haven't demonstrated a level of marketing savvy equal to that of their competitors.

It goes beyond not describing the product on the website. Let's take another really basic example - the name Wakanda... Apparently they're getting out of the technology business and they're getting into the resort business and moving to upstate New York. I know choosing a product name is extremely difficult, but these days you don't give a product a name unless you own the domain name. It's one thing to have a code name early on - Wakanda would have been a perfectly fine name at last year's Summit where the product was largely conceptual, but they presented Wakanda as a serious product they were going to launch in the not-t0o-distant future and they don't own wakanda.com. Jean-Michel told me that Wakanda means "the magic within" (in Sioux) and that they hired an agency to help them find the name. I know it's a difficult process but personally I'd offer the resort good money for the domain name or consider using another name - but that's just me.

Bottom line, I'm not convinced 4D has the skills they need to really make Wakanda succeed. There are plenty of other ways I could go into about how 4D's marketing could use some help - sites that aren't SEO'd, sites that aren't crawlable by search engines, etc., and just the general blank looks you get when you say you work with 4D. I hope they can get their act together for Wakanda, but I'm skeptical.

No big changes to 4D in the near future

At the summit two years ago v11 had just been released and they made it very clear that the 4D language was now 4D's big problem. The database engine itself had been reworked and was robust and modern, but the language, being single threaded on the OS level, was a significant problem - especially on server since all stored procedures and web requests had to queue in line to get completed. They promised that in "the next version" that would be fixed. Well, v12 is out and it's not fixed, and it won't be fixed in v13 either. I suspect Wakanda fixes it, but that's  a different product.

They were pretty clear that all the future versions of 4D in the next few years will be incremental. That means easy upgrades, but they won't really be fixing the product's core problem. Honestly, I'm hugely disappointed, but I guess it is what it is...

Digg It!  Add to del.icio.us  Add to StumbleUpon  Add to Reddit  Add to Technorati  Add to Furl  Add to Netscape

April 28th, 2010

Google Images Now Also Served From WWW

A couple weeks ago I got quite worried about the Google Images traffic on one of my sites...

google images traffic down

That's a pretty dramatic drop. I started going through all the scenarios of what might be happening. Then a couple days later I noticed this...

google www traffic up

In other words, at the same time there was a drop in traffic from images.google.com, there was an uptick in traffic from www.google.com/imgres. This means Google is now serving Google Images content off www.google.com.

So I didn't do anything wrong, and my Google Images traffic is just fine... Now, if Google Analytics could only learn how to properly count Google Images traffic we'd be set.

Digg It!  Add to del.icio.us  Add to StumbleUpon  Add to Reddit  Add to Technorati  Add to Furl  Add to Netscape

September 28th, 2009

Partners With Parents Tutoring Service Launches New Site

Slicksurface recently launched a new website for Partners With Parents Tutoring Service, located in New York City. This site was a particularly interesting project for a number of reasons.

Jesse Gerber, co-founder of Partners With Parents is a neighbor and good friend. He was initially resistant to a redesign partly due to the cost of the redesign and implementation and partly due to a certain level of fear of how a new website might change the nature of his business.  The focus of his fear was the possibility of an overwhelming number of inquiries without the necessary support or conversion to real customers. After much conversation, we began the redesign process over the summer. Read the rest of this entry »

Digg It!  Add to del.icio.us  Add to StumbleUpon  Add to Reddit  Add to Technorati  Add to Furl  Add to Netscape

HOME · CREATIVE · WEB · TECH · BLOG