mstdn.social is one of the many independent Mastodon servers you can use to participate in the fediverse.
A general-purpose Mastodon server with a 500 character limit. All languages are welcome.

Administered by:

Server stats:

14K
active users

#extension

4 posts4 participants0 posts today

ION EXTENSION DELAYED

The future of ION extension to the city of Cambridge remains uncertain. 

The Region of Waterloo council originally approved the Light Rail Transit (LRT) ION system in 2009. It was to be a link across Waterloo, Kitchener and Cambridge, with a Bus Rapid Transit (BRT) linking Kitchener and Cambridge. 

Plans for Stage 2 ION, bringing the LRT transport system from Fairway Station in Kitchener through the urban centres of Cambridge to downtown Galt, were officially announced in June 2019, but the project has since been subject to significant delays. 

A report to Cambridge City Council in 2023, estimated the expansion cost at $4.5 billion, a number that had nearly tripled since 2021. In June 2024, Matthew O’Neil, manager of Rapid Transit Coordination at the Region of Waterloo, said he expected construction to begin in 2032, seven years later than initial estimates. 

On Apr. 3, Grand River Transit (GRT) revealed their ten-year business plan, which made no reference to Stage 2 ION expansion. 

Councillors expressed frustration with the continued ambiguity surrounding the project. On The Mike Farwell Show on 570 NewsRadio Kitchener, former Cambridge Mayor Doug Craig was asked if Cambridge is being shortchanged on transit. 

“Of course we are,” he said. “We don’t have [an] LRT, we don’t have a GO train, and we’re paying for the LRT in KW […] and we’re wondering when is ours going to come to the city of Cambridge?” 

Stage 2 ION plans were thrown into further doubt on May 9, when Cambridge Mayor Jan Liggett endorsed the notion of rapid bus transit over LRT expansion. In a Cambridge council meeting, Liggett mentioned the option was raised by Waterloo Region council staff members that day. 

“I know that’s earth-shattering news, but that was an open session of regional council today,” she said. 

Liggett went on to say that the $4.5 billion cost of LRT expansion is not a realistic prospect. 

“That’s an impossibility. We don’t have that much money in our budget in any given five-year span to put towards something like this,” she said. 

The impact of the LRT in Waterloo and Kitchener has been positive. In 2023, $429 million in new building permits were issued in land along the LRT line. A growing percentage of the region’s population are reportedly moving to locations within a 10-minute walk of an LRT stop. 

Cambridge councillors in favour of the expansion believe that it would have a significant impact on city rejuvenation.  

“The ION expansion would have a positive impact on private investment and city rejuvenation. Every report has predicted this, and we have seen firsthand how this happened for Kitchener and Waterloo along the ION Stage one1,” Pam Wolf, Cambridge city councillor, said in a statement. 

Former councillor Rob Deutschmann noted the ION expansion could attract $5-10 billion in private investments along the area, according to Cambridge Chamber of Commerce estimates. 

The Region of Waterloo council have confirmed that nothing has been finalised yet, with the Initial Business Case for Stage 2 ION to be presented to Cambridge City council in November. 

I stopped creating releases for my software since 2003. However, this year, a Debian maintainer mentioned that he prefers releases with good reason. So, I created a release again.

chamkho-pg v0.1.0 release – Updated dictionary and target library paths, and added macOS support.

(chamkho-pg is a PostgreSQL extension whose objective is to enable full-text searching on Southeast Asian and other languages.)

github.com/veer66/chamkho-pg/r

What's Changed

Support building on Darwin and Docker by @scomma in #1

New Contributors

@scomma made their first contribution in #1

Full Changelog: https://github.com/veer66/chamkho-pg/commits/v...
GitHubRelease Updated dictionary and target library paths, and added macOS support · veer66/chamkho-pgWhat's Changed Support building on Darwin and Docker by @scomma in #1 New Contributors @scomma made their first contribution in #1 Full Changelog: https://github.com/veer66/chamkho-pg/commits/v...

Krita Quick Commands

I use quick commands a lot in Vivaldi, IDEs, basically any complex app with a lot of commands. They’re a great way to learn what the app can do, an easy way to find less frequently used commands than hunting through a menu, and give you a quick reminder of the command’s keyboard shortcut when you want to learn what that is. I wanted to build a script to add this functionality to the digital painting app Krita. This blog post discusses my journey.

Quick Commands

Here’s what the final result looks like, and you can find the script for it here.

It has a search box where you type roughly what you want, and then it will show the results in a list. You can navigate around using the up and down keys, and when you press enter, your action gets executed. You can press Esc to close it if you decide you don’t want to do anything.

I decided to filter on the command text and the tooltip text for each action,. Most actions don’t have detailed tooltip text in Krita, but some of the more complex or obscure ones do, and this is designed to let you search through them as well in case you can’t remember the exact name of a particular action command. Filtering is done on individual words so if you know you remember two words but not the order they appear in exactly, it will offer some leeway.

I’ve added this script to my Krita setup and given it the shortcut F1. I don’t need a keyboard button to open a webpage that I can keep as a bookmark, and this is much more helpful for quickly accessing different commands.

Writing the Script

Krita’s scripting environment is a bit tricky to use. It has an incredibly basic built-in editor, with an output window when things run. So you are limited to basic print methods for debugging. The scripting tutorials offer a decent introduction, though for anything more complex you will need to look at API documentation. My script builds a simple interface using the PyQt5 library to connect to Krita’s Qt based UI. There are 3 places I looked for documentation:

  • The Krita C++ API – Good documentation from the source code
  • The Qt C++ API – Very detailed, discusses how to use their library
  • The PyQt5 API – This documentation isn’t

My big problem with the PyQt5 library’s documentation is that it’s not really documentation more than it is a list of methods and classes. The vast majority of the text that should explain how it works and how to use it merely contains the text ‘TODO’. Given that Qt5 is being replaced by Qt6, I guess that’s never going to be fixed.

Having done some UI stuff before, figuring out the right widgets to use, and what the methods might mean from context was simple enough, though some explanations or even screenshots would have been nice. I fell back to the Krita extension documentation for advice on how to set up a basic UI, because doing that solely from the PyQt5 documentation was clearly not going to work.

I had not used signals in Python recently, so I needed some help, and the PyQt5 documentation helpfully offered none whatsoever, other than a basic explanation of how to connect things generally. It does have a list of places you can connect to,but no visible examples of how that actually works. Thankfully, the Krita application comes with some built-in extension scripts that demonstrate how to use this, so I was able to learn from there. Presented with an example, I can now see the PyQt5 approach to signals is fairly analagous to how other languages and APIs use listeners:

def onTextChanged(newtext):    ...textbox = QLineEdit()textbox.textChanged.connect(onTextChanged)

A major problem with how the PyQt5 library is set up is that the python packages you need to import from are totally disorganised an unclear. If you want widgets you must import from PyQt5.QtWidgets, but if you want to access enumerated values like keyboard key IDs, you need to import from PyQt5.QtCore.Qt, and even then you don’t need to use the Key enum, they’re all accessible with a name like Qt.Key_Up. Figuring this out from the documentation was very difficult for me, so I needed again to fall back to a provided example from Krita.

Krita launches it’s actions using a named ID. These are all listed on the Krita scripting tutorial page, but I needed to access these programatically. Reading through the Krita and Qt APIs showed it was pretty easy where the actions could all be listed, but I did have sometrouble identifying the right place where the action ID is stored. The Krita action dictionary calls these ‘id’s, but they are in Qt ‘object names’. Eventually I found these are not accessed as properties but rather by a getter function:

from krita import Kritamykrita = Krita.instance()allkritacmds = mykrita.actions()...command_id = kritacmd.objectName()

The script I ended up with could probably be made more efficient, but I enjoyed the exercise of learning how to interact with Krita’s scripting environment.

https://lonm.vivaldi.net/2025/05/29/krita-quick-commands/

#documentation #extension #krita #python #qt #scripting #Software

#Mozilla #Pocket closes and I had to find a new home for my (procrastinated) #links and found it in linkding.link It is #selfhosted and #opensource and even stores a copy of the page using #SingleFile #extension (great for content behind #paywall) Migration of exported #bookmarks was easy using this script github.com/enjikaka/pocket-to-

linkdinglinkdingA self-hosted bookmarking service that is designed to be minimal, fast and easy to set up.
Continued thread

I have a separate #VSCode #extension I was experimenting with the other day. I got further than I expected, but I suspect the integration points are too limited for the UX I'm envisioning here. I'll need to poke at it some more to see how close I can actually get.

github.com/dgp1130/diff-driven

A VSCode extension for easily developing on a chain of commits. - dgp1130/diff-driven-development
GitHubGitHub - dgp1130/diff-driven-development: A VSCode extension for easily developing on a chain of commits.A VSCode extension for easily developing on a chain of commits. - dgp1130/diff-driven-development