Jump to content

Peter Werner

  • Content count

  • Joined

  • Last visited

1 Follower

About Peter Werner

  • Rank
    Advanced Member

Profile Information

  • Gender
    Not Telling
  • Location

Recent Profile Visitors

970 profile views
  1. Affinity currently lacks a lot of options required for full professional CJK typesetting, including things like Furigana and Warichu, dedicated composition/line break options etc., it's not just vertical text. My understanding is that they are going to get the basic features for roman typesetting done first to make Publisher and the rest of the Affinity range as usable as possible as a layout software for the roman languages and only then add features for full CJK and RTL language support a later point in time, which is completely understandable. At least IME for CJK languages seems to work fine now in Affinity 1.7 after being completely broken in earlier releases. That's already a good indication that this topic isn't ignored by the development team. I hope that one day we will have full CJK and RTL script support in Publisher. The last thing we could hope for is a messy and fragmented situation like with InDesign where you have to install multiple versions of InDesign in parallel, all of them developed by third party companies where you can only hope they don't mess each other's files up.
  2. Peter Werner


    Running a web server for an API (or a web browser or Flash Player for dialog boxes) is exactly the same type of bloat that we all criticize Adobe for. They, too, are running at least one local node.js web server in the background even if none of their applications are active. You may have noticed it because it occasionally hangs, crashes or blocks system shutdown. Scripting isn't that performant in the first place, and running single command through a full-blown set of script interpreter, API in that scripting language wrapping and parsing the HTTP communication, HTTP server, system TCP/IP stack and what not is such a colossal waste of resources, not to mention it opens up the entire system to security vulnerabilities. If you really have a compelling case why you absolutely must automate Affinity applications over an HTTP API, you could easily implement the relevant parts of such an API yourself, either via a native C++ plugin, or even easier, with a Python script and Flask (a combination which by the way could probably replace InDesign Server with a desktop version of Publisher for quite a few use cases). This is by no means about what is trending, but what makes the moste sense in terms of providing an efficient, robust, powerful, extensible and future-proof scripting workflow. Besides, Python has been a staple of application scripting in the VFX industry (among others) for decades, and for a reason. This is by no means just a "trend" and there is no indication whatsoever that it will go away any time soon. As an established solution, there are a lot of companies invested in it so continued development is pretty much guaranteed for the foreseeable future. Lua is indeed great for smaller quick and easy scripts and easy to integrate in a C++ program, but not that suitable for more complex solutions (hello, Adobe Lightroom Classic mess) and its object-oriented language features are lacking compared to Python. C is not even a scripting language and does not scale too well, which is why it has been replaced by C++ as the language of choice for larger native software projects decades ago. It is also not true that the complexity of implementing one solution in different languages is always the same – it is true for very, very simple code, but as solutions become more complex, some languages, and their ecosystems, are significantly more powerful than others. As someone who has worked with both Python and VBScript I can tell you that there are some things that would be a nightmare to write in VBScript and a five minute exercise in Python. We don't need a hundred haphazardly integrated scripting solutions so everyone can avoid spending 30 minutes to learn a few basic new syntax rules, but one great scripting solution that is well thought-out, seamlessly integrated, simple and easy for basic tasks but powerful enough for the most complex requirements that arise, and interfaces well with the outside world (AppleScript/COM, network/HTTP APIs, third party libraries and applications, native code etc.).
  3. I just came across a workflow stumbling block while working on letterheads with Publisher and delivering them as MS Word templates. There were multiple variations of the letterheads for different departments, which were created as different pages in Publisher in a single document based on common Master Pages My workflow was as following: Design everything in Publisher Create slices of header and footer for export to PDF Iterate on the design in Publisher until approved by client Place PDF graphics of header and footer in Word, recreate text that needs to be editable and text styles in Word, make color Palettes via PowerPoint (due to Microsoft logic) Last minute fixes: Make changes in Publisher, re-export the slices and replace the images in Word Deliver MS Word templates and color palette files To my knowledge, this is a pretty standard workflow for doing branding projects where MS Office templates are required. Since Publisher has no Export persona, I created my slices for my letter header and footer by opening the Publisher document inside Photo. Trouble is, Designer and Photo only support one page. When opening a document, they always just display Page 1. This can be circumvented by opening the file via the File menu in Publisher. In that case they will open the page that is currently active in Publisher. For me that meant that I had to go my target page in Publisher, use the menu to open that page in Photo, create my slices, save, close, re-open in Publisher, go to the next page, create my slices and so on. This is not only very cumbersome, but it also makes it really difficult to copy slices, settings or dimensions to keep them consistent across pages. Imagine that I find that I want my footer slice to be a bit larger after all because one version has some extra elements and I want them to be a consistent size – I'd have to close, re-open the document in Photo via Publisher for every single page and make my edits while remembering the dimensions to type in. The same applies to exporting the slices after a design change – when not using continuous export (haven't tested if that works from Publisher), this workflow also requires closing and re-opening the file for each page I want to re-export slices from. Imagine a change on a master page with slices on a 15 page document. That's a waste of time and unnecessarily frustrating. I guess the limit on page navigation was imposed onto Designer and Photo to prevent people from just downloading blank files with multiple pages and using those instead of buying Designer or Photo. My proposed solution would be to offer page navigation in the Export persona in both Designer and Photo. Then just always return to the default page 1 when going back to the main Photo or Vector persona if Publisher is not installed. Another possibility would be to take it further and globally enable page navigation in Photo and Designer if Publisher is installed, similar to the Vector and Photo personas in Publisher. The last option would be to add the Export persona to Publisher, but I'd say that's probably overkill.
  4. This one is probably more for the photo team, but since I've found this in Publisher and haven't had a chance to test the new Photo beta yet I'm posting this here in case it's Publisher specific. Option+dragging a slider in the Levels dialog in the RGB setting always shows a completely black image for me when dragging the black point and a white image for the white point instead of accurately showing the usual clipping preview image with a threshold effect. In LAB mode, Option+dragging the Luminosity slider shows a black image with some of the chrominance information on top. Dragging the slider does not change the clipping preview image at all. Double-clicking a slider to reset it also doesn't work, but I'm not sure if that feature was ever there in the past. Moreover, there seems to be no way to use precise 8-bit/16-bit or floating point values in the numeric input fields, only a percentage. This might be required when images need to comply to a precise standard such as broadcast limits, old-school screen printing processes that don't work with ICC profiles, or when performing operations that need to be reversed exactly by a layer on top (say, when trying to preserve detail when using a third-party 3D LUT that has an excessive linear contrast operation built in) and so on.
  5. @Chris_K: Oh I see, that explains it – thanks! Got confused by how this works in InDesign. In that case, is there a way to fit a frame to contents? And why does double clicking the handles in text frames fit those to the text, at least vertically? I'm not getting a square frame. I have to say in it's current form, it's a bit confusing with this behave differently between text and picture frames. @PaulEC: Try clicking the "Properties" button in the tool options bar with the Select Tool or one of the Picture Frame tools selected and selecting one of the scaling options. If this doesn't work as expected, it's probably a bug. Works fine for me.
  6. Peter Werner

    Right Alignment Tab

    Oh, I see – my apologies, I must have somehow missed that post earlier when I did a forum search on the topic. For quick sketches or design mockups, a simple Shift+Tab is still much faster, but I can live with that in exchange for being able to right-anchor tab stops. The only real issue I see is that once an Adobe InCopy/Quark CopyDesk type editorial workflow is implemented, this is something that will have to be done on the design side, rather than being available to the copy editor by default. Also, a unique right alignment tab character is useful for use in a "nested styles" scenario where everything after such a character can be assigned a specific character style automatically (like in the aforementioned end-of-story marker example where the character can then automatically be formatted with a special font or color).
  7. Peter Werner


    I don't really think Japanese is officially supported yet. Japanese input (IME) is still severely broken both in the latest Publisher Beta (at least on Mac) and the app store build of Designer/Photo. I guess full support for CJK typesetting would require significant development resources and know-how, which is why Adobe outsources the CJK and middle east versions to third party companies, to the detriment of everybody who has to put up with that mess of different versions and file compatibility. But warichuu in particular is a very useful feature for roman text as well. One great use case is the famous stacked name effect in the billing block on movie posters. Vertical text is sometimes used in western typography, too, so who knows, maybe we'll see these features before full CJK support.
  8. This is a really handy special space character that exists in InDesign. It's a great way for instance to place "End of Story" characters or generally align things to the left and right in the same line of text really quickly without messing with tab stops. Unlike tab stops, it also adapts to the width of the text frame and can thus be used regardless of the column width without having to maintain a whole set of paragraph styles.
  9. Testing with an image dragged into a picture frame object dragged from the Stock panel into a rectangular Picture Frame object. Double-clicking the horizontal and vertical resize handles will snap the Picture Frame bounding box to incorrect positions outside or inside the picture instead of fitting it to its edge, irrespective of the scaling option chosen for the Picture Frame object. Also, double-clicking corner handles currently does not fit the frame to its contents, only horizontal and vertical handles offer that behaviour – I don't really see a reason why fitting a frame to its contents should require two separate actions for cases where the user wants to do this on both axes.
  10. Peter Werner


    You're welcome!
  11. Peter Werner


    You can double click each of the resize handles (horizontal and vertical ones, not the corner ones for some reason) of a text frame to fit its bounds to its contents on that particular axis. I think it is supposed to work for picture frames as well, but it seems broken/buggy at the moment. The frame snaps to incorrect places (tested with an image dragged in from the Stock panel).
  12. Peter Werner

    No column Grid?

    Except it would be cool if that grid also allowed for subdivisions in the other direction, i.e. not just columns like InDesign, but also rows.
  13. Peter Werner


    Inkscape is by no means representative of what Python scripting looks like when it is well integrated. Inkscape's Python seems like an extremely crude API that requires you to mess with some SVG DOM, write a bunch of superfluous boilerplate and integrate a bunch of third party libraries to do anything useful. That's by no means the fault of the programming language. I wouldn't want to use that, either. See this example of what a basic script for Illustrator in Python (using COM due to lack of native Python bindings) looks like. Not very different from JavaScript, really. Nothing of the sort would be necessary with a proper embedded Python interpreter. You could of course mess with third party packages if you wanted to. As an example, I'll attach a simple graphic that I generated with Python (using the interpreter that came pre-installed with OS X). The script can render to PNG using PIL (as attached) or write an SVG for use in Designer or Illustrator. Took me a lot less time than doing something like that as a script compared to doing it by hand. I can use any gradient for colors, use an image texture to modulate the size, birth or position randomization of the particles, color the connection lines, and much more. The result can be manipulated in Designer as if it was created directly with its drawing tools. @MikeW: Nothing can be done with a programming language per se except do maths and data manipulation. Scripting always means "extending" the language with an object model. User interfaces (whether on desktop or mobile) are no different than documents, layers, text frames and cat objects in that respect. Some scripting APIs just skip the UI part (or, cough, rely on Flash or HTML), which obviously leads to a rather underwhelming user experience.
  14. Peter Werner


    Regarding integration with other software: You can access Apple Script interfaces of other applications from Python scripts with Apple's Scripting Bridge. You could certainly talk to FileMaker from within a Python script that way. An Apple Script interface that's basically "tell application Affinity to run the following python code" would also be conceivable for the other way round, though the coding experience that way admittedly wouldn't be great, so some basic Apple Events and COM support (as well as command line switches!) would definitely be useful. Adobe is running a dual-platform strategy, too, with COM/Apple Events in addition to their own ExtendScript. With Python, another great opportunity would be to also allow installed Affinity apps to be used as a scripting library so that it can be used from standalone Python scripts. Autodesk Maya and Toxik as well as DaVinci Resolve offer that option for example. This would allow you to write a script that runs outside Affinity, but generates, uses and manipulates Affinity files using the Affinity engine. That would allow you to solve problems via scripting without the user having to manually open Affinity apps and click around in them. That way you could, say, make a Python script for Resolve that applies an Affinity Photo macro to each frame of a clip for example, or one that automatically loads news graphics and lower thirds from Designer files and allows you to update the text objects contained inside from within Resolve, but have the resulting graphic rendered by Affinity with any effects and complex clipping you might have applied to the text. Or automatically generate catalogs based on your product database and a template, send them to an external designer who is using Affinity Publisher and when they send the finished file, automatically fill in the most recent prices for each product with a second script, all without anybody except the designer having to click around in Publisher. All you'd need would be a license of Designer installed on that machine. Or combine this with something like Flask and you even have a viable alternative to Adobe's insanely expensive InDesign Server that would require only minimal effort on Serif's part because it would just be the regular scripting API packaged into a Python module. One thing we'll have to consider, though, is that Affinity products run in Apple's store sandbox on the Mac and on iOS. This may impose restrictions in terms of what's possible in terms of cross-application communication. Also, the discontinuation of Automator doesn't exactly inspire confidence in the future of the AppleScript platform – I hope I'm wrong, but I have a hunch that AppleScript may not have the brightest of futures.
  15. Peter Werner


    Having done my fair share of scripting in InDesign myself, I can assure you that JavaScript and the way it is integrated is everything but a smooth experience. You get to choose between half-hearted integration where scripts need to be run from a list on a panel where it runs once and then it's over, and a second scripting engine that keeps the script running, which is necessary for creating your own menu items that can respond to user input at any time. The latter leads to all sorts of craziness and bugs and quirks, especially when the script is run twice (which might happen randomly if you try to load it automatically with InDesign), both engines make it difficult to use shared code between scripts in separate files. Not to mention that at this complexity level, the shortcomings of JavaScript as a language are just painfully apparent (not to mention Adobe's developer tools – ExtendScript Toolkit is an abomination). I found myself cursing more than saving time and resorted to writing only scripts that I absolutely needed and without any of the user friendliness required to share them with other users. I've also written a vector-based particle system in Python that generates SVG files that can be opened in Affinity Designer – everything about that experience was smooth, efficient, and enjoyable, unlike fighting with ExtendScript. The level of control required for writing extensions for a professional graphics or multimedia software differs from small automation tasks that Apple Script is intended for. There is no doubt that one can solve complex tasks in AppleScript of course, but it's by no means well suited nor intended for that type of thing. Remember, we're not just looking for a way to automate quick tasks, otherwise we'd be discussing an improved macro feature. We want a solution that is easy, quick and simple with a low learning curve for simple automation tasks, but scales well for complex tasks that border on a plugin, satisfying the demands of experienced developers and giving the end users a well-integrated experience. If you look at professional film and visual effects software like Maya, Blender, DaVinci Resolve, Modo, TheFoundry Nuke – they all use Python, and their scripting capabilities are way beyond what JavaScript and AppleScript would usually be used for. With Maya, the learning curve for creating, say, a basic script that creates a bunch of objects in your scene is extremely low (for someone without programming experience, I'd say even easier than JavaScript). But if you want to and have the skill, you can also achieve the same level of integration that a C++ plugin would have, or integrate the software with your effects pipeline for the next StarWars or Pixar movie. As much as we would all love this, there is just no way that porting existing InDesign scripts will be that easy. Any developer will tell you that you can't just copy and paste code from one platform to another. The internal object models of Affinity and InDesign are different enough that you'll have to rewrite most of the code anyway. Trying to make the Affinity scripting API as similar to InDesign's as possible would severely limit its usefulness. There is no point in Serif copying Adobe's mistakes for the sake of compatibility that won't be achievable anyway. Not to mention that the Affinity API needs to cover Photo and Designer as well, and InDesign, Illustrator and Photoshop all have very different ExtendScript object models, so which one should the Affinity be modeled after? I would encourage you to take just a few minutes to skim over an introductory Python tutorial – the simplicity is kind of addictive, I think you'll like it!