You are not logged in.
Pages: 1
I found something that may work. Thanks
I know I'm driving in the wrong direction by asking this question, like driving the wrong way on a one way street, :-)
but a colleague of mine desperately needs to convert PDF files to their own HTML directory. In other words he wants the text and images in a PDF file to be extracted to a directory. I'm not sure if he wants an index.html file to display the original contents of the PDF or not, but I do know he wants the text and images of the PDF extracted to its own directory so he can import the information into a database. He has dozens of PDF files that he needs the information extracted.
Is this even possible?
TIA
Brent
Got it, thanks for the quick reply.
Brent
I've been away for quite a while and I wanted to read through the Project Documentation that was just updated at
http://synopse.info/files/html/Synopse% … ml#TITL_17
I'd like to see a PDF download link on the page so I can download it as a PDF file. I tried printing it to a PDF file but I lost the hyperlinks inside the document. :-(
Also your Related Documents section on the same page:
Related Documents
Name Description Rev. Date
SWRS Software Requirements Specifications 1.18 May 14, 2015
SDD Software Design Document 1.18 May 14, 2015
DI Design Input Product Specifications 1.18 May 14, 2015
should have hyperlinks on them so the documents are easily accessible.
TIA
Brent
ab,
From your post on 10-24 I was under the impression you were commenting on losing ANSI in Delphi XE5. There is a definite need for ANSI in many situations (like accessing hardware controllers), but for writing vertical market applications or web applications, I feel Unicode is the way to go. As far as adopting UTF-16 instead of UTF-8, then I agree with you. I prefer UTF-8. A non-Unicode text editor can read a UTF-8 text file just fine. UTF-8 is more efficient and more widely used than UTF-16 and is up to twice as fast on networks since it transmits fewer bytes.
I don't know why Emb went with UTF-16. Maybe you should ask David I?
Brent
Ab,
All of my programming (and databases) for the past year has been Unicode. I don't think I'll ever need to go back to ANSI.
But I feel your pain. I had the same experience when I switched from EBCIDIC to ASCII some 30+ years ago. I am still recovering from that mental trauma and the night sweats are pretty much a thing of the past. Although I have to admit I still get chills thinking about writing code to convert tape data from one format to another. Brrrr! :-)
I recommend that you bite the bullet and embrace Unicode. The rest of the world has. The more you resist, the more you will be left behind.
Brent
"Typical results are the following:
Threads Clients/
thread Rows
inserted Total
Clients Time
(sec) Op/sec
1 1 10000 1 15.78 1267
50 1 10000 50 2.96 6737
100 1 10000 100 3.09 6462
100 1 20000 100 6.19 6459
50 2 100000 100 34.99 5714
100 2 100000 200 36.56 5469
500 100 100000 50000 92.92 2152"
Are you sure "15.78" seconds is correct for 1 thread 1 client?
Brent
>So deprecating AnsiChar is still not a good idea, and the Marco's pdf is very confusing...
If Marco is confused, is there any hope for the rest of us?
>About SMS integration see http://synopse.info/forum/viewtopic.php?id=1066
>I'm currently adding "official" mORMot support in the SMS IDE in the short term.
That's great news. At least I know it will be there when I need it.
Brent
My concern is that I'm still not convinced that FireMonkey is mature enough to be used on the client side, in respect to SMS.
That's what I'm going to find out too.
And I can assure you that HTML5 support SQlite3 storage.
This is why SMS is so appealing to me: cross OS, RAD (to some extend, but much easier to work with than XCode), and with a great compiler made by Eric Grange.
I see that they do indeed support Sqlite. I have downloaded SMS and I'm looking at it now. It will take me about a month to determine whether I'll choose SMS or XE4 for iOS.
I assume you've got some examples on using SMS to access mORMot remotely on a server? It will be a few weeks before I get that far, but I had to ask. :-)
In all cases, I do not have XE4 at hand to do the port yet.
But it is feasible, of course.
We can set type RawUTF8 = array of byte and work with it in the framework...
With a lot of IFDEF I'm afraid...
That means, spending a lot of time in working and proven code, just because EMB did not do its own work, and pick up the "easy" path for them, not for us?
Compared to other language platforms I've used over the past 30 years, Delphi had always been the most backward compatible language, until now. Maybe we got spoiled along the way? [VBG]
We will both have to monitor the XE4 FM newsgroups to see if it is attracting new users and see if it lives up to expectations. Sure there will be a few complainers, but I think the best test to judge success (or not) is to see how many XE4 iPhone apps appear in the Apple app store. In other words, "Can the Dog Still Hunt"?
I will try SMS for a month and maybe Delphi XE4 as well to see which one is better for iOS development. I'll let you know.
Brent
Ab,
Thanks for replying so quickly and thoroughly. If I were a dentist and you were in my chair, I fear I may have touched a nerve. :-)
At least it will open up a discussion that will make us aware of problems and benefits that lie ahead.
@BrenG
As far as I know, SMS does support local database.
http://smartmobilestudio.com/documentat … l-storage/
http://smartmobilestudio.com/documentat … orage-api/
You have direct access to the HTML5 storage DB, i.e. either name/value pairs, either SQLite3.
There is a size limitation for a HTML5 application, but you can remove this size limitation as soon as you package it into a PhoneGap application.
Using FireDAC is therefore not the only choice.
I'm not so sure Sqlite is supported in SMS Pascal but I have asked on their forum and should get an answer back soon.
You are the first two to explicitly ask for non-Windows support of mORMot.
I'm really surprised to hear this. I feel the future for software development must include mobile devices and that must include data storage. The major obstacle I've been facing is local db storage on these portable devices. Any development system I choose, must have the capabilities for a local relational database, like Sqlite (preferably with encryption in case the phone is lost).
I'm in Canada and we have one of the highest fees for mobile internet connections anywhere in the world. We have low caps and high over usage fees. Roaming fees in other countries, like the U.S. can easily exceed $10,000 for people on holiday just for checking email and watching a few short Youtube videos.
I cannot expect users of my software always to be connected to the internet to store their data in the cloud.
This is the reason why we did not put the cross-platform item of the roadmap at first place.
See http://blog.synopse.info/post/2011/08/0 … FireMonkey
I did not do any support for this yet, because:
- FireMonkey was broken several times, has some part of it very poorly written, and do not support L2R languages - is it mature enough?
- iOS support was broken once - and I prefer FPC to this NextGen compiler (see below);
- We do not use FireMonkey in any of our applications;
- SmartMobileStudio is a good, fast growing, cheap, and stable alternative (with lack of documentation and 3rd party components, I admit);
- I also considered WxForms - http://twinforms.com/products/wxformsdelphi/index.php (which seems not supported any more, but did work well);
- Linux support is a goal for mORMot, on the server side.Immutable strings are something I do not understand well.
Using "array of byte" as a workaround from AnsiString/RawByteString is possible, but will be slower and less convenient.
Honestly, changing from everything from AnsiChar to Byte is just an awful workaround and breaking change.
Just like a regression from the modern/turbo Pascal paradigm to a low-level C data type.The switch introduced by NextGen/ARM/LLVM is IMHO much bigger than the one introduced with Delphi 2009.
For instance, for third party libraries (like our Open Source mORMot), you can maintain an existing code base for all versions of Delphi (e.g. Delphi 6 up to XE4), but you will have to maintain two versions of the code (or nest it with IFDEF) if you want to support NextGen syntax.I'm confused with the Embarcadero NextGen compiler.
Performance is not a goal. The RTL is just worse at every Delphi version.I understand that conversion to NextGen compiler can be easy.
See for instance how TMS reported it to be not difficult for Aurelius.
http://www.tmssoftware.com/site/blog.asp?post=263But... do not forget that it may be on the depend of the performance.
Using pointers is not evil, if done with knowledge of it.
See http://synopse.info/forum/viewtopic.php?pid=6363#p6363 about FireBird ODBC access using Aurelius or our Open Source mORMot (which allows remote access, by the way, in addition to plain ORM).
IMHO this is one of the great features of compiled object pascal, in comparison to managed code, or the "NextGen" model.
My point is that pointers are not evil, especially for performance.
Of course, I'm speaking about typed pointers, not blank untyped pointers.
Yes but performance on an iOS device is not of primary concern. iOS and Android are not a multitasking mutli-threaded environments. It is only going to serve one connection at a time. I certainly wouldn't recommend using FMX to write a high capacity server, on that I think we agree.
We could switch the mORMot code to be Next-Gen compatible, but since we use UTF-8 at the lowest level, it will need a lot of IFDEF.
Using "array of byte" instead of "AnsiString(CP_UTF8)" and "byte" instead of "AnsiChar" is just an awful regression and compatibility break.
We would have to use a lot of function wrappers, or perhaps re-create at hand a UTF-8 compatibility layer.
The whole mORMot core is depending on UTF-8, and IMHO this was *not* a wrong choice, on the contrary.
Deprecation of AnsiString was never prepared by Embarcadero. We knew it about shortstring - OK.
But deprecation of AnsiString in the NextGen compiler sounds like a showstopper to me.
Why can't you just create your own TmormString class and have all of the {$IFDEF ...} defined in that one unit?
And don't tell me it is required by the LLVM compiler to have immutable strings and UTF-16 encoding.
This is a pure Embarcadero choice.
From what I've heard, immutable strings have not been implemented yet. It is something Embarcadero is considering in the future. How far into the future, I don't know.
Switching to FPC sounds a much easier path to me, than this NextGen compiler.
I don't know how polished FPC is at producing iPhone apps. Their iOS documentation seems to be sketchy at best. It appears to me that their iOS platform is more for a hobbyist.
Brent
>Honestly, if targeting a iPad client, I would rather use SmartMobileStudio and create an AJAX client.
It will work on iPad, iPhone, and Android, and also on Windows, OSX and Linux desktops.
You can package your SMS app into a native iPad/iPhone application, using PhoneGap.<
Ab,
I'm really disappointed you won't be supporting XE4 & iOS as a local database. :-(
I looked at SmartMobileStudio and liked their videos, but the last time I looked they also did not support local databases. I need to write db applications for iPad/iPhone where the user may not always have access to the internet. (They will eventually transmit their local database to a server so that's why I thought of mORMot.)
What development system do you recommend?
The only choice I see is XE4 with FireDac and Sqlite (unfortunately without encryption) and maybe connect to mORMot on the webserver. The lack of encryption (unless I license IB Pro for iOS) on portable devices is something I'd like to avoid.
Brent
P.S.
If I can get you a legal copy of XE4, would that help motivate you? :-)
ab,
Hey that's great! I didn't think you'd get it done this fast. I'll try it out.
Thanks again.
Brent
I suspect I'll implement tomorrow a new unit, able to publish any TSQLTable into a TDataSet component.
It will fill the gap between SynDB/mORMot and the VCL DB oriented components.
That would be great, thanks!
That would allow me to use mORMot for more applications. :-)
Brent
Thanks for the quick reply. I wish other forums were this responsive with their software.
::There is no TDataSet support yet.
::So you won't be able to use all the DB.pas related features of those components.
::What you can to is using a memory TDataSet, which is to be filled from mORMot.
Ok. I'm wondering if I should stick to a Sqlite memory table so the datatypes are the same?
Can anyone recommend a good (inexpensive) Sqlite TDataset component for Delphi?
::For the Grid point of view, it could be filled from a TSQLTable result.
::You have to use the "GetValue" event handler, and let it be filled by TSQLTable, via the FillStringGrid() function.
::See http://synopse.info/forum/viewtopic.php?pid=3360#p3360
Sounds feasible. I'll give it a try. Of course if the user edits any of the cell values, I'll have to write it back to mORMot. Shouldn't be too difficult.
In some future version, it would be nice if there were methods that allowed users to create adhoc "queries". This would be easy enough for single table "queries". Not sure about joining tables though.
TIA
Brent
P.S. How's the SQL implementation coming along. VBG
There are a few TDataset oriented controls that the customer simply "must have" in my application.
So what is the best way to use FastReport and DevEx Quantum Grid with mORMot?
Do I use a TClientDataset and fill it with data from mORMot? Are there methods available to do this?
I'm searching for this "missing link"? (link from mORMot to TDataset)
I know from a purest standpoint, using code will be faster and more efficient, but I need these TDataset grid & report components so I can allow the user to sort, group, summarize data at will. I also want the user to be able to create his own reports.
What's the solution?
TIA
Brent
::: In iOS, you need only the client part.
:::: And it can use plain sockets API, on iOS, for the client connection.
Can we see a sample app of an iOS client (using Delphi FM) connecting to a mORMot Windows server?
Is it possible to have a secure connection between the two other than using SSL on the server?
TIA
Brent
Thanks for your reply.
So if Delphi XE2/3 ever dropped its dependency on FPC and used its own compiler to create iOS apps, then mORMot would reliably on iOS?
TIA
Brent
I don't know how far along you guys are with iOS, but I'd like to use mORMot in an iOS app for iPhone/iPad using Delphi XE2.
The iPhone app should be able to create a SQLite database on the iPhone where the user can enter data through forms (local data) and display the data in a listbox/form etc. (CRUD). The iPhone app should also be able to access a mORMot web service running on a Windows machine via HTTP. I'd like to use MVC on the iPhone so I can isolate the logic away from the form. I think mORMot would be perfect for this.
How much of this is possible today? Any demos?
And how long will it take for the rest?
TIA
Brent
Ok, thanks for the explanation.
The Readme.Txt step 4 is what confused me:
4) Compile the project in D:\Dev\Synopse\Sqlite3\TestSQL3.dpr and run it to make sure it passes all tests.
On some computers, named pipes communication tests may fail - see http://synopse.info/forum/viewtopic.php?id=678
If you want to run the tests with the fast http.sys kernel-based HTTP server, you'll need to compile and run (as administrator) TestSQL3Register.dpr before launching TestSQL3.dpr
After reading this I was under the assumption that running TestSQL3Register.exe would have TestSQL3.exe bypass named pipes and use the HTTP Server instead.
Brent
I've been away for a month so I decided to re-download the most recent sources Synopse OpenSource-90b1a2a4b3be5985.zip.
I ran TestSQL3.dpr and of course like last time, it failed to use the named pipe for one of its tests because I'm using Win7 (XE2 upd4).
! Exception ECommunicationException raised with messsage:
The system cannot find the file specifiedct to server "Test"
According to your Readme.txt, I then compiled and ran TestSQL3Register.dpr as administrator and re-ran TestSQL3.dpr. It still failed on the named pipes test.
1) So do I need to change TestSQL3.dpr so it uses the HTTP server instead of named pipes?
2) How do I know the HTTP server is actually running?
I did some debugging in TestSQL3Register.dpr and found THttpApiServer.AddUrlAuthorize method is setting
Config.KeyDesc.pUrlPrefix to http://+:888/root/
Why? I thought it would be something like http://localhost:888
TIA
Brent
Leander007,
When I took a look at the code changes in today's download, I realized Arnaud missed including the constants in the TSQLite3HttpService class, but I thought it was all aesthetics as to where the constants were declared. My Bad!
I'm repeating myself to often smile.
Yeah, I'm getting a little dense in my old age. It's working now. Thanks for the help.
Brent
Yes. I opened a DOS window as Administrator and typed:
httpservice /install
httpservice /start
The /install worked (appears in Services window), but the /start is ignored and no log file produced. I assume the log file would be produced in same directory as the .exe. The /uninstall also does NOT work. I had to execute a "SC Delete mORMotHttpServerService" to uninstall it from the Services window before I try again.
Brent
Win 7 32-bit (default OS)
Delphi XE2 32-bit (default, I have all Delphi versions installed in XP Virtual Box)
I hate to burst everyone's bubble, but the problem still persists, at least with D2007 or XE2, even with the latest download http://synopse.info/fossil/info/215e44e66b.
I have tested it on Win7 (32 bit or 64-bit) and XP SP3 in a VirtualBox as Administrator.
I can install it, but it won't start. If I try and start it manually in the Services window it I get "Error 1053: The service did not respond to the start or control request in a timely fashion.".
I checked the latest Synopse source code (downloaded today) and Leander007's changes are in there. If someone wants to give me a link to their "httpservice.exe" I can run it here to see if the problem is Windows or my installation of mORMot.
Like I said, I just downloaded "Synopse OpenSource-215e44e66b1226ae.zip" and installed it an hour ago.
Brent
I compiled TestSQL3.dpr using Delphi XE2 32-bit and it fails on Win7 32-bit (Computer A) because it can't connect to the server:
=====================
! Exception ECommunicationException raised with messsage:
The system cannot find the file specifiedct to server "Test"
D:\TMP\TestSQL3\TestSQL3.exe 0.0.0.0 (2012-04-08 19:14:02)
Host=Brent3500 User=Brent CPU=2*0-15-8962 OS=12.0=6.1.7600 Wow64=0 Freq=3579545
TSynLog 1.16 2012-04-08T19:57:45
20120408 19574520 EXC ECommunicationException ("TSQLRestClientURINamedPipe can't connect to server \"Test\"\rvia \"\\\\.\\pipe\\Sqlite3_Test\":\rThe system cannot find the file specified") at 00523512 stack trace 00544E5F 00466FE9 0058596A 004086DC 0058B259 77931114 77ABB299 77ABB26C
20120408 19574520 EXC ECommunicationException ("TSQLRestClientURINamedPipe can't connect to server \"Test\"\rvia \"\\\\.\\pipe\\Sqlite3_Test\":\rThe system cannot find the file specified") at 00523512 stack trace 0058596A 004086DC 0058B259 77931114 77ABB299 77ABB26C
=====================
I can copy the same TestSql3.exe file to another computer (B), this time Win7 64-bit (instead of 32-bit) and it runs fine if run as Administrator. I have the same Firewall (ZoneAlarm Free) and Antivirus(Nod32) enabled on both machines.
I suspect TestSQL3.exe can't find the named pipe because I had this problem with "03-NamedPipe Client-Server" last week on Computer A.
I downloaded oRMot again today (Sunday) and recompiled TestSQL3.dpr with sqlite3.obj and sqlite3fts3.obj dated 3/27/2012 1:21PM (like I did before). Same problem on computer A but works fine on Computer B.
I deactivated the antivirus and firewall on Computer A, but problem remains.
I do have other programs on computer A that use Sqlite3, so maybe it is finding something on the path? I opened a DOS window as Administrator and set the path=\ and ran TestSQL3.exe from its directory. Still fails at the same point.
So is there something with Computer A that is preventing Named Pipes from being used?
What do I need to activate to enable Named Pipes on Computer A?
TIA
Brent
I forgot Step 2b, which is what started this thread.
Step 2b)
Download sqlite3obj.7z from http://synopse.info/files/sqlite3obj.7z and extract these two files "sqlite3.obj" and "sqlite3fts3.obj" to the c:\Delphi_Dev\Synopse\Sqlite3 directory.
Brent
Thanks for the quick response.
The Readme file I was hoping for, was the install instructions for the file that was downloaded and should appear at the very top of the Readme file you just wrote.
Example:
Steps to install mORMot (Works with Delphi "x" to Delphi XE2 32-bit/64-bit)
1) Download mORMot framework from http://synopse.info/fossil/wiki?name=Downloads (in case user later forgot where he downloaded software from)
2) There is no install program, so unzip the files to your Delphi component directory.
Example: c:\Delphi_Dev\Synopse\
When finished, your directory structure should be:
c:\Delphi_Dev\Synopse\HtmlView
c:\Delphi_Dev\Synopse\LVCL
c:\Delphi_Dev\Synopse\RTL7 etc.
3) Modify the Delphi Library Path to include:
c:\Delphi_Dev\Synopse;c:\Delphi_Dev\Synopse\Sqlite3;
4) Add the directory "x" to your Windows Path (probably not necessary in this case because there are no dll's or utilities that I can see)
5) Run Delphi and compile the project "c:\Delphi_Dev\Synopse\Sqlite3\TestSQL3.Dpr" and run it to make sure it passes all tests.
If any of these tests fail, here is the link http://synopse.info/fossil/wiki?name=TestSQL3Fail that offers solutions to the problem you encountered.
6) Sample programs are found in: c:\Delphi_Dev\Synopse\Sqlite3\Samples and the explanation of each is found in their ReadMe.Pdf file
7) Download the Sqllite3/mORMot documentation from http://synopse.info/fossil/wiki?name=Downloads.
The "GettingStarted.Pdf" will get you up and running quickly, then proceed to "BeAmazed.Pdf" for a more thorough approach to using mORMot.
8) Additional files/utilities that you may find useful are:
Program Description Download Link
"x" Sqlite3 Mgr http://...
"y" Sqlite3 Importer http://...
"z" "GettingStarted.Pdf" http://...
Books "Sqlite For Mummies" http://...
I prefer using a Readme.PDF for my software because I can sneak in graphics (screen shot) if I have to. I used to use Readme.Rtf or Readme.Txt and it was too limiting in getting my message across.
I hope this has been of some help. (Returning the favor for you guys creating such great looking software).
I am reading through your documentation pdf files and have made some annotations. Let me know if there is an email address I can send it to. Newbies like me can offer some good feedback because we usually trip over stuff that isn't obvious.
I hope to spend a lot of time with mORMot over the next month and will no doubt have questions for the forum.
All the best.
Brent
D'uh, never mind.
I found the missing .OBJ files in sqlite3obj.7z.
Suggestion: It would be nice if there was a readme.txt file in SynopseSQLite3.zip that listed the other steps that are needed to complete the downloads and get it installed properly in Delphi (or a link to the website that has this readme page). In fact all zip files should have a ReadMe.txt that explains where these files are used. That way the developer sees the layout of how the puzzle (download files) fits together instead of just one piece of the jigsaw at a time.
- Just one guy's opinion.
Brent
I just downloaded "http://synopse.info/fossil/info/1bc71e61bc" and the example programs won't compile.
I am using Delphi XE2 and the "02 - Embedded Sqlite3 ORM" and "03 - NamedPipe Client-Server" projects can't be compiled ("01 - In Memory ORM" works). I suspect none of the SQLite3 related projects will compile. A search did not turn up "sqlite3fts3.obj" anywhere on the computer.
I have both directories:
\Dev\Synopse
\Dev\Synopse\Sqlite3
defined in my Delphi library path.
What am I missing here? Am I suppose to compile SQLite3? If so, can you point me to the instructions?
TIA
Brent
[DCC Error] SynSQLite3.pas(2423): E1026 File not found: 'sqlite3fts3.obj'
[DCC Error] SynSQLite3.pas(306): E2065 Unsatisfied forward or external declaration: 'sqlite3_initialize'
.... .pas(446): F2063 Could not compile used unit 'SynSQLite3.pas'
Failed
Elapsed time: 00:00:01.4
I just stumbled on mORMot and since I'm a Delphi fan, I'm eager to put it to work.
My question is, what is the best way to construct the table structures?
1) Is the table structure always hand coded in a Delphi TSqlRecord class as per the first couple of examples I've seen, or
2) Can I use something like SqliteStudio and then import the table structure into Delphi? If so, is there a utility for that?
TIA
Brent
Pages: 1