{ "version": "https://jsonfeed.org/version/1", "title": "Ronald Oussoren", "icon": "https://micro.blog/ronaldoussoren/avatar.jpg", "home_page_url": "https://blog.ronaldoussoren.net/", "feed_url": "https://blog.ronaldoussoren.net/feed.json", "items": [ { "id": "http://ronaldoussoren.micro.blog/2024/03/16/ive-tagged-pyobjc.html", "content_html": "
I’ve tagged PyObjC 10.2 and uploaded it to PyPI. This release features updates for the 14.4 SDK and allows using pathlib.Path
instances where Cocoa expects NSURL
instances.
I’ve uploaded PyObjC 10.1 to PyPI. This primarily adds support for new APIs in macOS 14.2, but also fix some issues in support for older macOS versions and the current Python 3.13 alpha release.
\n", "date_published": "2023-12-09T10:33:04+01:00", "url": "https://blog.ronaldoussoren.net/2023/12/09/ive-uploaded-pyobjc.html" }, { "id": "http://ronaldoussoren.micro.blog/2023/12/07/sigh-receiving-a.html", "content_html": "Sigh, receiving a signal while the signal handler is being changed can crash on macOS (FB13453490, github.com/python/cp…)
\n", "date_published": "2023-12-07T16:04:28+01:00", "url": "https://blog.ronaldoussoren.net/2023/12/07/sigh-receiving-a.html" }, { "id": "http://ronaldoussoren.micro.blog/2023/07/16/import-objc-l.html", "content_html": "import objc; l = objc.getClassList(); from Cocoa import CFLocaleCopyCommonISOCurrencyCodes, NSArray; isinstance(CFLocaleCopyCommonISOCurrencyCodes(), NSArray)
. This passes on macOS 13, but fails on macOS 14 beta’s due to rewriting parts of Cocoa in Swift. Narrowing this down took some time…
PyObjC 9.2 is uploading to PyPI. This contains a number of bugfixes,\nas well as support for Python 3.12 (tested with beta 1).
\n\nPyObjC will now also warn about code that uses argumentless super()
when super
doesn’t resolve to PyObjC’s objc.super
. Using builtin.super
for resolving superclass attributes for Objective-C classes can result in subtle errors. Using objc.super
instead fixes those errors, and is safe to use with regular python classes as well.
The correct code pattern is:
\n\nfrom Foundation import NSObject\nfrom objc import super # Use ``objc.super`` instead of ``builtin.super``\n\n\nclass MyObject(NSObject):\n def init(self):\n self = super().init()\n if self is None:\n return None\n\n ...\n return self\n
\n",
"date_published": "2023-06-07T09:38:27+01:00",
"url": "https://blog.ronaldoussoren.net/2023/06/07/pyobjc-released.html"
},
{
"id": "http://ronaldoussoren.micro.blog/2023/06/05/ive-uploaded-new.html",
"content_html": "I’ve uploaded new versions of py2app and modulegraph that target both the (very) old and the new: Both now support the current Python 3.12 beta, and contain fixes for Python 2.7 support.
\n", "date_published": "2023-06-05T11:37:34+01:00", "url": "https://blog.ronaldoussoren.net/2023/06/05/ive-uploaded-new.html" }, { "id": "http://ronaldoussoren.micro.blog/2023/04/03/pyobjc-b-please.html", "title": "PyObjC 9.1b1 - Please Test", "content_html": "PyObjC 9.1 is one of the rare times that I’m publishing explicit beta releases. PyObjC 9.1b1 is available on PyPI (pip install pyobjc-9.1b1
).
This release contains the usual SDK updates (macOS 13.3) and minor bugfixes, but more importantly it contains some major changes to pyobjc-core. Because of this I kindly request that you test this beta release and let me know about any problems.
\n\nFirst of all the code that transforms class attributes, and in particular translates Python functions to objc.selector
objects, was rewritten from C to Python. This change should be transparant for users, other than some error cases and intentation changes:
The new code is smarter about recognizing if a method is intended to be used as an Objetive-C selector and will not translate multi-word PEP8 compatable names (e.g. “my_,method”). This reduces the need to use the python_selector decorator.
Coroutings (async methods, iterators) are no longer translated to a selector
The new code will translate all callables, which may lead to needing to use the python_method decorator in some cases (e.g. when using a builtin function as a class attribute)
It is now possible to use varargs in a selector method when the implied number or arguments can be represented.
Furthermore the python_method
and informal_protocol
classes are now implemented in Python instead of Objective-C. Those should have no user-visible changes in behaviour.
Lastly a number of classes are now created using PyType_FromSpec
instead of using static PyTypeObject
definitions. That results in minor change in behaviour when using Python 3.9 or earlier: In those versions it is not possible to make these classes immutable. Don’t rely on this behaviour.
As always the full changelog can be seen at https://pyobjc.readthedocs.io/en/latest/changelog.html.
\n", "date_published": "2023-04-03T17:49:21+01:00", "url": "https://blog.ronaldoussoren.net/2023/04/03/pyobjc-b-please.html" }, { "id": "http://ronaldoussoren.micro.blog/2022/12/27/ive-uploaded-pyapp.html", "content_html": "I’ve uploaded py2app 0.28.5 to PyPI. This fixes an issue with the recipe for black.
\n", "date_published": "2022-12-27T13:56:34+01:00", "url": "https://blog.ronaldoussoren.net/2022/12/27/ive-uploaded-pyapp.html" }, { "id": "http://ronaldoussoren.micro.blog/2022/12/19/ive-uploaded-pyobjc.html", "content_html": "I’ve uploaded PyObjC 9.0.1 to PyPI. This release contains a number of small bugfixes, API updates for Xcode 14.2 and reintroduces bridgesupport files.
\n", "date_published": "2022-12-19T12:03:06+01:00", "url": "https://blog.ronaldoussoren.net/2022/12/19/ive-uploaded-pyobjc.html" }, { "id": "http://ronaldoussoren.micro.blog/2022/11/05/pyobjc-is-released.html", "title": "PyObjC 9.0 is released", "content_html": "I’ve (finally) tagged the PyObjC 9.0 release and uploaded it to PyPI.
\n\nAs usual with a major release this release includes support for the APIs introduced in the latest macOS release, macOS 13 (Ventura).
\n\nOther noteworthy changes are:
\n\nDropped support for Python 3.6 as that Python version is no longer supported by the CPython project
Added support for APIs using SIMD/vector types in C (such as the vector_float3
type), with relevant type definitions in the new objc.simd
module.
This release should be compatible with Nuitka (this requires Nuitka 1.1.6 or later)
The full list of changes is in the changelog.
\n", "date_published": "2022-11-05T21:28:15+01:00", "url": "https://blog.ronaldoussoren.net/2022/11/05/pyobjc-is-released.html" }, { "id": "http://ronaldoussoren.micro.blog/2022/09/26/ive-uploaded-new.html", "content_html": "I’ve uploaded new versions of py2app, modulegraph and modulegraph2 to PyPI with support for Python 3.11. Other related projects will also get micro releases, but those only involve updating the PyPI classifiers.
\n", "date_published": "2022-09-26T12:29:33+01:00", "url": "https://blog.ronaldoussoren.net/2022/09/26/ive-uploaded-new.html" }, { "id": "http://ronaldoussoren.micro.blog/2022/09/24/a-couple-of.html", "content_html": "A couple of days ago I’ve uploaded PyObjC 8.5.1 to PyPI. This release contains a small number of bugfixes, most important of which is an incompatibility with Python 3.11.
\n", "date_published": "2022-09-24T11:40:07+01:00", "url": "https://blog.ronaldoussoren.net/2022/09/24/a-couple-of.html" }, { "id": "http://ronaldoussoren.micro.blog/2022/05/24/ive-uploaded-pyapp.html", "content_html": "I’ve uploaded py2app 0.28.2 to PyPI with a number of small bugfixes.
\n", "date_published": "2022-05-24T17:02:16+01:00", "url": "https://blog.ronaldoussoren.net/2022/05/24/ive-uploaded-pyapp.html" }, { "id": "http://ronaldoussoren.micro.blog/2022/04/19/ive-uploaded-pyobjc.html", "content_html": "I’ve uploaded PyObjC 8.5 to PyPI. This release contains a number of small bugfixes, as well some small featues. See the changelog for the details.
\n", "date_published": "2022-04-19T14:10:09+01:00", "url": "https://blog.ronaldoussoren.net/2022/04/19/ive-uploaded-pyobjc.html" }, { "id": "http://ronaldoussoren.micro.blog/2022/04/10/ive-uploaded-pyapp.html", "content_html": "I’ve uploaded py2app 0.28 to PyPI. This is primarily a bugfix release, and is also the last release that claims to support Python 2.7.
\n", "date_published": "2022-04-10T10:00:16+01:00", "url": "https://blog.ronaldoussoren.net/2022/04/10/ive-uploaded-pyapp.html" }, { "id": "http://ronaldoussoren.micro.blog/2022/03/07/ive-published-pyobjc.html", "content_html": "I’ve published PyObjC 8.4 on PyPI. This is a minor bugfix release.
\n", "date_published": "2022-03-07T22:43:15+01:00", "url": "https://blog.ronaldoussoren.net/2022/03/07/ive-published-pyobjc.html" }, { "id": "http://ronaldoussoren.micro.blog/2022/02/24/ive-uploaded-pyobjc.html", "content_html": "I’ve uploaded PyObjC 8.3 to PyPI. This is a bugfix release. The most important fix is that binary wheels work again on macOS 10.14 and earlier.
\n", "date_published": "2022-02-24T09:46:54+01:00", "url": "https://blog.ronaldoussoren.net/2022/02/24/ive-uploaded-pyobjc.html" }, { "id": "http://ronaldoussoren.micro.blog/2022/02/06/ive-uploaded-pyapp.html", "content_html": "I’ve uploaded py2app 0.27 to PyPI. This fixes a number of bugs.
\n", "date_published": "2022-02-06T13:48:33+01:00", "url": "https://blog.ronaldoussoren.net/2022/02/06/ive-uploaded-pyapp.html" }, { "id": "http://ronaldoussoren.micro.blog/2022/01/23/ive-uploaded-pyobjc.html", "content_html": "I’ve uploaded PyObjC 8.2 to PyPI. The changelog is fairly long, but contains mostly small bugfixes.
\n\nThese bugs were primarily found by my work on improving test coverage of pyobjc-core using the excellent lcov tool.
\n", "date_published": "2022-01-23T13:07:41+01:00", "url": "https://blog.ronaldoussoren.net/2022/01/23/ive-uploaded-pyobjc.html" }, { "id": "http://ronaldoussoren.micro.blog/2021/11/30/ive-uploaded-pyobjc.html", "content_html": "I’ve uploaded PyObjC 8.1 to PyPI. This is a minor bugfix release.
\n", "date_published": "2021-11-30T09:57:53+01:00", "url": "https://blog.ronaldoussoren.net/2021/11/30/ive-uploaded-pyobjc.html" }, { "id": "http://ronaldoussoren.micro.blog/2021/11/11/pyobjc-is-released.html", "title": "PyObjC 8 is released", "content_html": "\n\nA new macOS release means a new major release of PyObjC. I’m happy to announce that PyObjC 8 is available on PyPI with full support for macOS 12, including APIs introduced in that release.
\n\nI’ve also been working on performance and code quality of the core bridge. There are significant speedups of the core bridge in PyObjC 8.0, and I have more ideas to reduce the performance difference between regular Python methods and calling Objective-C APIs.
\n\nThe release is a bit later than I would have liked, in part because I’ve been worrying about the covid-19 situation in Holland. Because of that I’ve spend some more time away from the computer.
\n\nA full change log is included below.
\n\nIn PyObjC 7 and earlier it was possible to leave out “output” arguments when\ncalling a method with a Python implementation:
\n\nclass MyClass(NSObject):\n @objc.typedSelector(b"@@:o^@")\n def methodWithOutput_(self, a):\n return 1, 2\n\n\no = MyClass.alloc().init()\nprint(o.methodWithOutput_())\n
\n\nThis no longer works, it is always necessary to pass in all arguments, which\nwas already true for methods implemented in Objective-C. That is:
\n\nprint(o.methodWithOutput_(None))\n
\n\nThis change both simplifies the PyObjC code base and was required to cleanly\nimplement vectorcall support (see the section on performance below).
Removed bindings for InterfaceBuilderKit
. This was a way to integrate\nwith InterfaceBuilder in old versions of Xcode, but support for that was\ndropped before the release of Mac OS X 10.8.
Bindings for the Objective-C runtime API related to “associated objects” is\nnow enabled unconditionally. This will cause problems when running or building\non macOS 10.6 or earlier.
It is no longer possible to deploy to macOS 10.7 or earlier when you attempt to\ncreate a formal protocol. Protocol creation already failed on those platform\ndue to lack of the required runtime API, and that will now result in a crash\nbecause PyObjC no longer checks for availability of that runtime API.
GH-371: Remove manual bindings for a number of old CoreGraphics APIs
\n\nThe following functions are no longer available:
\n\nCGDataProviderCreate
CGDataProviderCreateDirectAccess
These functions were removed as a public API in macOS 10.8, but were still\navailable through PyObjC through old backward compatibility code. That code has\nnow been removed.
For compatibility with Python’s socket APIs functions that return a\n“struct sockaddr” (either by reference or as a function result) will now\nencode the IP address as a string and not a bytes object.
The (undocumented) API in pyobjc-api.h (used in some framework bindings to\nintegratie with pyobjc-core) has changed in an incompatible way, in particular\nthe API for “caller” functions now mostly mirrors the vectorcall convention.
Adding a method with a double underscore name will now raise an exception at\nclass definition time instead of silently not creating the Objective-C method.
\n\n class AClass (NSObject):\n ...\n\n def __foo_bar__(self, a, b, c):\n pass\n\n MethodNamesClass.__foo_bar__ = __foo_bar__\n
\n\nBefore PyObjC 8 this would add a __foo_bar__
selector to the Python\n representation of the class without adding a selector to the Objective-C class.
Use objc.python_method
to mark this as a python-only function.
The module PyObjCTools.Signals
is deprecated and will be removed\nin PyObjC 9.
objc.initFrameworkWrapper
and objc.parseBridgeSupport
\nare deprecated and will be removed in PyObjC 9.
These functions implement support for “.bridgesupport” XML files,\n something that PyObjC hasn’t used itself in a number of releases (in\n part because system versions of those files are at best incomplete).
\n\nMost performance changes use features introduced in Python 3.9, performance\nin older Python versions is unchanged except for the effects of general cleanup.
\n\nImplement the “vectorcall” protocol for objc.function
, objc.WeakRef
,\nobjc.selector
, objc.IMP
, objc.python_method
.
This reduces the interpreter overhead for calling instances of these objects.
Implement Py_TPFLAGS_METHOD_DESCRIPTOR
for objc.selector
,\nobjc.python_method
.
Use vectorcall in the method stub that forwards Objective-C calls to Python.
Convert internal calls into Python to the vectorcall protocol (pyobjc-core)
Add more optimized vectorcall implementation to :class:objc.function
,\nobjc.IMP
and objc.selector
for simpler callables.
“Simpler” methods are those with a small number of plain arguments,\n although the definition of what’s simple will evolve over time.
GH-391: Fix some spelling errors found by the\ncodespell tool.
\n\nThe codespell tool is also run as part of pre-commit hooks.
GH-296: use clang-format for Objective-C code
\n\nThe Objective-C code for the various extensions has been reformatted\nusing clang-format, and this enforced by a pre-commit hook.
GH-374: Use pyupgrade to modernize the code base
\n\nThis is enforced by a pre-commit hook.
GH-388: Added “nullability” attributes to Objectice-C sources for pyobjc-core.
\n\nThis gives the compiler and clang static analyzer more information\nthat can be used to pinpoint possible bugs in the implementation. As a\nside effect of this a number of internal checks were strengthened, although\nmost of them were for error conditions that should never happen.
\n\nThat said, this change also found a number of places where Python reference\ncounts weren’t updated properly, which may have led to refcount overflows\nin long running programs.
Add more error checking to pyobjc-core to catch (very) unlikely error conditions.
This is a side effect of the previous item.
\n\nUpdated framework bindings for macOS 12
New framework bindings for the following frameworks:
\n\nAudioVideoBridging (introduced in macOS 10.8)
DataDetection (introduced in macOS 12.0)
IntentsUI (introduced in macOS 12.0)
LocalAuthenticationEmbeddedUI (introduced in macOS 12.0)
MailKit (introduced in macOS 12.0)
MetricKit (introduced in macOS 12.0)
ShazamKit (introduced in macOS 12.0)
GH-318: Implement support for __class_getitem__
for Objective-C classes
The result of this is that effectively all Objective-C classes can be used\nas generic classes, without runtime type checking. This is meant to be used\nwith optional type checking (for example MyPy)
\n\nUsage:
\n\n def create_integers(count: int) -> NSArray[int]:\n return NSArray[int].arrayWithArray_([i for i in range(count)])\n
\n\nThis requires typing stubs for framework bindings to be really useful,\nand those do not yet exist.
GH-390: pyobjc-core is no longer linked with the Carbon framework.
\n\nDue to implicit dependencies this also required a change to the Metal\nbindings: those now import AppKit instead of Foundation.
PyObjC only ships “Universal 2” wheels for Python 3.8 and later. Those work\nwith single-architecture builds of Python as well.
PyObjC 8 only ships with source archives and “univeral2” binary\nwheels (Python 3.? and later). There are no longer “x86_64” binary wheels.
The AVFoundation bindings (in pyobjc-framework-AVFoundation
) now have\nan install dependency on the CoreAudio bindings (pyobjc-framework-CoreAudio
).
This is needed for a new API introduced in macOS 12.
GH-371: Link extensions in the Quartz bindings to the Quartz frameworks
\n\nA number of C extensions in the Quartz bindings package were not\nlinked to a framework. Those now link to the Quartz framework.
GH-378: Fix raising ImportError
when doing from ApplicationServices import *
The root cause for this were private classes in system frameworks that contain\na dot in their name (for example Swift.DispatchQueueShim
. Those names are\nboth private and invalid attribute names.
Creating protocols that contain methods that have a method signature containing\nPyObjC custom type encodings now works (those encodings are translated to\nthe corresponding Objective-C encoding.
Fix bindings for SKIndexCopyDocumentRefsForDocumentIDs
, that binding\ndidn’t work due to a typo in the metadata.
GH-365: The PyObjCTools
namespace package no longer has an __init__.py
\nfile in the source tree (that is, the tree switches to implicit namespace\npackages instead of the older setuptools style for namespace packages).
This primarily affects testing with recent versions of pip/setuptools (which\nseem to no longer install the __init__.py
file for namespace packages).
development-support/run-testsuite
now uses venv
instead of\nvirtualenv
. This removes a development dependency.
PR-367: Tweak the code that calculates PyObjC_BUILD_RELEASE
in\nthe various setup.py files to deal with versions with more than two\nlabels (can happen when building using Xcode 13 beta)
PR by Eric Lin (Tzu Hsiang Lin), github user eric100lin.
PyObjCTest.TestSupport
now never uses “10.16” as the\nOS release but always uses the actual platform version, even\nwhen Python was compiled using an old SDK.
Adjusted PyObjC testcases to check for 11.0 instead of 10.16\nnow that testsupport uses the real platform version.
GH-385: Fix race condition the lazy importer
\n\nWhen two threads simultaneously try to get an attribute from a framework\nbinding one of them might fail with an attribute error because information\nfor resolving the name was removed before actually resolving the name.
Fix various issues with invalid indices in :class:objc.varlist
Fix support for AF_UNIX
in the support code for struct sockaddr
.
The implementation for opaque pointer types (such as the proxy for\n‘NSZone*‘) has switched to PyType_FromSpec
.
The objc.FSRef.from_path
and objc.FSRef.as_pathname
,\nmethods now use the filesystem encoding instead of the default encoding.\nC string. This shouldn’t affect any code, both encoding default to UTF-8 on macOS.
Inheriting directly from objc.objc_object
now raises TypeError
\ninstead of objc.InternalError
. User code should always inherit from\na Cocoa class.
GH-354: Add an option to install all framework bindings, including those not\nrelevant for the current platform. To use this:
\n\n$ pip install 'pyobjc[allbindings]'\n
I’ve just uploaded py2app 0.26.1 to PyPI. This contains a small bugfix that only affects applications using Tkinter when using the “Intel” installer on python(dot)org.
\n", "date_published": "2021-09-27T16:34:36+01:00", "url": "https://blog.ronaldoussoren.net/2021/09/27/ive-just-uploaded.html" }, { "id": "http://ronaldoussoren.micro.blog/2021/09/19/pyapp-released.html", "title": "Py2app 0.26 released", "content_html": "I’ve spend some more time on py2app over the last week or so, in between relaxing while being away from work. That results in a larger release for py2app than I’ve done in a long while.
\n\nThe most important changes are support for Python 3.10 and (finally!) bundling package metadata (“dist-info” directories). The latter should fix issues with code that uses pkg_resources
and looks for distribution information such as entry points.
As always: Py2app is supposed to be a “DWIM” tool, please file issues when you need to adjust the bundled application, either through py2app options or (especially) manually.
\n\nAnd a public service announcement: Don’t use the “argv_emulator” option with GUI applications. That option tends to cause options with GUI eventloops, and most GUI libraries have better options to handle “file-open” events.
\n\nI expect to work less on py2app in the coming weeks, the current plan is to continue working on PyObjC during my last week of from work. The current repository is up-to-date w.r.t. support for the upcoming macOS Monterey, and I hope to land land some interesting other improvements during the week…
\n\nThe full changelog:
\n\nStub executables were recompiled on macOS 11
\n\nThis means support for light mode/dark mode should now work out of the box.
\n\nThe old stub executables are still used when detecting that Tkinter\nis used with an old build of Tk.
Issue 1: Include “.egg-info” and “.dist-info” information in the bundled application
\n\nThis fixes any python package that uses pkg_resources
to look for\nspecific distributions.
py2app.filters.not_stdlib_filter
now knows about Python’s “venv”
Issue 368: Add recipe detect_dunder_file
This recipe will ensure that a Python package is stored outside\nof site-packages.zip when a module in that package uses the\n__file__
variable.
This variable is most commonly used to load resources stored in\nthe package (instead of the newer importlib.resources
and pkg_resources
\nlibraries).
Issue 339: Add recipe for pydantic
\n\nThe recipe is needed because pydantic uses Cython to compile\nall sources (including the package __init__
) and therefore\nhides imports from the dependency analyzer.
Issue 338: Add “imageio_ffmpeg” to autopackages
PR367: Add recipes for pandas, pylsp, and zmq
PR367: Add docutils and pylint to autopackages
\n\nPR by Ryan Clary (mrclary on GitHub)
Issue 344: Invocation of codesign on the whole bundle sometimes fails
\n\nPy2app will now try this a number of times before giving up. This\nis at best a workaround for and doesn’t completely fix the problem.
Issue 370: py2app now works with Python 3.10
\n\nPython 3.10 no longer exports a (private) symbol used by the py2app\nstub executable. Switched to a public API to accomplish the same task where\navailable.
Issue 110: Add recipe for SQLAlchemy
\n\nThe recipe includes all dialects and connectors, including implicit\ndependencies, because SQLAlchemy uses __import__
to load dependencies.
Issue 328: Add recipe for gcloud
Issue 195: Add USER_BASE
, getuserbase()
and getusersitepackages()
to py2app’s version of site.py
.
Issue 184: Add recipe for ‘ssl’
\n\nThis recipe is only used for Python 3.4 or later and ensures that the\nCA bundle used by Python’s ssl module is included in the app bundle and OpenSSL\nis configured to look for that bundle in the application bundle.
Issue 371: change default error message on launch problems
\n\nThe default error message shown when the application cannot be launched is now\nslightly more useful and refers the\npy2app debug page.
Issue 345, 169: Adjust qt5 and qt6 recipes for non-PyPI installations
\n\nThe qt5 and qt6 recipes now should work when the Qt installation prefix\nis outside of the PyQt package, for example when PyQt was installed through\nhomebrew.
\n\nI’ve tested this for PyQt5 and made the same change to the PyQt6 recipe, although\nI haven’t tested that change.
I’ve done some work on py2app over the weekend after mostly neglecting it for the rest of the year.
\n\nI’ve uploaded version 0.25 to PyPI with the results of that work.
\n\nThe full changelog for this release:
\n\n#358: Add recipe for multiprocessing
PR363: Add recipe for platformdirs
PR by Ryan Clary (mrclary on GitHub)
\n\nPR by Ryan Clary (mrclary on GitHub)
\n\nPR by Ryan Clary (mrclary on GitHub)
\n\nPR by Ryan Clary (mrclary on GitHub)
\n\nPR by Oliver Cordes (ocordes on GitHub)
\n\n#354: Fix buggy “autopackages” and “automissing” recipes
#350: Add sentencepiece to the autopackages list
#359: Add recipe for PyQt6
#349: Add recipe for OpenCV (opencv-python, import cv2
)
PR365: Add RTree recipe
PR by Ryan Clary (mrclary on GitHub)
\n", "date_published": "2021-08-30T10:17:05+01:00", "url": "https://blog.ronaldoussoren.net/2021/08/30/pyapp-released.html" }, { "id": "http://ronaldoussoren.micro.blog/2021/08/21/apple-lets-have.html", "content_html": "Apple: Let’s have an API for programmaticly creating an ObjC protocol\nAlso Apple: Let’s use more information that cannot be added programmaticly (FB9543982)
\n\n\n", "date_published": "2021-08-21T11:45:26+01:00", "url": "https://blog.ronaldoussoren.net/2021/08/21/apple-lets-have.html" } ] }