Jump to content

Joseph MItzen

Members
  • Content Count

    270
  • Joined

  • Last visited

  • Days Won

    7

Posts posted by Joseph MItzen


  1. 12 hours ago, Darian Miller said:

    It looks like we may be in for a huge loss of publically accessible information (years of data to be removed from public access AGAIN) and a much crippled support system...  all to save some money?

     

    If the only motivation was saving some money they could use an open source alternative, such as

    https://www.openproject.org/blog/open-source-jira-alternative/

    or the brand new

    https://plane.so/

     

     


  2. 10 hours ago, Dalija Prasnikar said:

    It is not like they are running mission critical infrastructure, so they need to be prepared for absolutely every scenario

    I would think delivering software and information to customers would be mission-critical infrastructure. Honestly, if you're in charge of a data center, redundancy and failover are basic elements of the job, like making sure a bank account isn't overdrawn is to accounting. Netflix periodically shuts down 10% of its infrastructure to be sure their system is resistant to failure!

     

    Just like the old forum used to be made of custom code held together with wire and chewing gum and managed by a volunteer employee in their spare time, it sounds like Embarcadero has one on-premises server for all the Delphi stuff with no failover, geographically-separated redundancy, etc. Given the rock-bottom price of hardware today in addition to the ready availability of cloud virtualization, there's no excuse for not having a physical or virtual standby. On top of that, server problems aren't a sudden development like your severed cable example. Drawing upon what Uwe said, it seems reasonable to conclude they just kept ignoring recurring problems or beating it with a stick until a component failed completely, at which point they ordered a replacement.

    • Like 3

  3. 12 hours ago, Stefan Glienke said:

    The closing quotes dictate the alignment, lines inside the string thus cannot be more left than the closing quotes, the last line does not have a trailing line break, if you want a trailing line break, add an empty line

    Now the next step is to get escape characters like \n for a line break!

     


  4. On 8/21/2023 at 7:12 AM, Rollo62 said:

    Ok, I didn't know that Phantom.js was suspended, thats a pity.

    I had played around with Pyppeteer project a while ago and it's now suspended too, so I had assumed their successors will do well too.

    They recommend playwritgh-python as successor, but never tested that.

     

    Not sure if Pyppeteer was based on Phantom.js, it seems not, according to this info.

    As far as I knew, the Pyppeteer was bundles with Chromium and Python, which would be large, but reasonable as standalone scraper.

     

    Maybe Cef4Delphi could also be usable for such task, have you experience with that ?

     

     

    Playwright and Playwright-Python (there are playright bindings for several languages) is fantastic!

     

    I believe Microsoft wrote the puppeteer library that automated Edge; the folks who wrote it left that to create playwright, which works with all the major HTML engines and incorporates some nifty features such as automatic waiting for elements. It's well-documented, too.

    Lots of nice features, including being able to save and load context (to preserve things such as login cookies).

     

    Some sample code from a program I wrote that needed to automate some actions with the Internet Archive:

     

    Logging in and saving context so I never have to do it again:

    browser = playwright.firefox.launch()
    context = browser.new_context()
    page = context.new_page()
    page.goto("https://archive.org/")
    page.get_by_role("link", name="Log in").click()
    page.get_by_label("Email address").fill("jgm@myself.com")
    page.get_by_label("Password").fill("**********")
    page.get_by_role("button", name="Log in").click()
    context.storage_state(path=STATE_FILE)

    There's an expect function with optional timeout that can be used to wait for things:

    page.goto(url)
    borrow_button = page.get_by_role("button", name="Borrow for 1 hour")
    expect(borrow_button).to_be_visible(timeout=60000)
    borrow_button.click()
    return_button = page.get_by_role("button", name="Return now")
    expect(return_button).to_be_visible(timeout=60000)

    And I forgot one of the coolest things - it can run visible or headless. There's a mode you can start it in so that the browser is visible, along with another editing window. Then you can just click and type in the browser window, and the code it would take to replicate those actions appears in the editing window! This is a super-quick way to start a project - no need to start searching through the HTML looking for object names, etc. Just start interacting with the website and all the appropriate code is determined and generated for you. Copy and paste that into your project source code and then tweak as appropriate and you're good to go.
     

    There are lots of other nice features including being able to emulate mobile browsers,.

     

     

  5. On 8/18/2023 at 10:26 AM, Brandon Staggs said:

    I have a drive full of software setup packages so I don't have to hope someone else is storing my data for me.

    I've been doing some checking and Microsoft is working on their own package manager, WinGet. It would be nice if Embarcadero supported WinGet or chocolately in the future to assist in automated deploys on PCs or VMs. That's the simplest solution to alleviate users' complaints and remove any support burden Embarcadero feels around hosting install files.


  6. On 8/18/2023 at 3:30 AM, Uwe Raabe said:

    Even without an active subscription one can request a bump for the installation counter. It has just to be requested from sales instead of support.

    Is it really "just", or are they going to try to talk the caller into upgrading/renewing first? Has anyone ever tried it and reported what their experience was? I would imagine the whole point of routing the call through sales would be to try to treat the call as a sales lead rather than a support request. If not, this change doesn't make sense.

    • Like 2

  7. On 8/18/2023 at 3:22 AM, DelphiUdIT said:

    Leaving aside product-specific bugs for a moment, I'd say that preventing products purchased over time from being readily available for later "download" is a practice that not only Embarcadero but many other software vendors adopt.

    In the industrial field several software and SDKs (nothing to do with Embarcadero or Pascal) can be downloaded for a limited period after the purchase (typically 1 or 2 weeks) via a temporary link provided (and increasingly the copy is digitally marked ).
    This is to avoid "piracy" and the spread of illegal copies. Naturally, within the period of validity of the guarantee, it is possible to request a new copy by e-mail, specifying the reason. If you carry out software maintenance contracts (updates beyond the warranty limit) you can request updates in the same way (either via the WEB portal or via e-mail).
    I would say that this attitude, as unethical as it may seem, is in any case legitimate on the part of the producer (it is my thought).
    The downloaded copy should be kept "safely" by the buyer like any other good purchased with its documents.

    I've not encountered this limited download period with software in recent times.

     

    If I buy a game from Steam, I can download it as many times as I want - even the new Baldur's Gate 3, which I hear is over 100GB!

    If I buy a game from Epic, I can download it again whenever I want - even if Epic no longer sells the game.

    The same applies to games I buy from GOG.

    If I buy an e-book from Amazon, I can re-download it whenever I want.

    Microsoft makes copies of Visual Studio and related tools available from 2013 onward.

    I can download a copy of the latest Windows ISO whenever I want, even from a non-Windows PC.

    I can re-download software from JetBrains whenever I want - in fact, they have a tool called Toolbox that handles (re)installation, and you can even download and install all the Jetbrains software you have purchased in one click! They also store your software settings in their cloud with five settings slots so you can even have the desired settings downloaded (say, one slot for PC, one for laptop, etc.). It's the old "like a book" rules too, so there's no installation counter.

     

    So I'd say across all different types of software, including development tools, as well as digital media it's not common to not be able to readily re-download something you've already purchased.

    • Like 2

  8. On 8/18/2023 at 10:26 AM, Brandon Staggs said:

    Unethical? Really? Funny how we would never expect such a thing for physical media. Try going back to where you bought a Blu-ray and demand a free replacement because you lost the one you bought a year ago.

    That's an inappropriate comparison; digital and physical media are different in every way which matters for this comparison. Digital media doesn't cost money to produce extra copies; digital media doesn't take up warehouse space.

     

    Quote

    I figure any time I am buying software, if they offer me a maintenance subscription and I turn it down, I am going to be on my own when the initial support period is up. I have a drive full of software setup packages so I don't have to hope someone else is storing my data for me.

    How much software do you buy that has a maintenance subscription, or is this just a Delphi ecosystem thing? I've not encountered commercial development software that would refuse to let you re-download software you've already paid for. Why would you put up with that kind of treatment?

    You have to maintain a hard drive full of software setup packages; I can take a minimal net install ISO (220MB) and in short order (re)install a full OS and all software required, development and otherwise so long as an Internet connection is available. Heck, if ipxe support is available I don't even need the initial install medium! You might want to reevaluate your software tool chain.


  9. 10 hours ago, RSG said:

    It appears that ExecString really expects a single Python statement in one string. I suppose this isn't terribly surprising, so maybe my goal is not realizable without a lot of work, unless I am missing something that can make this possible. Any ideas?

    This would make Python users recoil in horror, but there are ways to turn Python code into single lines!

     

    https://jagt.github.io/python-single-line-convert/

     

    I don't know anything about Python4Delphi, but see if
     

    exec("""\npi = 3.1415926\nprint(pi)\nif pi > 0.0:\n    print('pi is positive')\nelse:\n    print('pi is negative')\n""")

    runs.

     

    Maybe it could run without the exec if you turned the \n instances into #13s.

     

    I don't know what your app is, but being able to use Octave scripts in it is pretty cool.


  10. 7 hours ago, programmerdelphi2k said:

    @Willicious

     

    As for using everything anywhere, then give up on object-oriented programming languages, or close to it. Better go back to "Basic for MSX"... lots of bits and bytes, no predefined structure, go forward or backward as you wish! And at the end, save your code on cassette tapes!

     

     

    Python is more object-oriented than Delphi (EVERYTHING is an object - types, functions, classes, even numbers) and there is no enforced "private" setting. Privacy is only by naming convention as a guideline. And you don't even need to save its code to a cassette tape! 🙂 There's basically two schools of thought in programming language design - that you have to hide and control everything to "protect" users or developers or the system, and the other school is about giving power to the developers to do whatever they wish and put responsibility for doing it properly and safely on the developer, not the language/compiler. I believe Guido Van Rossum, the creator of Python, dubbed the latter design view the "we're all adults here" philosophy. Which view has more merit is up to designers and developers to decide for themselves, but it's clearly possible to design object-oriented features into languages using either approach.

     

    And on a marginally-related note, the Internet Archive had a great write-up recently about programs stored on cassette tape... 🙂

     

    https://blog.archive.org/2023/05/02/the-easy-roll-and-slow-burn-of-cassette-based-software/

     

     

     

    • Like 1

  11. On 3/13/2023 at 11:22 AM, Uwe Raabe said:

    I for myself have never spent any time on this limitation, because I never had to (and probably never will) write that long string literals. Not only that the style guide is much stricter, it is just way less readable and thus I would never even think of doing that. In addition I would literally slap such code in the face of the developer presenting it to me. So better don't count me in here.

    Really? You've never needed a JSON literal, or an HTML literal, or an XML literal, or some template string literal?

     

    Heck, what about SQL queries?

     

    SELECT
    DATE_FORMAT(co.order_date, '%Y-%m') AS order_month,
    DATE_FORMAT(co.order_date, '%Y-%m-%d') AS order_day,
    COUNT(DISTINCT co.order_id) AS num_orders,
    COUNT(ol.book_id) AS num_books,
    SUM(ol.price) AS total_price,
    SUM(COUNT(ol.book_id)) OVER (
      ORDER BY DATE_FORMAT(co.order_date, '%Y-%m-%d')
    ) AS running_total_num_books
    FROM cust_order co
    INNER JOIN order_line ol ON co.order_id = ol.order_id
    GROUP BY 
      DATE_FORMAT(co.order_date, '%Y-%m'),
      DATE_FORMAT(co.order_date, '%Y-%m-%d')
    ORDER BY co.order_date ASC;

     

     

    This limitation has nothing to do with being readable. It has to do with ancient Turbo Pascal code still in the IDE (ultimate source: Allan Bauer via Mason Wheeler).

     

    C++, Java, Python, Swift, Javascript, Ruby, Rust (to name a few) all have long/multi-line string support in one form or another. Clearly it's useful.

    • Like 1

  12. On 3/12/2023 at 8:06 AM, PeterBelow said:

    They are of type String already. The limitation seems to be in the parser which cannot deal with lines longer than 255 characters in the source. But there is an easy workaround, which your third-party tool should use for long string literals: split it into several shorter literals concatenated by '+' plus linebreaks.  Much easier to read for you as well if you need to manually correct stuff later.

    This is it. What I believe I heard when I complained about this in 2012 (!!!) from Mason Wheeler who got it from Allan Bauer was that it was due to legacy Turbo Pascal code in the IDE that they don't plan on touching.

     

    Splitting strings yourself is just ridiculous. It's 2023 and we've got Star Trek computer-grade AI with ChatGPT and BingBot and humanoid robots coming shortly. Way past time to join... well, the 20th century. Forget long strings... this needs to be fixed for multi-line strings to be feasible. This limitation drove me nuts in 2012 when I was trying to help someone parse some nasty HTML and I tried to enter the text into Delphi and realized the limitation was still there. Fine, I'll do it in Lazarus/FreePascal... guess what? They're limited to 255 characters too, which is bizarre. It's like they artificially limited themselves to match Delphi's limitations!

     

    It's long past time that one should be able to write

     

    HTML := "<!DOCTYPE html>
    <html lang="en-US">
      <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width" />
        <title>My test page</title>
      </head>
      <body>
        <img src="images/firefox-icon.png" alt="My test image" />
      </body>
    </html>"
    
    
     

  13. On 3/11/2023 at 6:10 AM, emileverh said:

    Hey guys!

     

    I need a little help, I created a ticket. We live in 2023, talking about 64-bit compilers, FMX, and other high-tech stuff, and a string literal can not be longer then 255 chars? for use with resourcestrings, consts. Come on.....

     

    Please vote! https://quality.embarcadero.com/browse/RSP-41138

    I first complained about that limitation in November of 2012. 😞 I think I heard it was due to legacy Borland Turbo Pascal code. 😞

     

    The ridiculous thing is that FreePascal's Lazarus IDE has the same limitation, like they were striving for bug-for-bug compatibility or something.


  14. 7 hours ago, PizzaProgram said:

     - Nobody has a finished version? Nobody ever needed such a thing? I can not imagine that!

    I know how to write a function that does this IF one can tell what the type is of a parsed element. But from the minimal "documentation" I see that the user can typecast an element but I don't see a way to check if something is an object or array. If there's no ability to do that, then I'm not sure if one can do this type of search with SuperObject... well, maybe with some ugly exception-handling.... I'll have to test this out later today.

     

×