Jump to content

Joseph MItzen

  • Content Count

  • Joined

  • Last visited

  • Days Won


Joseph MItzen last won the day on August 30

Joseph MItzen had the most liked content!

Community Reputation

168 Excellent

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Joseph MItzen

    Using Expressions in the Group By Clause in Interbase

    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? 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....
  2. Joseph MItzen

    Free SQLite -> Interbase tool?

    Who won? Who won? Who won?
  3. Joseph MItzen

    web scraping or web parsing for project?

    It sounds like you hate web scraping. 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.
  4. Joseph MItzen

    web scraping or web parsing for project?

    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.
  5. Joseph MItzen

    DevExpress PDF Viewer

    Crazy question, but why not just launch the system default PDF viewer? That's what every piece of software I have does.
  6. 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. 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....
  7. That was probably me. They even came up with a string type to address the problem of too many string types. 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. 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. Is this ever going to introduce a human-perceivable performance increase? 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.... Fair enough; I prefer the "break everything at random" approach to keep people on their toes, constantly refactoring and adopting language changes.
  9. Joseph MItzen

    Missing The Old Forums

    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.)
  10. Joseph MItzen

    Missing The Old Forums

    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. Joseph MItzen

    How to connect to office 365 using proxy server

    Remy, I think you hit your head and have started speaking Java.
  12. Joseph MItzen

    Missing The Old Forums

    So where did the C++Builder users who posted on the old forum go?
  13. Joseph MItzen

    Google Charts in uniGUI

    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. Joseph MItzen

    Missing The Old Forums

    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: Do I still miss Rudy? YES. Was Rudy a very wise and intelligent person to converse with? Yes. Did I enjoy discussing things with Rudy? Yes. Did I enjoy discussing things with Rudy when he got like that? No. It was the toxic environment in the forums that brought people to bombast, rhetoric, refusal to concede points, personal attacks, etc. 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. 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.
  15. Joseph MItzen

    10.4.1+ Custom Managed Records usable?

    IMHO the only true way to do this in pascal is as they've done in Python... like Oxygene, except Oxygene reversed it for for some reason. ilabel = 'Item' if ilist.Count == 1 else 'Items'