Sunday, May 24, 2009

Nearly Dead: ProfGrid.com DHTMLEdit review

This is mixed review -

Past few months, ProfGrid has gone downhill. Their newsgroup support went missing and eventually, very few updates.

For updates, this requires some explanation:
the price is US$149.95 for license per developer and US$99.95 per 2nd (3rd, 4th, 5th) year onwards.

There are two licenses, Source and without source code. The source code version is the one should you get (more on that later), so that will set you back at least US$490 (and US$199 for maintenance after 1st year) for a site license.

How does ProfGrid HTML component fair?
ProfGrid has two components, the older DHTML wrapper library and newer IE-Editor library. The older DHTML library is depreciated and ProfGrid recommends you to use latest ProfHTMLEdit library. For text formatting, it works, but style support is very poor.

Let me explain what problem is. The older DHTML control preserved HTML to modest extent and newer HTML control does not preserve HTML codes. so for example, you try "editing" a nice HTML template, it gets messed-up after that using ProfGrid's newer component wrapper. No amount of work will get it fixed unless you move back to older DHTML wrapper.

- Next, multi-level undo and redo is supported to what IE allows, no more, no less. Elements may be moved around, but limited t what IE can do. Search is very restricted, and Bsalsa's IE search implementation is more robust. (see 2nd part). Hyperlinking don't give you all details. It gives you basic vanilla IE screen.

- FileManagement is limited to ANSI text. In delphi 2009, the vendor "kludges" this by converting text to ANSI and back (but nobody to hear screams because there is no place to complain about it).

- CSS support is limited to basics. It don't expose all of IE's support model.

- Context menu is basically TPopupMenu handler. not much actually...

- Dialog boxes calls TSaveDialog and TOpenDialog in code. you have to buy the sources to modify those (like adding *.aspx, *.html, *.php to the dialog box filter)

- Spell Check does not work as claimed. It does work very slowly.

- Access to DHTML model is not actually true. Many code parts are marked "private" and unless you buy sources, there is no way to access them.


Your reviewer DelphiHater used it for while and used another from http://www.bsalsa.com/ instead.

The reasons were:

- The HTML component (since both bsalsa and ProfGrid are IE wrappers) is more complete in Bsalsa than in Profgrid's.

- Bsalsa supports Delphi 2009 correctly, while, I don't know, not much updates for ProfGrid. Also, since I have to pay US$99.95 a year for updates, I might as well use the free Bsalsa version.

- If my buddy wants to review the code, I would have to pay money for licenses. since using Bsalsa, it has been much better.

- Bsalsa has more complete wrapper. such as, better support for add-on things, like history lists, Favorites, IE Cache and wrappers.

Conclusion
I wish ProfGrid would update their site more often with more "usable" tutorials, more "usable" help files, more robust code and put back their newsgroups.


March 2013
Article update - see Website obituary - ProfGrid.com
See article corrections - Article corrections

Website Obituary: fesoft.com, PimFlash

Your blogger wanted to make small calendar library, so reviewing few components (more to come)

I will review PimFlash Professional. Your reviewer spend few days upgrading it from Delhpi 6 to Delphi 2009. It consisted of adding {$DEFINE D2009} and adding {$VER200} to code.

PimFlash Professional @ US$299 with source was one of the best (during those days) PIM components.

It had date calculations, holiday picker and various date pickers.

Base Class was TStringGrid in various manners:

- The Day view was 20 columns (8am to 5pm with 30 minute slots) and 2 rows (time area and white area for user to enter text).

- The Week view was (7 columns, 3 rows or (7 = Mon..Sun, 3 = Gray area, Time Area, white area))

- Month View was TPanel with drawtext (29/30/31 + 7 labels, 1 label for each day, and M...S on top)

The thing was quite inflexible, you had to design your own dialogs for add/edit/delete

PimFlash went out of business, probably due to introduction of DevExpress Calendar/Scheduling Controls.

Nearly Dead: ShellPlus fan mail.

This is fan mail for ShellPlus
Here is my email to T:

I know you love ShellPlus, please answer me the following:

1) Can you ask vendor to "put back" his forum?
location is at http://www.shellplus.com/forum/

2) Can you ask vendor to fix the Unicode issues,
like "upgrading" the whole library to use "Unicode"
correctly instead of "borrowing" from TMS/TNT Unicode?

Vendor should be bit more "honest" with using Unicode.
For example, instead of TSxWideString, TSxWideStringList
or TSxWide[Whataver], why not stop rename TNT library
and use it directly?

3) Can you ask vendor about frequent DEP errors?
There are three reasons for this. First is concurrency. If you allocate memory, you should make sure task should be in thread so that if user launches multiple file operation, it don't free memory accidentally.

That is, VCL = Single Thread, Explorer = Multi-Thread. If you use Single-Thread programming model for Multi-Thread integration, what will happen?

User starts intensive filecopy operation on C: drive
User starts intensive filemove operation on D: drive...
...

Second, is due to plain stupidity, for example, constant initialization of classes (class already exists in memory) when initializing in memory. You have explorer window1, 2, 3, 4, 5. and 1 shell integration. Do the maths... First Window - works okay, Second Window - works okay, Third Window - error, ....

Third, is Internet Explorer and Explorer integration. Sometimes the Explorer bars load into IE itself, nice feature, but not so nice when Internet Explorer crashes because of DEP, concurrency error.

BTW, when I talk about Internet Explorer, i refer to IE7 with new programming model and IE8...

4) Can you ask vendor about Vista issues, or "upgrade"
the library to use Shell 6.0 (Vista)?

5) Can you ask vendor to "fix" namespace problems, such as using "full" unicode, more robust shell error handling.

For example, most codes in ShellPlus NSE is in this manner:

try
// causes an exception
except
end;
try
// causes another exception
except
end;
try
// causes yet another exception
except
end;

it really blew my head trying to debug the code due to all these silent exceptions.

Link to original post:
Nearly dead Shellplus reviewed

Saturday, May 23, 2009

Nearly Dead: IonWorx IceLicense Reviewed

Installation
I had weird problems installing IceLicense, because the Installer wants to call-home but the firewall didn't allow it. I got past that by renaming their setup.exe to setup. RAR and then extracting contents to disk using WinRAR.

Components
Then I found out some extra components called "TTcpSocket"... looks familar?



You guessed it - it's the same one as from AppControls.com.


Legality
I'm not sure what the "idea" of using OnGuard, Lockbox for, but I do remember OnGuard, Lockbox is MPL-licensed.

Do you know what MPL means?
MPL means Mozilla Public License. That means, you are allowed to use the code in your application, but you NOT allowed to sell for profit the library.

For example:
a) Joe uses MPL in his application -- OKAY

b) John uses MPL and includes code into library -- NOT OKAY

Ionworx IceLicense falls into (b) because Ionworx uses MPL code (TurboPower LockBox, parts of TurboPower OnGuard into IceLicense Library (and a bit of AppControls too).

Should someone give hint for Ionworx to stop using TurboPower Lockbox and TurboPower in such manner?


Ethics Issue #1
IceLicense EXE files uses PECompact with anti-debug. Parts of IceLicense uses PECompact anti-debugging features while IceLicense code (in your own EXE file) uses XOR'ing in code-protected parts.


What's the difference?
Since there is 256 combinations in a XOR (2^8), tell me how fast it will take to break XOR... while ICELicense claims to be unhackable. Part of reason, is because of PECompact itself, not IceLicense.

PECompact's antidebug defenses are much stronger than IceLicenses, so vendor can claim this while IceLicense only offers XOR protection.

Ethics Issue #2
Using someone else's TCP/IP library. The component used is AppControls. How shameful is that?

Ethics Issue #3
Using Lockbox, OnGuard code to build your CopyProtection library. How shameful is that?

Ethics Issue #3
This requires detailed analysis into byte-code.

For example:
- While Icelicense uses Lockbox, it uses same fatal mistakes it has. For example, flawed encryption that was never fixed (since TP went out of business, there was nobody to fix it). It also inherits same bugs as OnGuard (the MachineID code is almost identical)

- It does not clear Lockbox buffers, so data is in memory. It does not work in "User" mode in XP, so people who use XP in non-administator mode have hard-time using it.

- It does not work well in Vista (other security vendor uses Drivers to bypass this issue).

- It stores some registry entry in HKEY_LOCAL_MACHINE\Software\Microsoft\Windows (read-only in XP user mode) -- that's why it don't work so well in Vista and XP-User-mode.

Deleting the registry value in above location causes trial to reset to zero (gasp!)

- It does not encrypt IceLicense own internal codes. Most codes for Icelicense is in plain sight, as in, clear assembly JMP, JNE, load string, save string.

- Supposedly anti-hack do not take into account Virtual Machine usage and Olly (debugger)

- It partially blocks Registry monitors (if you rename RegMon to RegXYZ.exe, RegMon continues as normal).

- The most bizarre part of it, is the number of helpers IceLicense has. for example, if you change the bits 01 to 02, IceLicense will provide prompts such as:
"Trial license is expired, please insert a full licensekey now" and so on.


Delphi 2009 Version?
The idea goes like this. Since ElGamal, LockBox and Onguard are open-source components and not IonWorx's work, why not wait for community to "port" the library to Delphi 2009 and then IonWorx will recompile it for Delphi 2009! right!.

For AppControls, I'm not sure, maybe IonWorx waiting for AppControls to "upgrade" their library to Delphi 2009 and for IonWorx to recompile their TcpSocket component to Delphi 2009?

There is no Delphi 2009 version and it's waiting for "someone" to port the open-source libraries to Delphi 2009 and for IonWorx to recompile their product to Delphi 2009.


Support?
Support is nearly non-existent. I had to "add" "IonWorx" to my MSN address just to ask some questions. IonWorx would ignore me on the "embarassing" questioned I raised (as in the notes above). BTW - Ionworx used to have a forum until many people complained their product was hacked/cracked or complained about poor support.


What Others Say?
http://groups.google.com/group/borland.public.cppbuilder.thirdpartytools/browse_thread/thread/acb3a9f2c4a7208d/945093831294d90?hl=en&ie=UTF-8&q=ionworx+delphi#0945093831294d90



Conclusion
It looks like I should save the money and look elsewhere.


March 2013 update
See updated article at Ionworx Re-review, Ionworx icelicense reveiwed
See Article corrections
See related article: Ionworx SerialShield Review

Nearly Dead: AppControls Slowness due to Hooking

Q: What happens if you put too many hooks in 1 form?
A: The window acts very slow because chain-of-command passes from one hook to another.

For example, putting 50 AppControls components will lead to slow form.
(50 chained hooks)


On other hand, LMD and TMS resolve this issue by using global form hook instead.
(1 hook, different components listen into that 1 hook)

Nearly Dead: DiskControls Reviewed

DiskControls is small library to disk processing
Vendor's URL: appcontrols.com
(Utilminds is off-line)

Briefly:

dcMultiDiskscanner/dcDiskScanner - does not support regex or look into file contents

dcFileOperation - suggest you look at ShellApi.pas

dcFolderMonitor - suggest you look at ShellApi.pas

dcFileCRC - has problems with large files because it loads up whole file into memory
Missing MD5 and SHA1.

dcTail - combination of dcFileOperation and callback

dcVersionInfo - use any Version Information component...

dcShellLink/dcShellIcon - suggest you look at ShellApi.pas

dcFolderListView - it's missing dcFolderShellTree (that tree on left panel in explorer), dcFolderFilterBox (the filter bar on top in explorer), dcFolderProcessing (the internal glue control between the filterbox, shelltree and listview)

dcFileEdit/dcFolderEdit - it's missing MRU list. No flat style either


Conclusion:
This is mixed review.

For example, the Shell Components could be much expanded to include more Shell Components that Windows has, RegEx library for file searching, Internal file searching, and others.

And of course - the #1 thing:
Please make sure your demo actually works.
URL at appcontrols%com/demos.html
(you may need to copy&paste and change the % sign to ".")

I can list down:
1) Folder does not exist...
2) disk search causes AV on reading "system directory"
3) Permissions causes AV on disk search.
4) Links are ANSI based
5) Folder monitor component slows down PC

Nearly Dead: AppControls Reviewed

AppControls / Delphi 2009 Reviewed
Vendor's URL: appcontrols.com
(Utilminds is off-line)

AppControl's history stopped at Year 2006 (see Version History) and then they released some updates for Delphi 2007 (in March 2007).

My review is based on AppControl / Delphi 2009 version. AppControls is simple library made for making tedious tasks easy.

Non-visual components were "nothing special".

Initial observation was Unicode problems, or rather, using WinExec(PAnsiChar) instead of Modern ShellExecute(). Most of codes uses "String" and obviously, the author never bothered to make a "Unicode" version of this library (until CodeGear Delphi 2009 came out and forced every vendor to upgrade to Unicode).

Most of code is simple, straight forward, like a collection of snipplets from Torry's or DelphiPages. For example, Application Mutex is straight forward. Do you really need to wrap it up in a component? Same goes with AutoRun (put your program to AutoRun when Window starts), AppEvents (Application events) (this is now in Delphi as AppEvents), TopMost (Force Window to Foreground).

Next observation was acInfoBox, or simple MessageBox replacement. I would suggest people to look for BradStower's freeware DontShowAgain MessageBox instead (it's cheaper by US$20 per developer).

Briefly:
AppAutoRun -- you can do it add/delete via registry to Windows\Run

AppStartCounter -- increment a number inside registry

CronJob -- set a timer and run lookup a time-list (e.g., run @7am)

AccurateTimer -- get a real profiler instead if you need to find out why your app took so long

AwayTimer -- suggestion: don't hook the keyboard and mouse during hiberation. that hangs the WinXP computer

AppEvents -- use the real TAppEvents instead

AppCursor -- Suggestion: too many hooks in 1 application spoils the whole application.

acOnlyOne -- use CreateMutex instead. (Does not work when App is minimized to tray)

acTrayIcon -- use TTrayIcon instead.

acShortcut -- use Jedi instead. Jedi is Unicode-aware (uses Widestring)

acFileextension -- use Jedi File association instead (at least jedi is Unicode-aware)

acClipboard -- does not support CF_RTF or CF_HTML. Also, only supports BMP.

acUpgrader -- does not support resume. it uses memorystream. if your upgrade is 10megs, it eats up alot of memory

acRssFeed/RssfeedContainer -- does not support atom, rss2, and rdf.

acAppBar/acFormMagnet -- try using freeware 'magnet' component instead. this component uses alot of hooks

acCaptionButton - titlebar buttons. does not work well on Vista, Citrix, Windows Terminal Server, Windows 2008. Also does not work when Title bar is skinned. (you use different Windows themes or Windock)

acAnimationEffect - is it necessary to animate form when loading/closing?

acWin2kEffects - n/a - features built-into Delphi 2005 and above.

acFormHints/acFormHelp - (same problem with acCaptionButton)

acSystemMenu - use freeware instead (same hooking problem as above)

acFormTopMost - google for "DSiForceForegroundWindow".

acFormRoller - google for "TurboPower Essentials".

acFormRestrictions - see "Anchors"

acFormSizeGrip - see "bsSizeable" in your Form properties

acFormHook - see "AppEvents"

acFormBackground - flicker issue. use others (vendor components) instead.

acEmbeddedForm - use TFrame instead

acFileStorage - use Resources / BRCC (Borland Resource Compiler) instead

acWavePlayer - use "PlaySound" Win32 API instead

acCursorLock - use "ClipCursor" Win32 API instead

acThread - use non-VCL based threading instead. This component is linked to TForm and hooked events.

acInfobox - use Brad Stower's DontShowAgain / or Jedi MessageBox instead

acProcessList - use Jedi's Process List instead

acConnectionList - use Jed's instead (Jedi has enumerations for Cable Modem and Router)

acIESniffer - use Balsa's HTML freeware component. That has more features

Visual Components
For the life of me, is it necessary to have a UrlLabel? or simple button that does nothing much?

acButtonsPanel - not enough buttons - this only provides Apply, Cancel, Custom, Help, OK.

acButButton - does not emulate IE flat or Office XP features
(fair enough, I did not include XP, Vista, MS-Money or Office 2007 styles)

acCheckGroupBox - not sure what the idea is to include both CheckBox and Groupbox together.

acSplitterPanel - no way to specify splitter (the thing in the middle between two panels) style.

acHeaderPanel - I need to implement docking by myself...

acPicturePanel - use TPanel, TBevel, TLabel together to achieve same effect

acLinksPanel - use TListView instead (at least, that allows multiple columns)

acDragPanel - use TPanel and track MouseMove

acEdit - has no "flat" feature

acNumberEdit - does not support 2^64 integers.

acIPEdit - use Microsoft's Common Controls instead/ or MaskEdit

acComoboDatePicker - use normal ComboBox with items Jan...Dec

acTrackBar - does not paint correctly in Windows Vista, Windows Terminal Server and Windows 2008.

acTreeView - not much difference. Suggest you use TTreeview.

acListView - does not support "flat" style.

acStatusControl - not sure why you need this for. Would suggest BradStower's StatusBar component.

acHeader - not skinned correctly in Windows/Vista/Windows 2008/Windows Terminal Server/Citrix.

acHTMLViewer - does not support enough tags. Currently at HTML 1.0 tags (or maybe worse)

acSystemInfo - simple query of System Information
(suggestion to vendor: why don't you make it return SystemInfo to TStringList so I can report it without writing reams of code to connect to your component)

acDateCalc - use FormatDateTime(TimeStart - TimeStop) instead

acUnixCrypt - Unix crypt with salt
(suggestion to vendor: would you mind making the DFM not store the salt and password?)

acStringListContainer - use Jedi's instead. Jedi's string list container allows storing multiple texts at once

acTextTemplateConverter - use StringReplaceText(...) instead

acSimpleTCPServer - can we suggest ICS or Synapse or Indy?

acQuickAboutBox - can we suggest you spend 15 minutes to put a Dialog, 4 Labels "Application 1.0", "Copyright", "Version", "YourWebsite.com" and "OK" button?


Pricing
For US$149 per developer or US$745 for 5 developers, this sounds expensive for simple library.

For US$149, there's TMS Library (with more components and better quality), LMD basic (for 1 user), ElPack basic (for 1 user) and other component packs competing for your money.


Conclusion
This is simple library and not updated much since 2006. DelphiHater wishes the author would spend a bit more time on this library and try to answer questions on Borland/Imprise/CodeGear/Embarcadero newsgroups before customers feel left out in the cold with no-replies.

[corrections: Typo's]