Jump to content

Joseph MItzen

Members
  • Content Count

    270
  • Joined

  • Last visited

  • Days Won

    7

Posts posted by Joseph MItzen


  1. On 7/17/2021 at 5:07 PM, Soulflesh said:

    I did some performance tests and unfortunately came to the expected result that normal thread processing does not bring any significant performance benefits.

    Threads are evil. Threading was never originally intended for general parallel processing. In Python, what you want is multiprocessing; performant and safe. Threading in Python will only improve IO-intensive tasks.

     


  2. On 12/2/2019 at 2:32 AM, Fr0sT.Brutal said:

    I can't believe it took a decade for them to implement SELECT FROM SELECT

    Quote

    "I could easily fill a book with good reasons why InterBase rocks. Limiting the coverage to a modest five was challenging. InterBase represents a rich legacy of excellence that spans decades combined with continued innovation that never stops moving it forward. I find myself wanting to add more and more, just to get the message across."

    -John Aasenden, blogging for Embarcadero

     

    They added Common Table Expressions 8 years after PostgreSQL (although they still don't have the recursive option, which PostgreSQL has had for 11 years now), tablespaces 15 years after PostgreSQL... they still don't support partial indexes, functional indexes, window functions, UPSERT, full text search or even timestamp with timezone. No compression support, materialized views, partition support... Their marketing material still brags about being "SQL-92 compliant". It's only been in the last few years that Embarcadero has made any user-facing improvements at all to Interbase.

    I remember a blog post by MVP Warren Postma several years ago about the Interbase Developer Edition shutting down after four hours (I think it's up to 48 hours now) and how ridiculous that is given that SQL Server, Oracle, etc. give free developer editions without the forced shutdowns. David Intersimone appeared in the comments and said that four hours was plenty of time to test any code and they didn't want people stealing the database. Warren, MVP status be damned, asked David why anyone would go through all the trouble of stealing Interbase when there were much better databases they could have for free? :classic_biggrin:David didn't respond to that.

     

    Even SQLite offers window functions, partial indexes, functional indexes, JSON support, full text search, UPSERT and common table expressions with recursion now. (It's actually a damn fine database for performing data analysis on the desktop now; I'd choose it for business intelligence or analytics work over Interbase in a heartbeat).

     

    I leave you with four more quotes to ponder....


     

    Quote

    Since 1999, SQL is not limited to the relational model anymore. Back then [the SQL standard] added arrays, objects and recursive queries. In the meanwhile the SQL standard has grown five times bigger than SQL-92. In other words: relational SQL is only about 20% of modern SQL.

    -Markus Winand

    Quote

    A revised version of the SQL standard is released from time to time; the most recent update appearing in 2016.... Each version replaces the previous one, so claims of conformance to earlier versions have no official merit....

    SQL-92 defined three feature sets for conformance: Entry, Intermediate, and Full. Most database management systems claiming SQL standard conformance were conforming at only the Entry level, since the entire set of features in the Intermediate and Full levels was either too voluminous or in conflict with legacy behaviors.

    Starting with SQL:1999, the SQL standard defines a large set of individual features rather than the ineffectively broad three levels found in SQL-92. A large subset of these features represents the “Core” features, which every conforming SQL implementation must supply. The rest of the features are purely optional.

    ...PostgreSQL supports most of the major features of SQL:2016. Out of 177 mandatory features required for full Core conformance, PostgreSQL conforms to at least 170. In addition, there is a long list of supported optional features. It might be worth noting that at the time of writing, no current version of any database management system claims full conformance to Core SQL:2016.

    -PostgreSQL 13 documentation

     

    Quote

     

    For business data on mobile, InterBase ToGo is packed with superior disaster recovery and data-protection compliance features that are key to maintaining both your and your customers’ reputations. With protection throughout the development life cycle, InterBase massively reduces the risk of fines and regulatory action in the event of lost data.

    SQLite is basically a flat file on steroids; SQLite does [sic?] offer the same level of database support to ensure data integrity and doesn’t for high concurrency. Because of this, it is not really suited for ISV development.

    -Embarcadero

     

    Quote

     

    SQLite is likely used more than all other database engines combined. Billions and billions of copies of SQLite exist in the wild. SQLite is found in:

    Every Android device

    Every iPhone and iOS device

    Every Mac

    Every Windows10 machine

    Every Firefox, Chrome, and Safari web browser

    Every instance of Skype

    Every instance of iTunes

    Every Dropbox client

    Every TurboTax and QuickBooks

    PHP and Python

    Most television sets and set-top cable boxes

    Most automotive multimedia systems

    Countless millions of other applications

    Since SQLite is used extensively in every smartphone, and there are more than 4.0 billion (4.0e9) smartphones in active use, each holding hundreds of SQLite database files, it is seems likely that there are over one trillion (1e12) SQLite databases in active use.

    -SQLite.org

     

     

     

    Interbase zqnppa0zy7l01.jpg

    • Like 3

  3. On 7/17/2020 at 7:52 AM, sjordi said:

    Ok that did it. I had some troubles first but I was able to batch move table by table and get the equivalent in Interbase.
    Now I'll try to implement the triggers to replace the missing autoinc fields. 🙂

    Thanks for the suggestion

    Steve

    Who won? Who won? Who won?


  4. On 9/22/2021 at 7:10 PM, David Schwartz said:

    Is your head spinning yet?

    It sounds like you hate web scraping. :classic_biggrin: Meanwhile I've developed a new love of web scraping.. it unlocks all sorts of amazing possibilities. Delphi's really not the best tool for the job, though. But if you use selenium to control a headless browser and deal with the javascript for you, beautfiulsoup to scrape a page, and perhaps scrapy if you need to do web crawling... things become a lot simpler.

     

    My brother has a preexisting medical condition that made him quite vulnerable during the COVID lockdown. Food stores were offering a service where you could order online and they would shop for you and have contactless pickup but there were only so many time slots during each day available and high demand. The first time my brother managed to get an order in he had to do so at a store an hour away! I wrote a program that used selenium to log into my brother's local grocery store website and navigate to the time reservation page and then passed the HTML post-javascript to beautifulsoup to extract the time table and parse it. If there were new openings it would then email my brother to let him know. This was quite a big help to him and saved him two-hour round trips.

     

    I've scraped my Amazon wish lists and then used beautifulsoup and requests to search the online lending library at archive.org to find books I was interested in that were available to read for free through archive.org.

     

    I used some web scraping to create a script that checks if a piece of open source software I use has a new version available, and if so to download, compile and install it in one go for me.

     

    I'm competing in an online horse race handicapping contest and another script takes the races for the contest and scrapes the race track's YouTube page to let me know when the video is up from the relevant races (YouTube is an ugly JSON-filled mess to scrape unfortunately).

     

    I've been on the lookout for more things to scrape too! It can only take a line of code or two unless the website takes drastic measures to avoid it (*cough* Equibase *cough*) but then just a few more lines of code to bounce your page requests through TOR while resetting the connection each time to get a new output node at a different spot in the world will take care of that. :classic_biggrin:

    • Like 1

  5. On 9/22/2021 at 7:10 PM, David Schwartz said:

    Honestly, if you're going to risk stealing copyrighted content from other sites

    Performing open source intelligence on competitors' pricing isn't a copyright violation; depending upon how it's done it may be a violation of the site's terms of service though. Now if they're actually going to use the competitors' product descriptions and photos then yes, that would be a copyright violation as well.


  6. 14 hours ago, Dalija Prasnikar said:

    Delphi is much more low level than C# or Java or JS.  It has all those string types for a reason and for interacting with particular OS and other APIs.

    D has three types - string is UTF-8, wstring is UTF-16, and dstring is UTF-32. Rust has two types - string, and a type that is a slice into a string (it considers this to count as a second string type in the documentation). It still remains that Delphi is the only language to feel the need for so many different types. Heck, Python is the ultimate "glue" language to shove data around between OSes and APIs, and it has one string type and one bytes type and this is sufficient to interface with everything, deal with Windows and COM, wrap C code, etc.

     

     

    Quote

    We have different integer types

    Don't get me started on that too! 😉 No complex number type, no fraction type, no arbitrary precision library, but so many integer types.... At least when I learned Turbo Pascal in Catholic high school I could declare all my types Cardinal.... :classic_biggrin:

     

    • Haha 1

  7. 14 hours ago, Fr0sT.Brutal said:

    I've seen some articles with yells like "why Shortstring, Ansistring, Rawbytestring, WideString, Unicodestring, Utf8string, Whateverstring when you only need one Unicode string?!"

    That was probably me. They even came up with a string type to address the problem of too many string types. :classic_rolleyes: Python first transitioned to Unicode in 2000 and ended up with two string types. It was a disaster, so they broke backward compatibility with 3.0 in 2010 to have a single string type again, the 2.x line had to be supported concurrently for a decade to get people to finally convert their codebases, and it was all a big mess. Delphi had the luxury of not switching to Unicode until ten years after Python, so they got to see all the problems with two string types. Then they decided to do a "hold my beer" and come up with about 256 different string types... and then get rid of them... and then bring them back on platforms there wasn't even legacy code for.

     

    14 hours ago, Fr0sT.Brutal said:

    Indeed, AFAIK C# only has one string type and so does JS.

    C#, Javascript, Python, Ruby, Swift, Go, R, PHP (but still no native Unicode support!), Kotlin... you'd think if 29 string types were useful, more languages would have at least two...


  8. On 9/22/2021 at 10:03 AM, Arnaud Bouchez said:

    ShortString have a big advantage: they can be allocated on the stack.

     

    Is this ever going to introduce a human-perceivable performance increase?

     

    Quote

     

    Why? Because some people at Embarcadero thought it was confusing, and that the language should be "cleaned up" - I translate by "more C# / Java like", with a single string type.

    ...More a marketing strategy than a technical decision IMHO.

     

    Basically everything has a single string type nowadays. Again, I can't conceive of human-perceptible results by fiddling with different string types, but it does slow down human coding and make the language more difficult to learn. It's also more code for Embarcadero to maintain. And as the saying goes, "Every line of code that doesn't need to be written is a line of code guaranteed to be bug-free."  I don't think "We have less string types!" is really a winning marketing slogan. Although they did completely run out of ideas for promoting Interbase and came up with the below ad....

     

    Quote

    I prefer the FPC more "conservative" way of preserving backward compatibility.

    Fair enough; I prefer the "break everything at random" approach to keep people on their toes, constantly refactoring and adopting language changes. :classic_biggrin:

     

     

    Interbase zqnppa0zy7l01.jpg


  9. 8 hours ago, Roger Cigol said:

    I feel they should have used this as a low cost way of learning what they needed to concentrate on improving. But it seems that rather than fixing the problems that were annoying their customers their marketing dept. insisted that they close the mechanism of reporting down.  They do have good products and they do have a good marketing team - but they do need to make sure that they listen to their customers and respond effectively to what they are not doing well. By closing their forum they lost an opportunity to do this.....

    I won't go into the whole story, but I once had an online exchange with David Intersimone, then VP of Developer Relations, about a survey he'd run and tried to explain to him how it was only going to tell him what he wanted to hear and not what he needed to know. Despite my being a professional data analyst at the time, it felt like he was trying to lecture me on how surveys worked. I tried to explain that when you survey the first 500 people to buy a new release, you're missing those who chose not to upgrade because of bugs, price or features, which were the three biggest complaints at the time (still are). Of course, it also missed those who had already opted to leave for another platform. That's when David gave me insight into the thought processes at Embarcadero and I knew there was no helping them... he wrote "People leave Delphi for C#; people leave C# for Delphi; so we just keep on doing what we're doing." In short, they're like a black box whose outputs are not influenced by the inputs.

     

    This survey asked questions like (approximately) "What's the most awesome thing you can think of about Delphi?" and nothing about what's your biggest problem with it. Answers to this question (from the biggest fans who were quickest to order the upgrade) were used within days by the marketing team in a press release and a blog entry, showing the survey was nothing more than quote mining for marketing. Marco Cantu tried to claim that they have lots of surveys - dozens, hundreds, thousands! - where they ask all the questions I suggested and more, although no one seems to have ever received an invitation to take one of these alleged surveys.

     

    In another instance a person talked about being a subject domain expert but no Delphi experience who was hired by a Delphi shop. They took him to... he called it a user group meeting, but it sounded like one of the old World Tour events. I'll skip over his general impressions, but he was unsettled by the small number and age of the participants. He brought this up after the meeting with the Embarcadero employee who was there and said that the employee responded to him: "We don't like for new people to show up at these meetings; they're filled with angry middle-aged white men".

     

    I've got a few more examples I won't go into, but I'll say I've seen and heard enough to be convinced that for the *majority* of Embarcadero employees, the concerns of customers aren't really high on their agenda (David Millington being a notable exception). When two of the people who actually develop Delphi showed up in the old forums one day and someone brought up a critical bug they were experiencing and not getting help with, one of them wrote: "See - this is why we don't like to come here." Tony de la Llama, who was in sales, showed up in the forums once and he was a nice, friendly guy. When someone told him about a problem they were having, he expressed personal sorrow over their experience and promised to escalate the issue personally so they'd get a fix. He said we were all swell people and he really enjoyed interacting with the users and planned on doing it again. Days later the EMBT CEO blamed Tony personally for low Delphi sales (I was told this by another EMBT employee) and fired him right before Christmas. 😞

     

    So anyway, they did not have a history of listening to their customers, rarely showed up in the forum and when they did it often didn't go well. And the one person who really listened got fired. Hence I don't think it's that great a loss. (Again, I want to give David Millington credit for being one of the few EMBT employees to visit forums, including Reddit, and actually offer help to users with problems and listen to their suggestions and feedback. He's the only one I've seen do so since Mr. de la Llama.)

     

    • Like 3
    • Thanks 1
    • Sad 4

  10. 1 hour ago, Remy Lebeau said:

    ♫ Into the Unknooo-ooo-ooo-own... ♫ (sorry, couldn't help myself :classic_biggrin:)

    I've been thinking about it, and since C++ isn't exactly an obscure language, maybe they've gone to the same place non-C++ Builder C++ users go to.


  11. 12 hours ago, Remy Lebeau said:

     Rather than assigning a TIdIOHandlerStack component to the TIdIMAP4.IOHandler property, you need to assign a TIdSSLIOHandlerSocketBase-derived component instead, like TIdSSLIOHandlerSocketOpenSSL (TIdSSLIOHandlerSocketBase derives from TIdIOHandlerStack and thus also has the TransparentProxy property).  And then set the TIdIMAP4.UseTLS property to utUseImplicitTLS.

    Remy, I think you hit your head and have started speaking Java. :classic_tongue:


  12. 19 minutes ago, Gord P said:

    I think the OP was referring to having C++ Builder discussions not the forum in general.  And I agree with him and for the reason he cited as well.  That is, there has just been a major release for C++Builder and there is absolutely zero discussion on it.  Very sad.  I have not installed it, so I can't comment on it.

    So where did the C++Builder users who posted on the old forum go?


  13. On 9/20/2021 at 7:15 AM, Josep said:

    The library includes in demos folder the GChartsDemo project with several examples that show how to build the different class charts.

    The documentation and examples are far superior to Steema's TeeChart documentation. Seriously - far superior. Their tutorial dates back to Delphi 7, there's no simple list of charts by type that take you to documentation like you (and every other open source graphing library I'm familiar with across languages) organize their documentation by. There are examples on Github if you can find them, but they have vague titles, no text explanation, contain no code comments, don't show the expected output, and strangest of all, use random data so they wouldn't be reproducible even if you could see a picture of what the output should be!

     

     


  14. 2 hours ago, Martin Sedgewick said:

    Off Topic FLAME WARS are much missed 😄

    A few weeks ago I was thinking to myself... boy, do I miss Rudy Velthuis. There's so much I wish I could talk with him about. Then I did some googling and found some archived discussions.

     

    I found Rudy and the old, evil version of Nick Hodges arguing that it would be of no benefit at all for Embarcadero to allow users to submit code fixes, also insisting that the Delphi test cases were vast and robust. I was there too, pointing out how useful user-submitted patches have been to open source software, citing the Linux kernel. Then Rudy replied to me that if he had his way, even the Linux kernel wouldn't be allowed to accept code submissions.

     

    I drew a few conclusions:

    1. Do I still miss Rudy? YES.
    2. Was Rudy a very wise and intelligent person to converse with? Yes.
    3. Did I enjoy discussing things with Rudy? Yes.
    4. Did I enjoy discussing things with Rudy when he got like that? No.
    5. It was the toxic environment in the forums that brought people to bombast, rhetoric, refusal to concede points, personal attacks, etc.
    6. Do I miss the old forum? NO.

    Here people can discuss things intelligently without getting nasty or defending a lost cause to the point of being ridiculous. I mean, here we talk about type inference... back on the old forum, I brought up the subject as one of the must-have features for Delphi as soon as possible and one person insisted that type inference was, and I quote, "just the compiler guessing". He continued to insist this after I explained the Handley-Millner Type Inference Algorithm to him, along with its mathematical guarantee of correctness. Then he declared that "a compiler should only do one thing" and type inference would be two things, so it shouldn't be part of the compiler. :classic_huh: Another poster went on and on about rejecting modern features in Delphi. Someone asked how they felt about the Delphi string type and they replied that they don't use it where possible, only PChars (!!!). Even Rudy had to concede that this was detrimental and extreme. So... many... weird... conversations there. This place is so much more... sane... in comparison.

     

    • Like 6

  15. 2 hours ago, Uwe Raabe said:

    ... it correct and logical.

     

    Unfortunately MS is not so consistent and also uses hh:mm.

    Most things seem to use hh:mm. I was just trolling through Google and it looks like Oracle, PostgreSQL, Java all do. Python and C use good old-fashioned case sensitivity, with M for months and m for minutes. This seems to eliminate any ambiguity while still preserving the use of "m" for both months and minutes. Looks like case sensitivity 1, Delphi 0 here. :classic_biggrin:

     

    EDIT: Today I learned that if you want to set the time to 00:00:00.00 UTC in PostgreSQL you can use "allballs" as the input string. :classic_biggrin: I may need to file a Delphi feature request immediately....

    • Haha 1
×