Now that the first release of NymphCast (version 0.1) [1] is coming up soon, it's interesting to reflect on its development over the years, and what I imagine its future will be like.
Originally NC was intended to be just a simple way to stream local audio to a HiFi system or similar in the same room, as an alternative to proprietary solutions like AirPlay and ChromeCast, as well as Linux-only solutions like PulseAudio. This came largely from personal annoyances with the status-quo a few years back: AirPlay was a very Apple-centric thing, while ChromeCast didn't work reliably with anything, while the remaining solutions like PulseAudio brought little joy as well.
Now, a few years later, I have a couple of NymphCast systems set up. Some are just for playing back audio, while others can also do video. There's also a screensaver mode that shows images from a local folder when no content is being played back. The discovery of not only the NC Servers (connected to the speakers and/or display) as well as NC MediaServers (sharing media content on the LAN) is performed automatically using a custom UDP Broadcast-based protocol called NyanSD (Nyanko Service Discovery) that I feel improves on mDNS and DNS-SD if only on functionality and simplicity.
What I also like about the system in this v0.1 state is that it doesn't complicate matters with transcoding (video) content, instead putting the burden of decoding on the playback device alone. This means better quality, smaller content size (during network transfers) and the ability to stream content from even low-powered devices (cue Raspberry Pi-based NASes).
The drive towards efficiency has been a central focus during development, with a number of optimisations such as a lock-free ring buffer [2] for the local data buffer, and a zero-copy refactoring for the underlying remote procedure call library, NymphRPC [3]. Along the way I have learned many interesting details about hardware & operating system aspects, wrestled my way through sometimes vexing debugging challenges, and teamed up with a number of friends and acquaintances in making NC work.
I think perhaps the most difficult question to answer at this point is what NymphCast means to me. As many are eager to point out, NC is hardly the only (free/open source) project that allows for streaming of media content, and there are large HTPC-oriented projects that do everything plus the kitchen sink. In that sense one could say that I have 'wasted my time', but I feel that's rather unfair.
As mentioned, I have learned many things along the way, things which along with the gained experience have made me a better developer today. There are also many reasons why I prefer NC over any of those other projects for my personal use. Not the least of which is that I know every millimetre of it and have made it to fit my own needs first and foremost.
As a continuing way to challenge myself as a developer, its value is also hard to discard. I think the trick for me is to find more synergies with my other interests, such as embedded development, while ensuring that it all stays enjoyable. After all, it's still just a hobby project.
One thing I think will be fun with NymphCast in the future with v0.2 and beyond is that with the tough foundation work done, it is now relatively easy to add 'cool' features. Things like the AngelScript-based 'apps' that can be used to extend the functionality of a basic NC Server system somewhat like a ChromeCast or Apple TV system, only not necessarily restricted to just consuming commercial (streaming) content.
What exactly will happen with the NC project during the next development cycle for v0.2 is hard to say exactly as nothing is set in stone, but I'd be lying if I said that I'm not looking forward to it. Whether it'll ever become more than just a hobby toy is of no real concern to me. At the same time I have found some of the interactions with others about the project rather interesting and inspiring, and I'm flattered that the FreeBSD and Alpine Linux package repositories have up to date builds of NC.
It's been a long journey, with occasional intense stretches of work on NC. I'd be lying if I said it was always easy, but learning to temper my expectations and accepting it as a fun hobby project rather than as something more has made me feel that it was worth it. Today and hopefully in the future as well.
Maya
[1] https://github.com/MayaPosch/NymphCast
[2] https://mayaposch.wordpress.com/2021/11/12/lock-free-ring-buffer-implementation-for-maximum-throughput/
[3] https://mayaposch.wordpress.com/2021/11/11/refactoring-nymphrpc-for-zero-copy-optimisation/
Tuesday, 5 April 2022
Thoughts on the NymphCast project before its first release
Sunday, 23 May 2021
The Open Source model vs the Open Exploitation model
It's interesting to stand still by the big changes in the software we are running on our computers today versus back in the 1990s and early 2000s. When I bought my boxed copy of SuSE Linux 6.3 in 1999, that year was hailed by the computer rags which I read at the time as the 'year of the Linux desktop'. The evil closed-source Mac and Windows operating systems would be banished and replaced by an operating system produced by the honest hands of the working classes.
None of that really happened, of course, but today it's hard to imagine a world that is not built upon the plentiful availability of freely available software. Whereas in the 90s you'd be paying for the operating system and any software for it - aside from freeware & shareware applications - today you could theoretically spend money only on the hardware and nothing on the operating system and even professional tools.
An example of these tools is for example compilers. In the 90s you'd generally have to pay to get a copy of Borland, Visual Studio or any of the other major players in that space. The open source GCC compiler only became a good option for general development by the late 90s, and today GCC along with LLVM are solid options for software development that have essentially obsoleted pay-to-play compilers like Visual Studio (MSVC) and Intel's ICC.
Similarly, for office suits LibreOffice and Google Docs have made the proposition of paying for Microsoft Office or similar a quaint idea unless one needs some of the rare features offered by the latter. For 3D modelling there is Blender 3D. Basic audio editing? Audacity and others. Need to design a PCB for a new electronics device? KiCad or some of the new-and-upcoming open source options have your back.
Of course, the one question that is always true with 'free' is who ends up holding the bill in the end.
First, one preconception about closed source is that it is necessarily something commercial, NDA-ed and for-profit, with open source always community-driven and following an open collaboration strategy. This ignores the many free tools that are released by hobbyists but who do not feel comfortable sharing the source code to these. It also glosses over the realisation that open source projects can be equally as abusive as the worst commercial office setting.
There have been a few high-profile situations in the world of open source so far where essentially all of the primary (volunteer) developers packed up and left to resume the project on their own terms. XFree86 is one such example, where the fallout from an inflexible project owner resulted in the Xorg fork. Similarly with OpenOffice's developers disagreeing with Oracle's harsh management of the project and resuming the project on their terms in the form of LibreOffice.
This shows clearly how open source projects are not immune to the worst traits of human nature. From oversized egos, to poor or lacking communication and so on, open source projects are nothing magical. In the end they are still software projects, with the same management challenges as a commercial or closed source project. Just generally with the dirty laundry being put out more clearly in sight of the world to see.
Then there's the more concerning aspect of free/open software: the exploitation of 'free' labour. It has happened a number of times now that a small hobby project got absorbed into the global ecosystem that has sprouted on this fertile soil, only for the maintainer of said hobby project to get inundated with support requests. A few years ago this led to the demise of the WiringPi project [1] that had become essential to countless Raspberry Pi (Python) projects. More recently the Babel transpiler project on which countless large web frameworks and companies depend announced that it'll likely be shutting down soon unless it can obtain more funding [2].
This shows the immense pressures that project owners are put under when their project suddenly takes off in ways they had likely not imagined. Balancing what likely was 'just a hobby project' with their day to day obligations and job becomes increasingly more complicated. As the author behind WiringPi makes clear, some people who contacted him for support got rather violent and aggressive when they didn't get the help they felt they deserved.
Clearly the open source movement that began in the 90s has spawned a massive ecosystem, but one has to wonder just how sustainable it truly is. There are disconcerting signs that at least a section of it is built on what is essentially exploitative (unpaid) labour. This is not just something that concerns small project owners who get overwhelmed by sudden attention, but also within larger projects. As mentioned, it's easy for a large open source project to feature the same abusive behaviour seen elsewhere.
Ideally a project uses an open collaboration model [3], where there is no strong hierarchy and yet there's a clear progress towards to a common goal. Yet, much like the economical/social model of Communism which has similar goals, there is a significant risk that at some point a hierarchy is established, with a dictator establishing absolute rule along with a number of lackeys.
If one is lucky, said dictator is of the more benevolent type (though possibly potty-mouthed, like Linus Torvalds) and helps with herding the developer-shaped cats. If not, then as one saw with the XFree86 and OpenOffice projects it can spell the end of the project. When those who seek to contribute to a project do not feel valued or appreciated, they will likely abandon that project forever. The more often this happens, the worse off a project becomes.
In this light one also has to consider what drives someone to contribute to an open source project when they can expect no monetary compensation for this. For many it is because they use the software in question, and wish to improve it. Either by suggesting improvements or by directly contributing code, bug reports or patches. There's a significant time investment involved in these activities, which is for the individual contributor the investment they are willing or capable of contributing.
This leads to the expectation of some level of return. Much like with any other type of investment, a lack of return negatively affects the desire to invest again in that particular project. With my own open source projects this is something which I had to work on with e.g. the communication when someone files a ticket. It's easy to assume that the person who filed the ticket is doing this as a hostile act, but it's much more likely that they genuinely like the project and are doing their little bit of investing into the project to see whether it will make the project better. If so, then the project owner and the person filing the ticket will win out.
In this regard it saddens me to see project like e.g. KiCad steering in a direction that's clearly not optimal. Most recently in the run-up to the 6.0 release a new icon set for the user interface was 'decided upon', which seems to have been one of those 'upper management has decrees' level of decisions. As the new icons are hideous violations of UX rules and based on the KiCad forum communication on the topic, it's clear that this was not a decision made in consensus, but rather on a whim. This is just one example there of many small details of a similar nature.
A similar lack of consideration is present with the Audacy project, whose management recently had to backpedal heavily after previously announcing telemetry that would be enabled by default [4]. At best this showed incredibly poor judgement on the side of the project owners, at worst it shows that every major open source project can just as easily become the next BonziBuddy [5] if one isn't careful.
With all of that said, I too happen to be the author of a range of smaller and larger open source projects (BSD 3-clause licence). Some of these get more attention than others, but when looking at other projects, it does make me reflect on what my response would be if any of them suddenly got really popular. After I had attention for my NymphCast [6] project explode with over 51,000 views on the original blog post [7] last year, I felt the rush and pressure to 'do something' with that project.
Since then the attention has died down a lot, and I have since regained the appreciation for NymphCast and my other projects as 'just hobby projects'. Since I'm not making money off them, the only compensation that I seek from them is to get the satisfaction of having accomplished something for myself. That's after all the point of a hobby project.
That also then shows the counter point to open source as a hobby: open source as part of a business model, or paid projects involving open source software. In my view open source project is nothing special and adheres to the same basic rules as any other project: either it's a hobby or it's work. If one doesn't receive monetary compensation for work, it's exploitation.
Or to cue the (in)famous line that artists hear too often when asked to create something: "You'll be paid in exposure!".
Maya
[1] https://hackaday.com/2019/09/18/wiringpi-library-to-be-deprecated/
[2] https://www.theregister.com/2021/05/12/babel_money_woes/
[3] https://en.wikipedia.org/wiki/Open_collaboration
[4] https://www.theregister.com/2021/05/14/audacity_telemetry/
[5] https://en.wikipedia.org/wiki/BonziBuddy
[6] https://github.com/MayaPosch/NymphCast/
[7] https://mayaposch.blogspot.com/2020/03/nymphcast-casual-attempt-at-open.html
Monday, 11 May 2020
When a hobby project turns into a bit of a grind
The past weeks I have made a couple of major changes to the project, moving the SDL-based video display and window-handling routines - including the screensaver element - as well as the entirety of the SDL initialisation to a single class. I also rewrote the SoundCloud app to use the new JSON responses from the SoundCloud backend, adding regular expression and key-value store (KVS) support to the AngelScript API to allow the SoundCloud app in NymphCast to fully work for searches and playback of tracks and albums.
After that first major change, I did notice a regression with the playback of files, with playback no longer stopping by itself after a track or video had finished. This persisted after making the second stack of changes, as noticed after trying to stream an album from SoundCloud, with only the first track playing. This finding led me to dive deep into the ffmpeg-based code, with the debugger backtraces as a guide, to figure out where things were going off the rails.
Sometimes there doesn't seem to be a particular reason why a regression like this happens. In those cases it's usually a case of the existing code (in this case heavily borrowed from ffmpeg's ffplay source) being fragile enough that a small change elsewhere or a timing change makes it fall over and catch on fire. Since I couldn't find a particular cause for this regression, I opted to instead improve the existing code to better detect the end-of-file condition once I felt that I had a solid enough grasp on how the code was interacting with the ffmpeg APIs.
It was at this point that I realised that the project was becoming more my 'work' than my actual work, with it consuming a significant part of each day for the past weeks. More seriously, I wasn't enjoying myself. Though I knew that more tests needed to be run, with the goal of finding more issues that need fixing, it's clear that none of this is really 'fun', and more something that one does because it has to be done. Not to say that hobbies do not have those moments where one has to work through something unpleasant, but the difference between a job and hobby should be that with the latter one volunteers to do the work when one feels like it.
Thus I choose to just push the presumed fix to Github and leave it like that for now.
It feels good to do a bit of recharging after a bit too much 'hobby' work like that. To instead think about some small aspects that one could do at some point in the future when one again relishes a challenge to sink one's fangs into. Until then there are other hobbies and of course paid work to spend time on. The last thing one wants is to burn out on a hobby project.
Some other issues have also popped up over the past months that take the fun out of the project. Take for example the idea of using the same client-side application (NymphCast Player) for desktop and mobile. This ran into a breaking bug in Qt's Android support [3]. After considering writing a native Android client (in Java with NDK-based C++ core), the additional work of getting back into Android development didn't feel extremely appealing. The last time I did Android development, the ADT-based Eclipse IDE was still the cat's pyjama's, and I still haven't come to terms with this newfangled Android Studio thing. Basically there is no fun to be found in that direction either. At least not right now.
I still like the NymphCast project as a whole, and I have noticed that others do too, from the stack of Github tickets where people express their gratitude for the project, as well as a couple of small donations for the project. Yet as a whole, the project is still in this awkward phase where it's supposed to be 'fun' because it's a hobby project while at the same time there exist these external expectations about the project and what it could become.
For the immediate future, I'm still immensely grateful for any Github issue tickets for things that I wouldn't have (easily) found myself, as well as the emotional boost from the donations. It's just a matter of time when I'll feel like grinding through the rest of this debugging and testing, much like how one would get through the less fun parts of a video game.
Maya
[1] https://mayaposch.blogspot.com/2020/03/nymphcast-casual-attempt-at-open.html
[2] https://mayaposch.blogspot.com/2020/03/the-fickle-world-of-software-development.html
[3] https://bugreports.qt.io/browse/QTBUG-83372
Friday, 27 March 2020
The fickle world of software development
As I wrote that original blog post, I was still in the process of finishing up the implementation of the basic features of the initial (v0.1) release. Meaning that it was a definite prototype, with the scaffolding obscuring much of what was already there, but also what wasn't there yet. Things like seeking through files being streamed, for example. Essentially with the way the project got presented in those articles, it sounded as if it was a ready to use solution folk could just slap onto their Raspberry Pi compute things and be off to the races.
Suffice it to say that this caused a bit of confusion in the commentary to those articles.
I have since put a product page with documentation [8] over at the Nyanko website, with information on how to develop these mysterious 'NymphCast apps' using the AngelScript programming language. That partially addresses the point of where in blazen's name the documentation for any of it is. The other points raised were about its feature set and what it will support in the future, as well as a host of related questions.
The tricky thing there is that as I had formulated it in my blog post, the project is first and foremost a fun hobby project of mine to scratch this itch of there not being a proper open source, cross-platform solution that is like ChromeCast or AirPlay. Of course I am open to extending the feature set to add things that do not necessarily scratch my own itches. A lot of features that got suggested are interesting from a development and technical point of view, so I see them as interesting challenges to learn from and grow as a developer.
Yet things are never quite that rosy.
Even though I implemented the last and most invasive feature into NymphCast a few weeks ago (full seeking support), this only meant that the rule of thumb that I use for estimating required development time kicked in. This rule is the '10/90/90' rule, as in the workload in any (software) project is 10% planning, 90% implementing (100%, or what usually gets scheduled) and 90% testing/debugging (making a total of 190%, for those keeping score). A rough estimate on development time for NymphCast is that I spent about a month (full-time) on it. This means that with testing time having kicked in, I'll have a few (full-time) weeks of testing ahead of me, including the Alpha, Beta and Release Candidate phases.
Here of course one can cheat, as is common in (commercial) software development; instead of accepting the 10/90/90 rule, it gets instead crammed into something like '10/90/10', with just enough testing done that nothing is all too obviously broken for the first users. This often leads to the other 80% of testing being combined into subsequent development cycles. If I were to follow this approach, the v0.2 development version of NymphCast would involve a lot of catching up on bugs and issues that lived on due to the shortened v0.1 test cycle.
It's quite possible that these latent bugs and issues from v0.1 would interfere with v0.2 development, even slowing it down, as it would often be unclear whether a new feature or change created a regression, or whether one merely tripped over a hidden bug. This is why I'm no big fan of shortened test cycles. Of course, this does mean that you end up disappointing end-users (or heavens forbid, customers). Instead, I prefer to just grind my way through testing, torturing the software using countless (intended and unintended) usage scenarios to shake out bugs. Let me just say that I fixed a whole stack of issues between the first (alpha1) and second (alpha2) alpha releases.
Here of course the consideration is that end-users ultimately want to have something that Just Works (tm), with only a certain tolerance for bugs and issues. Is having them wait longer worse than giving them a broken product?
All of this is more or less a long-winded way to say that the rush of popularity (nearly 50,000 views on that one blog post, and over 1,100 stars on the Github project) was unexpected and perhaps somewhat premature. Possibly.
Though I very much appreciate the attention, it does put me into a bit of a pickle. On one hand there's now this sudden popularity, that will likely die down if the project doesn't deliver, yet going into full-time development mode to get the v0.1 release and beyond out of the door isn't feasible either. It's, after all, a hobby project. Hobby projects do not pay the bills, or put food on the table.
It seems almost as if the only real option is to let the project slip back into obscurity, while I slowly work away on it over the next months and perhaps years, until it's ready(-ish) for prime time.
Time will tell, I guess.
Maya
[1] https://mayaposch.blogspot.com/2020/03/nymphcast-casual-attempt-at-open.html
[2] https://tweakers.net/geek/164126/ontwikkelaar-maakt-open-source-chromecast-alternatief.html
[3] https://www.reddit.com/r/linux/comments/fhdnav/nymphcast_an_opensource_alternative_to_chromecast/
[4] https://www.tomshardware.com/news/using-raspberry-pi-like-a-chromecast-open-source-nymphcast-project-makes-it-happen
[5] https://www.kitguru.net/lifestyle/mobile/accessories/christopher-nohall/nymphcast-turns-your-raspberry-pi-into-a-streaming-device/
[6] https://news.ycombinator.com/item?id=22457351
[7] https://github.com/MayaPosch/NymphCast
[8] http://nyanko.ws/nymphcast.php
Tuesday, 3 March 2020
DebounceHAT: how to keep switches from killing a Raspberry Pi board
Replacing the active loop Python script that constantly polled the two inputs with something more elegant was fairly straightforward [1], employing a C++ solution that used interrupt-based events (ISRs). By using ISRs instead of constant polling, this did lose the 'advantage' of debouncing incoming switch signals through brute force, so instead debouncing had to be re-added in a more elegant fashion.
Here one has two options: a timer-based approach in software, where one registers that 'something' is happening on an input that is connected to a mechanical switch, but waits before reading out the value (low or high) on that input until a certain amount of time has expired and the fluctuating signal from the switch's contacts bouncing against each other has probably settled into the final signal.
The other approach is to do it in hardware, where the fluctuating signal from the mechanical switch passes through a hardware circuit, which essentially smooths it out so that on the software end one can always read the pin out as if it's a purely digital input. I previously covered the basic theory behind this type of circuit on my development blog [2].
This all led to a basic expansion board that could be put on top of the Raspberry Pi's GPIO pins, first in a basic (prototype) version, as seen on the left hand side in the below image, which later got reworked into the version that can be seen on the right. As one may note, the latter board has a lot more components on it, which leads to the next part of this story.
You see, with the basic debounce circuit, consisting out of an RC (resistor-capacitor) circuit and an inverse Schmitt trigger chip, the debouncing part worked great. The noisy signal from the switch's contacts bouncing against each other got practically eliminated by the RC filter, with any remaining noise that might have survived the RC filter getting dealt with by the Schmitt trigger, courtesy of its large dead-zone in between the trigger points.
Unfortunately, during the first winter period it was found that touching the door handle of the door that had the first switch connected it would disable the Raspberry Pi until restarted. A bit of research showed this to be due to the electrostatic discharge (ESD) from the person touching the (metal) door handle. This discharge would find its way from the door handle to the metal parts inside the frame, then to the metal parts of the micro switch that had been embedded into the frame. From there it would travel along the signal wire to the Raspberry Pi and zap the system.
The same effect could be observed when there was a surge in the 230V wiring running alongside this signal wire, inducing a current via electromagnetic coupling. Fortunately this current was low enough that it would only cause false positive trigger events, but it's conceivable that with the proper EM source, strong enough voltages and currents could be generated that would damage the connected hardware. As the Raspberry Pi and similar boards can only accept a voltage of 3.3V on their pins and can sink only a few milliamperes without damage, this would likely cause permanent damage in the long term.
Obviously a solution was needed to fix this.
This is where the second board was conceived: in order to completely isolate the SBC from its environment and especially the signal wires, it was decided to use opto-isolators and an isolated DC-DC voltage supply to provide a voltage source for use with the switches. This way, the signal wires were left completely electrically isolated, with any incoming signals being transferred via the opto-isolator's LED and photo diode instead of via a copper wire. In addition, spark gaps were added to the board and provision for an earth wire so that any surge would be safely carried away.
While a good start, a friend convinced me to take a look at further improvements and together we sat down to make more improvements. This is the board that is now featured on the Github repository [3] and which will also soon be featured in a CrowdSupply crowdfunding campaign [4] so that people can get their own.
Like its predecessor, this board is an official Raspberry Pi HAT, with the requisite EEPROM with configuration settings. Changes include better channel separation and surge protection on the 6 input channels, an isolated DC-DC supply with full class B EM compliance, isolation slots, improved spark gaps and about 4-5 kV AC surge isolation. All 6 input channels are rated at 3-12V. It also provides input protection when the Raspberry Pi is provided with power via this DebounceHAT board.
A number of prototype boards have been assembled of this current version for more testing the coming time while hunting down a company for assembly of the production boards.
Hopefully this board will save a lot of people from having to jump through the same hoops and painful discoveries that I did :)
Maya
[1] https://github.com/MayaPosch/ClubStatusService
[2] https://mayaposch.wordpress.com/2018/06/26/designing-an-rc-debounce-circuit/
[3] https://github.com/MayaPosch/DebounceHat
[4] https://www.crowdsupply.com/maya-posch/debounce-hat
Sunday, 1 March 2020
NymphCast: a casual attempt at an open alternative to ChromeCast and kin
First step was scraping together existing software solutions for handling the boring parts like shovelling bytes across the network and decoding and playing back audio and video. For the network communication part between server and client I was happy to use my own NymphRPC [2] remote procedure call library, as this provided the required functionality to transfer data between client and server in a light-weight library, which I also know to have been used in production environments. For the video and audio decoding, and the playback I settled on Ffmpeg [3] with LibSDL [4]. I also tried the gstreamer and LibVLC libraries, but could not make either of them work for the project.
It's interesting to essentially rebuild an existing system. The requirements for NymphCast were rather obvious: same as for ChromeCast, Roku and Amazon's dongle. That 'just' left implementing it. Playing back audio and video from a memory buffer and keeping that memory buffer filled while also allowing for efficient seek operations on the remote file gives one a lot of insight in where the bottlenecks lie on a computer and a network, but is mostly tedious work. Most of the work probably went into the other aspect of ChromeCast and kin: custom apps that add functionality, such as streaming from online services like YouTube, Netflix and SoundCloud.
Since ChromeCast's server solution (what runs on a ChromeCast dongle) is essentially a Chrome browser instance, these ChromeCast apps are simply HTML pages with JavaScript that get loaded from a remote server. Because NymphCast is a native C++ application it's free to use whatever approach it wants for NymphCast apps. Here I wanted a scripting language that's easy to integrate with C++ and both easy and powerful enough to be used for whatever such a custom app might require. Having embedded both Lua and Python in the past, I wanted something less clunky and ideally statically typed, which led me to AngelScript [5].
AngelScript has essentially C++ syntax and supports most C++ concepts directly, allowing it to be embedded in a C++ application without any jumping through hoops and with no overhead. What it also shares with C++ is that it is statically typed, meaning that when the script file is compiled, the AngelScript compiler will perform type and syntax checks, informing you where you made a mistake instead of the runtime throwing an error and bailing out while the app is running. I really appreciated this feature while developing the SoundCloud demonstration app.
As an aside, people have asked me over the past months why I didn't just implement the AirPlay or ChromeCast protocols (both of which have been more or less reverse engineered). The primary reason is that both are proprietary protocols which have been altered by the companies behind them and very likely will be changed again in the future. There is also limited use in supporting those protocols, as one isn't simply going to support ChromeCast apps or such, as these have been cryptographically locked away so unless you'll crack those AES or similar keys, it'd be at best a half-hearted kludge and a worst a massive waste of time and effort.
Considering that I managed to implement a basic SoundCloud NymphCast app within an hour using the public (HTTP) API, it would seem to me that it would be a more productive approach to get NymphCast into a state where I could contact SoundCloud and similar companies on whether they'd want to produce an official NymphCast app (hosted on their own servers) and thus get NymphCast on a level playing field with the competition, rather than acting like a trojan and constantly having to fix things whenever Google or Apple change something on their end. That's not the kind of 'competing' which I am into.
This leads me to the current state of NymphCast: I have used the NymphCast server on Windows, Linux x86 and Linux ARM on Raspberry Pi SBCs and other ARM-based SBCs. The client runs on all desktop platforms and on Android (Qt-based). While I would definitely call it Alpha-level software, with some features such as seeking support still being implemented, I am rapidly running out of missing features to implement. Leaving seeking support as one of the final features to implement for the first release was mostly because it is less essential than stabilising the other features.
One interesting thing which I have found during testing is that even if one were to never want to skip through an audio track or film, seeking support is still needed, as the MP4 container format for one has this nice feature where by default it puts the 'header' with the container details at the end of the file. This means that the player has to first seek to the end of the file, read the 'header', set the configuration, seek back to the file beginning and then start playing.
All taken together, this seeking support and some functions to get real-time playback information in the client are the only things that still need to be implemented before the first NymphCast release goes into Beta, meaning the shaking out of bugs and any other issues that may pop up during testing. Here I want to make it as easy as possible for people to help with testing, by providing an easy way to get NymphCast on a few supported platforms, such as the Raspberry Pi for the server, and for the client desktop platforms as well as Android devices. Compiling the client for iOS smartphones is harder, as this requires one to have a Mac system, which I do not, but this can be solved as well.
So what is it that I want to accomplish with NymphCast? Most of all to have a nice platform that I can use myself for streaming audio and video to any (powered) speakers and displays that I have standing around, along with the extensibility offered by NymphCast apps. I also hope that others will start using it, even adding NymphCast support to their (smartphone) apps. It would be wonderful to see private companies embrace it and release official apps that would allow people to use their services from NymphCast, cutting out proprietary ChromeCast, Airplay, Sonos and various SmartTV platforms.
The open nature of NymphCast (3-clause BSD licenced) is one big benefit, but also the ability to install the server on any Raspberry Pi board or equivalent without any hardware devices having to be produced, shipped, purchased and eventually tossed away, like the dongles for Google and Amazon's solutions, or entire speakers and devices as in the case of Sonos and Roku. NymphCast will work with any general purpose system, whether it is a Raspberry Pi, OrangePi, Intel NUC, some AMD APU-based board or a full-blown gaming PC.
Call me nuts, but I think that it might just be crazy enough to work.
Maya
[1] https://github.com/MayaPosch/NymphCast
[2] https://github.com/MayaPosch/NymphRPC
[3] http://www.ffmpeg.org/
[4] http://www.libsdl.org/
[5] http://www.angelcode.com/angelscript/
[6] https://github.com/MayaPosch/NymphCast/blob/master/src/server/apps/soundcloud/soundcloud.as
Sunday, 30 July 2017
Finished my new book
The book was published by Packt Publishing, and can currently be found for a mere 10 Euro/dollar on their website [1] with a normal retail price of over 40 Euro. It is also available via Amazon [2].
So far this has been my second book to be published. The first one was also published via Packt, on the topic of game development on Android devices. This new book was a lot easier to write for me, to be honest, as I have far more extensive experience in both C++ and on low-level topics such as multithreading.
Having such an interest in low-level details shows for example in the second chapter of my new book, where I dive deep into how multithreading concepts as well as general processing is implemented in the hardware. Though chapters like these cost me an enormous amount of time in research, one of the things which I have learned over the years is that the most important thing for a software developer is to understand the underlying hardware.
I guess I had quite a bit of fun writing this book, even if it was quite an ordeal, with the past few weeks consisting out of me racing deadlines in order to get the book ready for publication by the end of this month. Yet I made it, and now I get to indulge in not having any imminent deadlines and immediate responsibilities.
One of the reasons why I decided to accept the task of writing this book when someone from Packt approached me with the idea is because I absolutely love both the C++ programming language and fundamentals such as multithreading and associated concepts such as atomics. C++ is wonderful to me - even after over 15 years - for being a highly flexible, multi-paradigm language. Computer hardware fascinates me to the point where I'm working on writing my own CPU architecture in VHDL, targeting FPGAs. To write about this passion was pretty much irresistible to me.
Do I feel that the resulting book is perfect? Far from it, but as one notices after using a language like C++ for nearly two decades, there's always so much more still to be learned. Worse, there are new concepts and new inventions just waiting around the corner. Much like older languages like COBOL, I expect C++ to be around in 20, 40 years time, each time adapting to new hardware and implementing new concepts. I look forward to updating the book with any such new concepts over time.
The last two chapters cover relatively new concepts, pertaining to distributed computing (clusters) and GPGPU. The latter topic especially is of a lot of interest to me, as adding a powerful vector processor to a system can give an immense boost to certain types of operations. I'm looking forward to experimenting more with that over the coming years.
For now it's onwards with new projects :)
Maya
[1] https://www.packtpub.com/application-development/mastering-c-multithreading
[2] https://www.amazon.com/Mastering-AndEngine-Game-Development-Posch/dp/1783981148/
Sunday, 28 May 2017
Having fun with electronics
Fast-forward more than half a year, and I had not done so yet. Not because I didn't want to, or couldn't, but because I was struggling with depression, significantly worsened by the sudden eviction case against me. I wanted to be happy, to fulfil my obligations and have fun, but I simply couldn't.
These past weeks, however, things have been changing gradually. Even against the background of a forced eviction, becoming homeless, losing all my belongings and emotional destabilisation into suicide. Maybe it's just that I have been under so incredibly much stress the past months that I simply cannot care any more, thus learning to finally let go and not worry as much. Whatever the reason, I finally managed to fulfil at least my promise towards my boss regarding these Gameboys.
In the end it's an easy repair: disassemble the system, remove the rubber strip on the display's flatflex tape followed by heating it with a soldering iron to make the solder connections reflow and restore the pixel columns on the display. Then clean the contacts (both sides) with isopropyl alcohol and reassemble the whole thing again. Or put it into a new Gameboy shell, as the case may be.
Doing this kind of work is fun, and makes lots of people happy. I also recorded a video of the whole repair, which I hope to soon edit into a short video which I'll put on my new YouTube channel. I still have a Commodore 64 left to fix in my backlog as well, which I hope to get to soon as well, along with a number of other projects, including a robot cat, power COB LED module heatsink and power supply experiments, and of course the custom CPU architecture on FPGA project.
It makes me happy that I am now finally able to do these things, and have fun with them as well. Yet it's still hard to shake off the leaden feeling that I may only have weeks left to live, depending on the outcome on the eviction case and its effect on my emotional stability.
This week I sent an update to my lawyer that the owner of the building has seen fit to finally have some maintenance work performed on the building, which seems to have fixed the rusty water issue that existed from the beginning. That still leaves the incredibly noisy heating system and cold air pouring in from gaps around the windows during the winter, but it's a start, I guess.
I still hope that the building owner gets told off by the court, leaving me free to cultivate this small seed of normalcy that I seem to have found, as well as work out what I want to do with my future.
One thing which I have also learned from doing electronics for years is that it requires a lot of space. Buying that single-family home might be the only realistic way to move forward from here, yet there the medical issues take priority for now. I need to be healthy first before I take on more stress.
Maya
Friday, 9 September 2016
Being kicked out of apartment, surgery, TV interview and more
After a day of asking people at work - including my very knowledgeable boss - for advice and showing them the letter, ultimately it turned out that it seems that I have done everything right, with notifying the landlady about the defects at the apartment, when I cut back the rent I paid and with the landlady not fulfilling her duties according to German law (resolving defects where possible).
While this means that I can hold my own against the landlady, both the defects and the unpleasant dealings with this owner have made that I should be finding something as soon as possible, probably something to rent as finding something to buy would take much longer.
The defects in my apartment are still pretty much the same ones as before:
- super-loud heating system (ticking) when in use [1].
- occasionally brown to dark-brown water when using hot water (e.g. taking shower).
- poorly insulated; constant draft during winters.
- hearing everything from the neighbours upstairs (walking, using toilet, getting in/out bed, etc.).
- lots of noise from the public hallway.
Since the owner of the building is more interested in threatening those who rent from them rather than resolving issues, it seems pertinent that I find some other place to live. Maybe I can find something via that relocation service, maybe via somewhere or someone else. I'll have to see.
This everything happens alongside a number of other events, such as the expected update on my pending surgery. Next month I should hear back on whether a suitable surgeon has been found, which would put start off a number of appointments and examinations, with a possible reconstructive surgery following at some time during the coming months.
Ideally this surgery would happen after I have moved into a new place and not while I'm recovering from said surgery. Hopefully the timing here will be favourable.
Fortunately the other event that's coming up is easier to organise: a film crew is coming to interview me for a new Dutch TV show, which will happen within the next two weeks and just takes one day. That may actually be fun, too :)
Along with all of that I'm also currently putting a lot of time and effort into finishing up a major project: the development of the first prototype of my custom CPU architecture. Over the past months I have gone through a crash-course in the VHDL programming language, learned the finer details of FPGA fabrics and associated toolchains and generally put enough effort into this to count as a second full-time job.
The goal of this all is to see whether I can maybe develop it into a commercial product, or at the very least explore expanding my career more into hardware development as well, along with developing further into game development and associated areas. Basically in order to find the things I enjoy the most and hopefully make it into something with commercial perspectives, if that makes sense.
Everything taken together it's definitely a lot to deal with at the same time. At this point I'm definitely looking forward to a time hopefully in the near future where I'm living in a place I do not hate, with the surgery over with and just my future ahead of me.
Maya
[1] https://www.youtube.com/watch?v=-EzwfL5IKXQ
Monday, 11 April 2016
When I do not write depressing posts
My current projects involve game development, learning to better use tools like 3DS Max and Substance Painter, as well as Unreal Engine 4. My goals there include creating games together with my best friend, Trevor, and to publish these for PC. I'm also working on a number of visual novel games, which is an interesting form between writing a story and creating a pure game.
Beyond game development I'm working on setting up a new YouTube channel with accompanying blog, called NyanTronics. This will feature my electronics and software projects, as well as other, related themes. These projects involve things like custom (FPGA) boards I'm working on, the processor I'm developing in VHDL [1], as well as the WildFox browser project [2] I'm currently in the process of restarting with a brand-new rendering engine and user-interface.
For this YouTube channel I'll have to delve deep into the dark arts of video editing and voice overs. A benefit here is that I have plentiful of experience with encoding video owing to my days of creating anime fansub videos. It'll be interesting to revisit all of this.
In addition to this I have a number of top-secret projects involving robotics which I will not spill any details on just yet.
Having a larger, quieter place to live, work and do the recording for these videos in would be awesome, but I'll have to live with what I have got at the moment, I guess.
At least things won't be boring any time soon.
Maya
[1] https://mayaposch.wordpress.com/2014/08/30/new-project-ngs-cpu-architecture/
[2] http://mayaposch.com/wildfox.php
Saturday, 12 December 2015
On vacations and uncertain futures
I wanted to take off next week so that I can finish building my new computer system, the one I have been working on - or waiting for - since August this year. Currently I'm still missing the last monitors for the triple-monitor setup, the speaker stands and a new UPS (uninterruptible power supply) to replace the current APC one I have.
Problem with the APC UPS is that it's a non-PFC one, meaning that it doesn't output real sine wave power (AC), but stepped square wave (approximated sine wave). Even though APC (misleadingly) advertises this UPS to work with computers, the reality is that it does not, and they will not honour their warranty if you do use it with computers or other PFC-enabled equipment.
As replacement I thus have purchased a CyberPower PFC-capable UPS. It's my first time purchasing from this brand, but the reviews seem to be really positive. The particular UPS I bought is technically not 100% sine wave output, but it approximates it so closely that there is no significant difference. It is also guaranteed to work well with PFC power supplies like those in computers.
This should be a welcome change since when I hooked up my speakers (both self-powered) to my current APC UPS (Back-UPS Pro 900), the UPS shut down with an error (F06) on its display, which came down to 'Relay Welding', or basically the relays which normally switch between battery and mains power having failed and are 'welded' in place. In short, stay away from APC and use CyberPower's PFC-rated UPSes, who at least seem to do honest marketing.
Finally, I am also awaiting a new mounting set for the heatsink in this new computer build, as there is a problem with new Intel Skylake CPUs and some third-party heatsinks physically bending the CPU due to too much force. Fortunately I got a Scythe heatsink, and their customer support was right on the ball, offering free mounting sets for customers using Skylake (Socket 1151) processors. I should have my replacement set next week.
So, in short, I should be able to finalise this computer build just in time for the new year :)
Beyond computer building, I will also be geeking out with my electronics, FPGA, programming, AI and gaming projects over the coming weeks. I definitely will have a hard time feeling bored, I'm sure.
Casting a bit of a shadow over all of this is the medical experimentation which will also be running over the coming weeks, if not months. Basically with me being off hormone replacement therapy (HRT), the determining of my natural hormone levels for the first time in years, and the uncertainty over the possible findings as well as what I may experience without those artificial hormones in my system.
As I have mentioned on many occasions over the past years, what I have been trying to do - medically - is to figure out the facts about my body. Not being certain what reality is like is frightening. While on HRT I could just ignore the questions about what would happen if I were to not take HRT. Now that I no longer am, the question looms of how much my body is like that of a normal woman, hormonally.
In addition to this, there is my mind completely over-analysing and working on convincing itself that a new betrayal is imminent with regard to medical help. So far almost every doctor and related has made a 180 after initially appearing to help me, so why not this time? Why won't I get written off as just another crazy transsexual bloke this time?
No matter how positive things may look on the medical front, one doesn't simply shake off eleven years of what one can only interpret as deception, brainwashing, lies and ignorance, aimed at completely destroying any sense of self-worth I may have possessed. I am not stupid and can see that my body is not that of a male, yet I get told over and over by doctors that that's all I am: a transsexual male.
Even as I struggle for more than two decades with a painful period and apparent menstruation. Even as I develop physical symptoms which would be impossible in a male body. Even as it's been clear that my hormone levels have never been normal, and a surgeon has declared that I am a hermaphrodite... it's all not enough, apparently.
On a more positive note, it appears that I did in fact have too much female hormones in my system, and was suffering from PMS-like symptoms. Now that I am off HRT for a couple of days, I can feel that the pressure on my head is fading, which is a good indication of such symptoms, along with a stabilising of emotions. It's possible I didn't notice that I was getting PMS-symptoms because my body started producing more hormones on its own this year only very gradually.
With a couple of weeks I should hopefully learn what my hormone values were while on HRT, to see whether the estradiol level was indeed off the scale and into PMS territory (300+ nmol/L, if I recall correctly, which normally should be ~150). Based on that result I can then decide what to do about the dosage with the HRT, how far I should scale it back, or omit it completely.
In summary, this appears to be what my vacation the coming weeks will look like. Thrilling, isn't it? :)
Maya
Sunday, 22 November 2015
Podcasts are fun to be on
The second podcast I was on was the 'Developer On Fire' podcast [2] and was put online last Friday. That one came somewhat out of the blue, with the host of this podcast inviting me based upon my Twitter presence. It was heaps of fun as well, though.
As some of my readers may already know, I have quite some (international) media experience gathered over the past years. Most of it has been due to my intersex condition and the controversy this stirred up in the Netherlands. Sometimes, like with these podcasts, that unfortunate condition I was born with plays only a tangential or even no role.
What I like about podcasts is that it is generally in a rather informal format, more of a chat with a friend, colleague or perfect stranger than in the setting of a big radio/TV channel's studio and everything that comes with it. While TV (live) broadcasts have the fun factor of make-up sessions and meeting Famous People and the adrenaline rush, podcasts are nice in that they are far more relaxed.
And of course there's that I do (not yet) get invited to talkshows or featured in big magazines for anything beyond my unfortunate physical condition. What being on these podcasts help me remind of is that there is still another 'me' beyond this unfortunate victim of being 'different'. That I am also this 'smart' person with a lot of know-how and skills in software development and possibly far more.
As I wrote on my programming and electronics blog recently, I intended to (read: 'should really') get back to working on my software and electronics projects which have been languishing over the past years. Currently high on my TODO list there are a visual novel game, a custom CPU architecture on FPGA, a new kind of file revision system and the production of videos for my new electronics and software-oriented YouTube channel.
It all kind of makes me wish I could slip out of this body into one which is perfectly boring and no longer deal with all of this societal & medical nonsensical controversy and deceit. Yet as they say, when it rains it pours. One can apparently not be just a little bit 'special', but has to hit the entire jackpot plus bonuses.
Lucky me :)
Maya
[1] http://roundaboutfm.com/episode-02-maya-posch/
[2] http://developeronfire.com/Podcast/Episodes/maya-posch-courageous-presence
Wednesday, 30 September 2015
My new Android game development book just got published
Some of those who follow me may remember me talking about working on this book for the last year and some. Admittedly it's been a long time to finish it up, not in the least because of the many others happening simultaneously to me personally and in my career. Yet it is all done and over with. No more chapter writing, no more revising. No more pleading with editors for just an extra day to finish up a chapter. It's all done with.
To be fair, it feels kind of empty. All of it has been part of my life for over a year and thus it has become part of my routine as well as my thoughts. To think about never having to do any of those things again... it's weird how much it makes you long back to that period.
I guess this should be just more motivation for me to work on my other activities and hobbies, like the countless projects I have left either unfinished, or haven't started on yet. Some projects I'd really like to spend more time on would include my NGS custom processor architecture project and the resulting design and production of a custom FPGA board for it. Also the file-revision system, YouTube electronics channel (NyanTronics), speech synthesis and artificial intelligence projects. That before I even get into the many game development projects I wish to embark on or continue with.
At least I won't get bored any time soon. The last project I need to work on soon is to find a more quiet place to move into. It's hard to focus on projects, let alone feel relaxed when you have the bloody heating system ticking up a storm and can track the upstairs neighbours literally step by step, including their activities in the kitchen, bathroom and toilet. Truly enjoyable and motivating, that.
But those are things which will hopefully work themselves out at some point, hopefully through some lucky contacts and such.
I am curious how many copies of this new book of mine (both dead-tree and digital) will be bought over the coming months and year(s). Maybe it'll motivate me to try my hand at writing more of such books, or maybe not. I may go back to writing my autobiography again at some point as well, but that would require both a willing publisher and me feeling like I can write it without writing myself into a suicidal depression through the fun of remembering everything leading up to a disappointing conclusion. In that regard writing technical reference books makes for a lot more fun.
Maya
[1] https://www.packtpub.com/game-development/mastering-andengine-game-development
[2] http://www.amazon.com/Mastering-AndEngine-Game-Development-Posch/dp/1783981148/
Saturday, 30 November 2013
Today Life Is Being A Total Pain In The Neck
Last night as I went to bed I also found myself glad for one thing, namely having bought one of those fancy emergency USB chargers. As I tried to turn on my eReader it merely sadly blinked its power LED once, shortly, to indicate that its battery charge was too low. After hooking up the emergency charger its battery charge quickly zipped back up to 40+% and beyond. The difference between charging a phone's big battery (1,500 mAh) and this eReader's (maybe 200 mAh?) was quite noticeable. I should be able to recharge my eReader using this emergency charger for about a 100 times if the indicated capacity of 11,200 mAh is correct.
Incidentally I got this emergency charger from Amazon.de, where I found it much cheaper (46 versus 70 Euro) than in the Netherlands at any store. So far I'm gradually getting into the habit of ordering more things from Germany as it's generally so much cheaper than the same article in the Netherlands. It makes moving there a more pleasing proposition. On which note, on Monday I sent the final information to the landlady of the place in Germany I wish to start renting next month, but haven't heard back from it yet. It's quite an agonizing wait, as I have to be moving within two weeks, or have to quickly improvise some kind of solution.
It may be why my neck and shoulder muscles are so cramped up, I guess, with so much stress. Earlier I spent some time on creating a new 'books I have read' map, replacing the old one which was destroyed by the mentally unstable ex-housemate. Since leaving the apartment in Almere I have already read a grand total of twenty-six books, mostly the remainder of the Wheel of Time series and the Discworld series by Terry Pratchett. I had to consult my agenda for the dates on which I finished reading each respective book, which took me through each week of this year so far again. It was rather... uncomfortable. Beyond the minor joyful peak at November 1st with the media attention it's been rather grim.
From court cases, the loss of all my possessions, getting my personal injury case against the VUmc gender team thrown out, rejected as a patient by the last Dutch surgeon I tried after he led me on for weeks and having to say farewell to what little part of the Netherlands I like and will be missing, it's not been emotionally easy so far. Getting the place in Germany and moving there is the last big part. I hope and pray by everything that is holy that next week I'll get confirmation that I can rent the place and will get the required help to move the week after.
Early next week there's also something new and interesting happening, in the form of an appointment with a publisher who has indicated interest in publishing a book about my life's experiences so far. An autobiography if you want. To me such a proposition is more than just an interesting thing or possible source of income. To me it represents an acknowledgement by the Dutch people that they recognize me as a person and my experiences. Bypassing the Dutch System of politicians, physicians, psychologists and other big-wigs, if I get the chance to write this book, have it published and selling well, that'd mean more to me than anyone could imagine.
Anyway, back to the last items of the day to work on, including designing the user interface for a new mobile app in Photoshop, compiling a list of formant frequencies by digging through a small mountain of scientific articles and averaging them and designing some interesting DSP filters for this speech synthesis library to make it sound a bit more... human. It's somehow very appropriate to be working on this speech synthesis library and the artificial intelligence library for another project, as they are all about making computers in a sense more human. Much like myself, really. While Pinocchio needed a fairy to become a real boy [1] and the android Data [2] strove to remove all traces of artificialness from himself by adding 'human features', it seems somewhat ironic that the way for me to truly feel and become human is through immersing myself more and more into technology.
Then again, isn't technology humanity condensed into one of its purest forms?
Maya
[1] http://en.wikipedia.org/wiki/The_Adventures_of_Pinocchio
[2] http://en.wikipedia.org/wiki/Data_%28Star_Trek%29
Friday, 15 November 2013
Who I Am; Chasing That Fairy Tale
Personalities generally tend to fall apart into broad categories without any major distinctions between any number of personalities. One is a tad more of category #54, the other a bit more from #34 and #21. After over 7 billion permutations of all possible categories and associated strengths there's not a lot of uniqueness right there. This results in only the most exceptional ones still showing up in the thronging masses, either through exceptional skill, experiences or a combination of both.
As far as my own personality goes, I guess I'd qualify for both. I have experienced things which aren't very common and I'm gifted with the ability to rapidly make any skill my own. In the past I have on occasion received praise for my skills, particularly in the area of creative writing. Most recently I have received recognition for my set of experiences, as the international media has discovered me as an expert on the topic of intersex and associated topics. Currently I receive acknowledgement of my skills via my work as a software developer, but I also work on a number of rather exceptional projects.
Most of my days have a reassuring regularity. I get up around 7 AM, go downstairs, eat breakfast (2 slices of bread with tea), do work, have lunch (2-4 slices of bread with tea), do work, have dinner (various, but vegetarian), do more work, go to bed. One could say that since high school when I first got my own computer most of my life has revolved around computers. To me they're the representation of a universe and world where I can do anything, think anything and be anything. To thus spend most of my time in front of a computer is to me perfectly normal.
Part of this regularity also has to do with the stressful nature of my life from a young age, no doubt. As the eternal social reject and ever feeling like the ugly, clumsy kid, I never got much self-confidence and I still don't have it, really. There is still far too much stress and uncertainty in my life for that to be the case. Talking just about my body, for one. It's still hard for me to accept on an emotional level that I am in fact a hermaphrodite. Without that last surgery to restore the female side I don't think I can ever come to accept it. Every day this painful uncertainty, doubt and resulting self-loathing continues.
Beyond my body there is that of general acceptance by my environment. On primary school I was the odd one out and got bullied a lot while never making any friends. I felt dumb and useless. Beyond reading lots of books very quickly I didn't seem to have any particular skills. During HS I finally got the first real recognition of one of my skills through a writing competition, where I easily won the competition with a story which 'could have been written by an adult', as the jury put it. These days I know that I'm apparently good at writing and programming, because people tell me so. It's still hard for me to believe, though.
What I'm mostly used to from a young age is bracing for the next blow. Getting bullied a lot, including getting kicked off my bicycle, ridiculed by a large group of fellow students, ignored during PE classes when picking groups and being made to feel fat and ugly. After HS I thus didn't feel like doing anything involving a study any more. Then during the latter phase of my life being told by physicians, psychologists and the Dutch Minister of Health herself that I'm basically a whining brat who is seeing things who aren't there and is probably suffering from delusions or worse.
Every time I find myself looking forward to something fun, or talking about something which would really improve my life, I feel this sense of certain doom creep over me. The only certainty in my life is that I'll suffer more pain until I can take it no more. I'm not even talking about just one's current situation, because compared to, say, a year ago my current situation has quite improved. It's just that all the pain, uncertainty and frustration I have felt since I was a child aren't gone. Now that I have reached a point where it's all coming together in this media attention, the writing of my book and my long-awaited departure from the country which has hosted my torturing for all these decades, it's all coming to the surface.
I can't say I haven't slept well in months now. For the past weeks I find myself waking up every night with my heart racing and my thoughts a jumble. The nightmares - when I can remember them - are becoming more life-like and horrific, to the point where they're more and more merging with the waking day. I try not to give into it too much, but it's getting to the point where I can only properly distinguish between being awake and asleep by whether I am feeling tired and longing for a real night's sleep or not.
Meanwhile I see the preparations around me at the place where I am currently staying for the move as the house is put up for sale. Just another month at most, maybe. I thought I could get that house in Germany before then, but at this point I can no longer fight the thought that it's all failed. Yet again the feeling of failure and rejection, resulting in this horrible feeling of depression which leads to tears from terror and desperation as that silken voice keeps urging me to finally give up on this futile attempt to get that life which is only achievable by normal people. Not born freaks like me. Suffering is what I deserve, and a lonely death.
Part of me wonders whether I simply asked for too much when I looked for that house in Germany and shouldn't have settled for a small flat somewhere, the paranoid part questions the help I was said I'd receive in finding it. Another part simply curls up and cries while lamenting the excruciating pain of merely existing. All that goes on inside my head as I just run through the daily routines and try to pretend that I'm not on the verge of breaking down mentally. I'm totally fine, really. See, I'm smiling. Nothing the matter with me. I'm doing my job. I'm even making a difference in the world now. There's no resonance of anything I say inside of me. There's just the dark abyss of despair that this is the end of me. This personality.
One of the projects I'm currently working on for my company, Nyanko, is a speech synthesis algorithm, based on linear predictive coding (LPC), also known as the source-filter model of speech production. It ties in quite well with another project I'm working on for an American company which uses the Discrete Fourier Transform (DFT). The speech model employed by humans to produce speech - glottis, vocal tract, lips - is quite basic and yet fascinating in its simplicity. It fills me with a great deal of satisfaction and joy to be working on such projects, which also includes a 3D model synthesis tool and an advanced AI model.
Nothing would please me more than to be able to work on such projects every single day. Yet the truth right now is that I lack the energy and ability to do much outside this daily routine, forcing me to rely fully on salvation being offered from Germany. For someone like me who always disliked being dependent on others, it's just another source of stress. I wish I could hope for a good outcome here, but I don't see it happening. Escaping from the Netherlands is a fairy tale for me. Always was, always will be.
Just another month...
Maya
Tuesday, 16 April 2013
Story Of My Life
One item I wanted to write about today was a post I would have titled something dramatic involving how I do not feel that I really have a body. How my experiencing of the world around me is quite surreal. How when I was a child I'd look forward to growing up, yet that this would not happen. That I looked forward to puberty, but that it turned into a both disappointing and extremely confusing and painful experience. That thanks to the extreme brainwashing by Dutch specialists I further lost grip on any kind of self-image and connection with my physical body.
That I have experienced the pleasures of connecting with someone I truly cared about, when I could feel what my body feels, but that those moments were rare and that I feel that I'll never experience such a thing again due to the damage suffered the past time. How absolutely and outrageously frustrated, disappointed and angry I feel at the fact that I will never be able to experience a relationship with a loved one. The depth of my jealousy at those who have such a relationship, and how the intense pain of it makes me want to run away and bury myself. Kill all feelings.
It would have been an intense post for sure. Heavy writing and large amounts of drama, all trying to perhaps futily allow others experience the depths of my mental agony. To gain understanding for the torturous choice between cutting myself literally off from sexuality in every form, or to continue to allow its existence despite everything pointing towards it only being there to cause me agony. I don't think that I could ever bring across my thoughts and feelings there to someone who has never experienced anything alike.
Thus I won't write about it. All you get is the bare summary above. Does it mean anything to you? Probably not. To me it resonates with what I feel inside. To those not like me it just leads to tired advice and equally tired expressions of keeping up hope.
What I did do today was work. Working on this iOS application project for my new employer. I'm beginning to like the work more and more. Just having a solid source of income is more than welcome, it strengthens me to take on everything else which comes along. Such as handling a communication from one of my lawyers regarding the situation surrounding my apartment. Which seems to be proceeding quite well now, by the way.
Much of what I do outside of my work these days feels odd due to that same matter. Not having access to my home and most of my possessions means a lot of improvising and buying stuff anew. It's kind of like camping out in the wilds, only without a set date on when one will be returning home.
Still, today I managed to acquire a new supply of my medication for the hormone therapy I'm undergoing for the rest of my life. It's good to have that settled for a while again. I'm also relieved that yesterday my awesome friend Trevor came back online after having been gone for a few days. Turns out that the part of Canada he lives in suffered a major ice storm, causing power lines to fail. I imagine it must be very... quiet to be without power for a few days straight.
I'm getting more and more enthusiastic every day about making Trevor and my company Nyanko into a success. This means bringing out video games and applications this year. Establish a name and get enough revenue going to make the two of us feel like our efforts were worth it. For me there is not too much I can do yet at this point, as I am still stuck with this old laptop from 2007 which has trouble running even basic applications, let alone 3D modelling and image editing programs such as 3DS Max and Photoshop.
My new laptop should be arriving early next week now. Its specs are quite a match for the desktop system I have at home, with an Intel 3630QM quad-core processor at 2.4 GHz base, 3.4 GHz Turbo speed, 8 GB base RAM and an nVidia GTX660M video card. The display is a 17" full-HD TN LCD (matte), which should be sufficient to do real work on, even if I still miss my two 24" IPS LCDs.
At the very least it should be much faster to compile large projects on the new laptop than on this old one. A regular release build of my WildFox browser takes about ten minutes currently. On the new CPU it should be less than a minute. That's what you get when you go from a slow AMD TK-53 (Athlon X2) dual-core CPU at ~1.7 GHz to a quad-core, modern CPU at 2.4+ GHz. More cores, higher per-core speeds and higher IPC (Instructions Per Cycle).
So yeah, I'm absolutely a geek. No lying about that. The past weeks I feel the energy and motivation returning to work on various software, hardware, AI and robotics projects again. Now that I also have money to spend freely there's nothing really holding me back to undertake at least some of them the coming time. Others will have to wait until I have a home again.
And thus life continues like a dream tinged at the edges with the deep black and red of a frightful nightmare. I wonder which one I will wake up from first.
Maya
Sunday, 7 April 2013
All The Stuff You Didn't See
Looking back at the things I have written about on my blog the past months I have to admit that there's a lot of formal stuff on it, but very little about me as a person. I think that this is a bit of a shame, as originally I had set up this blog to share my daily happenings as well as larger events with the world. Much of this is of course due to the changes which happened during late 2012, when I got my first job as a developer.
Considering those five months I spent there I can honestly say that I'm more glad than ever that I landed the job I currently have. My previous working place was extremely demotivating and also didn't match up very well with the other demands my life places upon me. I'm not suited to working from 9-5 at an office, partially because it goes in against how I work, partially due to the curbing of my freedom in setting my own schedule, and partially because in software development there's precious little reason to spend time at an office when you can do the same work from anywhere.
Anyway, as a result I had to cram in media events, hospital appointments, legal hearings and heavens know what else into the few paid free days I got offered. This didn't leave much time to... well, live. In addition to a relationship going from bad to terrible, various uncertainties about financial and legal matters and trying to help a person who just didn't want to be helped it seems as though I kinda just didn't quite _live_ during those months.
Now that I'm out of it all, with the relationship over, me having gotten an awesome job at a great German company which allows me all the freedom I could wish for, and the ramping up of various events media and legal-wise which will both further break down the tyranny of the legal system against all those who are born 'different' - as well as inform the average person about what the hell intersex is and how the heck they could have missed something so extremely common - it's hard for me not to start feeling more myself. More... human, I guess.
Sure, from yesterday until a few hours ago I had a continuous migraine, and I regularly suffer from mild migraines for the past months now, but I think that's just the stress of the past months coming out of my system. I actually am beginning to feel creative and motivated again. I want to go back to working on fun things, as well as write again on my stories, such as my Ocarina of Time-based Zelda novel, the Viral Desire survival-horror novel and the semi-autobiographic In Between And Neither. Maybe I'll even start work on my autobiography.
I have plenty of ideas for games as well, Android and PC. This in addition to various ambitious software projects I have underway, such as the VHDL compiler I'm writing and the now rapidly progressing WildFox browser project. The latter I'm especially happy with. I'm hoping to replace all other browsers I use with it pretty soon now. Sure, it still needs a few more features and some debugging love, but I'm actually using it for the past few days on this old laptop, and it's a breeze of fresh air compared to bloated Firefox and Chrome.
With money coming in now I am also able to get that new laptop I talked about before. It should allow me to go back to doing 3D modelling and such. I'm also of mind to play around with programming that custom CPU architecture in VHDL again. It's good to be creative, even if I have just shown myself to be a total and utter geek :)
I'm looking forward to returning to my apartment in Almere soon. While it's going to take some adjusting to live on my own with no one around, I think I'll be fine. I should be able to get everything which suffered due to my absence quickly in shape again.
A last thing I wanted to talk about are the movies and games I enjoyed lately. I recently watched the second Silent Hill movie, which is based on the third instalment of the game series with the same name. It was a quite good movie, capturing well the atmosphere of the game, and definitely not a bad movie version of the game's story. I also watched it in 3D, which looks quite good with this movie since it was filmed in 3D.
The 3D effect with the second movie I watched recently watched was even better: The Hobbit, the first part. I watched the High-Frame Rate (HFR) version, which uses 48 frames per second instead of the usual 24. All I can say is that I'd recommend people to always watch the HFR version if possible. The motion is just so much smoother especially while panning and during action scenes that it makes non-HFR movies look cheap. The movie itself is quite enjoyable as well, and I will watch the second part when it comes out.
Finally, I enjoyed playing Mass Effect 2 a lot a while ago. It actually saddened me to lose two team members, though I was rather annoyed to learn that I lost most of my ship's crew because you have a time limit after they get kidnapped to get them back. Nobody told me, I guess :(
A game I didn't play, but of which I watched multiple walkthroughs, has definitely astounded me with its awesome writing. The game is called Bioshock Infinite and it's the third part of the Bioshock series. Truth to be told it's more of a spiritual successor, since it doesn't play in the same time period (1912 instead of 1960s) and aside from one scene there's never a direct link. That doesn't take away that it's an awesome game, however. The writing has such depth and brilliance that you literally have to experience twice. Once to get bedazzled by it, the second time to actually understand the depth and meaning of everything you see and hear.
Anyway, I'll be heading to bed now as it's nearing midnight :) I have to work tomorrow, then after dinner I'm meeting up with a photographer regarding our attempt at winning first place in this year's Pride Photo Award. All we need at this point is really the first public hearing against the VUmc's gender team to get the final shots to perfect the series.
Goodnight and see you all tomorrow :)
Maya
Tuesday, 9 October 2012
Losing Sight Of The Point Of Things
In the end I'd like go back to working full-time in my company, Nyanko. It'll still take quite a few months before it'll generate enough revenue to sustain me financially. Right now all of the projects I'm working on alone or with Trevor will still take a few weeks at least to be finished, are finished but not selling well at all, or are in such an early stage of development that it's not worth investing any hope in them. This includes possibly revolutionary projects such as the HLA-AI project of which the initial prototype should result in an artificial intelligence with the language skills of about a 1-3-year old, and subsequent prototypes should exceed human intelligence. There's also the FPGA/ASIC hardware simulator and board simulator Lilium which I'm still working on as well.
With all that I know and am capable of I am pretty sure that I could do pretty much anything, as long as I keep getting offered the challenges needed to keep me motivated. All together I really hope that Trevor and I can soon turn Nyanko into a profitable company, starting with the release of our first game, Baublez, later this month at the earliest on Steam. All I'd like is for us to be given a chance at showing what we both are capable of.
Maya
Saturday, 19 May 2012
I Am Still Unable To Get Medical Help
How long will it take before that second part of the question gets answered? When I'm 30? 35? 40? Never? No specialist capable of answering that question has looked at my case yet. The German surgeon who did the exploratory surgery wasn't a reconstructive surgery or otherwise versed in such knowledge. I am not aware of any specialist who can help me at this point. Most definitely there isn't one in the Netherlands. So yes, I can call myself female, and I have a vagina, but I'll never be able to actually use it. That's just bitter.
I had hoped that I could get medical help as a result of the media attention, but the Dutch media has issues grasping the situation, preferring to focus on the bit of happy news and leaving it at that, and as a result the foreign media isn't picking up on it at all. It was my hope that the foreign media would provide salvation, but the earliest that may happen is by the end of this year. If I'm lucky and the lawsuit against the first Dutch hospital (VUMC) goes well, that is.
When it comes to medical help there's exceedingly little I can get here in the Netherlands at all. I do not have a family doctor at this point and have only had negative experiences with family doctors in the past. They seem to be consistently incapable of diagnosing even basic things and rarely take me serious in any fashion. Combined with the above issue I distinctly feel that my existence is still as ridiculed and irrelevant as it was before. In the end nothing bloody changed...
I am currently trying to raise more attention for the intersex cause and with it my own situation via another project, namely the World Intersex Society for Humanity (WISH). At the moment I'm collection stories from other intersex individuals so as to provide a single, coherent voice to the impossible situation society has forced us into. You can see the overview and submission rules here: www.mayaposch.com/wish.php?p=stories.
Another project I have high hopes for is a more scientific one, called the High-Level Algorithm Artificial Intelligence (HLA-AI), a new approach to mapping and reimplementing a human-level intelligence on a computer system. So far I have mapped mostly sections of the visual and auditory cortex including their memory cores and the interactions with the so-called linguistic center. The current prototypes revolve around natural language processing/understanding and synthesis. My hope that this project will give my career a major boost. It is also a major self-esteem thing as I have been working on AI projects in some form since the late 90s ever since I caught the AI bug. I'll be blogging about this soon on my Jinzou Ningen/Artificial Human blog.
So yeah... I'll see what happens, I guess.
*sighs*
Maya
Sunday, 15 April 2012
Please Buy My Games And Other Assorted Updates
On Thursday I released a new game for the Android platform, titled Heimen no Heiwa (平面の平和), which translates to 'Tranquility of the Planes' in English. As you can see in the picture it's a relatively simple game in its appearance. The marble is rolled around the playing field by moving the phone or tab, whereby each black circle vanishes upon contact. The level ends when all circles have been removed. The level also ends when the marble leaves the playing field. Having played it myself I was amazed at how much it appealed even to my own desire to conquer this game, and how difficult, sometimes even evil it is. As each level is dynamically generated I can only blame the universe for making it so hard for me. And solar radiation.
Heimen no Heiwa can be bought on the Android Market. See the game's page and more screenshots and details at my company's website: http://www.nyanko.ws/game_heimen_no_heiwa.php
At this moment I'm mostly working on TileWars together with my awesome friend Trevor. With some luck we'll be able to release this game on Steam by the end of next month. I'm also always looking for ideas for simple, original mobile games.
Moving on, yesterday I did a very interesting interview for Dutch monthly magazine Viva. The interview plus photoshoot ended up taking about five hours total, which is probably a new record. It was quite fun, though. The journalist (Adeline Mans) was very nice and I managed to more or less stick to a chronological detailing of my story. After the interview of two hours the make-up artist (Tynke Jeeninga) who had arrived a few moments before that with the photographer (Wout Jan Balhuizen) set to work on making me look pretty as I said goodbye to Adeline. The prettifying and photoshoot ended up taking a few more hours, but I feel it was worth it. The make-up was done very well, and it was the most fun photoshoot I have had in a long time, probably since the Grazia shoot back in 2009. The article is scheduled to be published in the May 23rd issue.
Today I have been mostly working. Somewhat on the TileWars level editor, also on setting up an example in order to replicate a bug found in the WebKit webpage rendering engine. Without much luck so far, I may add. It's rather annoying that a persistent bug in my WildFox browser is seemingly caused by some kind of edge condition in the WebKit engine and/or Qt wrapper for said engine. I also intend to resume finishing my other Android game, Bizarro Arkanoid soon. Thanks to Heimen no Heiwa I have been able to hone my AndEngine/Box2D skills some more and will hopefully be able to put up another Android game for sale very soon now.
Tomorrow my life coach (Elsa Rothengatter) will be dropping by. She'll be helping me pick some clothes and such for my TV appearance on Monday. It's still a bit of an uneasy thing for me, I guess, to have someone I'm supposed to rely on. It's been the same with my psychotherapist before that and with teachers at school before that. Being independent and feeling that I'm expected to solve things myself are just how I'm wired. This even though I can admit that I sometimes really do need others. It's a hard thing to rely on others, more so after having dealt with so many years of abuse and betrayal. Trust is a very easy thing to lose, yet so incredibly hard to regain. Accepting help is so very stressful for me at this point. I do feel I should allow others to help me, though.
Finally, on Monday I'll be traveling to Hilversum during the early morning hours for my first live appearance on Dutch national television. The show in question is called Koffietijd and is broadcast on RTL4 from 10 to 11 AM. I'm really looking forward to this event. Later that day I'll also get a phone call from my lawyer, Yme Drost, regarding the last details of the formal complaint against the VUMC hospital. Said complaint will be filed early next week, kicking off the first of many complaints/lawsuits against the Dutch hospitals in their abhorrent treatment of me and other intersex individuals. While a quite technically involved case, it's nevertheless fairly clear and cut. It will be interesting to see what the VUMC comes up with in the month they have to respond to this first complaint as it'll set the tone for the coming legal pursuits.
More fun is that on Monday I'll also be dropping by a men's clothing store here in Rijssen to buy a particular item of clothing of a specific designer and send it to this British girl who wishes to give it to her boyfriend for his birthday as he has the same name as this designer whose clothing is only being sold in the Netherlands. I know this girl only via IRC and to be honest I barely knew her before this, but now I know a great deal about her. It's funny how things work sometimes in social contacts. I'm also glad to help someone out like this. I'm a strong believer in doing nice things for other nice people :)
So yeah, that's just over a week compacted into a few paragraphs. A week ago around this time I was working on Heimen no Heiwa and now it's finished. TileWars is rapidly heading for release as well after starting the project in late 2010. My medical quest has nearly come to an end and I'm in a situation at this point I would have killed for even half a year ago. Things are changing rapidly and even though I can only admit that I'm still suffering from strong suicidal feelings despite everything, at the very least it has been reduced to a strongly uncomfortable, panicked feeling with only occasional bouts of crying and feeling utterly miserable. Maybe even that will pass some day.
At this point what I need most of all is to have that place of my own and financial independence as the lack of this is responsible for about ninety percent or more of my current stress levels. I'm trying, but I may need some serious help from others here as well. Please?
Maya


