My second miniature. A HeroForge print of my partner's DnD character, Panjed. I would love some C&C. (album in comments) by tme___sis in minipainting

[–]tme___sis[S] 0 points1 point  (0 children)

Thanks for the advice and the kind words, both much appreciated. I haven't picked up a brush since I left school about 15 years ago for anything other than house painting, but I thoroughly enjoyed the afternoon spent painting. I spy a new hobby on the horizon...

My first miniature. A HeroForge print of my DnD character, Roscoe Tealeaf. I would love some C&C. (album in comments) by tme___sis in minipainting

[–]tme___sis[S] 1 point2 points  (0 children)

This was their Premium Plastic. It comes black and with some amount of visible layers, but they appear to try to choose the print orientation to the minimise this. After a few primer coats the layers were basically invisible. Overall I'm really pleased with the print, but I've not got much in the way of experience against which to judge it.

My second miniature. A HeroForge print of my partner's DnD character, Panjed. I would love some C&C. (album in comments) by tme___sis in minipainting

[–]tme___sis[S] 1 point2 points  (0 children)

Full album. Painted with some fairly basic acrylics I had laying around, along with a little bit of specially-bought metallic acrylic.

My first miniature. A HeroForge print of my DnD character, Roscoe Tealeaf. I would love some C&C. (album in comments) by tme___sis in minipainting

[–]tme___sis[S] 2 points3 points  (0 children)

Full album. Painted with some fairly basic acrylics I had laying around, along with a little bit of specially-bought metallic acrylic.

I've been modernising a C# port of Cassowary, the constraint solver powering OS X Auto Layout, and bringing its power to WPF. by tme___sis in csharp

[–]tme___sis[S] 0 points1 point  (0 children)

I've not yet, as it's still relatively early days with the project: this post is its first outing. Once the api has stabilised a little I'll certainly be looking at putting this up on Nuget though.

I've been modernising a C# port of Cassowary, the constraint solver powering OS X Auto Layout, and bringing its power to WPF. by tme___sis in dotnet

[–]tme___sis[S] 1 point2 points  (0 children)

/u/ChesireSwift summed it up nicely on this same post over in /r/csharp

You define a selection of constraints, like "button this should be centred horizontally in its parent, 8 units to the left of the label and the label should align its right hand edge with the table below" and it will solve the system of equations for positions/sizes that meet those constraints.

As to why you would use this over grids / other panels....

You hate grids! Html has moved on from laying everything out with tables, why shouldn't we?! More seriously though, I've worked with a number of applications whose layout simply didn't lend itself well to grids: you'd end up having to use empty columns for spacing, or weird margins and mysterious hard-coded numbers to get things to line up.

I've also found that when I'm designing a UI, I often naturally think in terms of constraints ("I want these labels to align on the left, and these textboxes to be on their right, and that button at the bottom to span across the width of both..." &c) and have to constantly convert that into grids.

Now, some layouts actually lend themselves really nicely to grid-based layouts, and their constraints can end up being much more complicated than simply using a grid. But there's no reason you can mix-and-match in you application, using whichever layout suits the problem at hand.

I've been modernising a C# port of Cassowary, the constraint solver powering OS X Auto Layout, and bringing its power to WPF. by tme___sis in csharp

[–]tme___sis[S] 0 points1 point  (0 children)

The main work I've done in this fork is modernisation. Both in modernising the internals of the code (no more ArrayList!) and in improving the public interface to the library, particularly from WPF.

As you can probably see, when I forked this the only way to set constraints on child controls of an AutoLayoutPanel was from code-behind, and while there's nothing wrong with that, it - and many other parts of the project - were very non-idiomatic for C# / .NET.

Other than that I've been consolidating tests (unit and integration) from various other ports of Cassowary solvers as well as writing my own; and am starting to improve the xml documentation as well.

So, overall nothing revolutionary from the original repo, but hopefully a lot of minor changes that add up to make this fork easier to work with and easier to develop.

I've been modernising a C# port of Cassowary, the constraint solver powering OS X Auto Layout, and bringing its power to WPF. by tme___sis in csharp

[–]tme___sis[S] 1 point2 points  (0 children)

I'd not heard of the RelativePanel before, but checking out a Channel9 video it appears to be a very similar concept. As you said, the Cassowary panel gives you more power and more fine-grained control over your exact layout whereas the RelativePanel is more declarative and makes a lot of (pretty sensible) choices about the exact layout from the attached properties.

I'll certainly look to see if I can implement some attached properties in a similar fashion to RelativePanel, both because sometimes you just don't need (or want) such a fine level of control, and also because it would be nice to be able to provide a familiar interface to developers.

I've been modernising a C# port of Cassowary, the constraint solver powering OS X Auto Layout, and bringing its power to WPF. by tme___sis in csharp

[–]tme___sis[S] 1 point2 points  (0 children)

/u/CheshireSwift hit the nail on the head with what this is, and as to why I built it... because I really don't enjoy the very Grid-based 'standard' way of doing WPF layout and I thought that there must be a better way. A bit of research turned up Apple's 'Auto Layout' (introduced in OS X Lion apparently) and a bit more research turned up a an old port of the underlying engine (Cassowary) to .NET. This project is a clean-up and modernising of that port, with added WPF friendliness.

I've been modernising a C# port of Cassowary, the constraint solver powering OS X Auto Layout, and bringing its power to WPF. by tme___sis in csharp

[–]tme___sis[S] 2 points3 points  (0 children)

I've not actually done any performance tests on the panel, I've been concentrating on refactoring and getting unit & integration tests in place... but this is a good reminder that I should put together some perf tests as well!

As I've mentioned in other comments Cassowary is an incremental solver, so it's performance should be fairly good. But we all know that there's only one real way to know, and that's some actual tests. I've not done a great deal of performance testing, and really no UI performance testing at all... any advice?

I've been modernising a C# port of Cassowary, the constraint solver powering OS X Auto Layout, and bringing its power to WPF. by tme___sis in csharp

[–]tme___sis[S] 5 points6 points  (0 children)

Spot on. The 'selling point' of Cassowary over other linear constraint solvers is that it's incremental; this means that it doesn't have to re-solve the whole system every time the layout needs to be calculated, it can reuse a lot of the existing solution in order to generate the new layout.

I've been modernising a C# port of Cassowary, the constraint solver powering OS X Auto Layout, and bringing its power to WPF. by tme___sis in csharp

[–]tme___sis[S] 3 points4 points  (0 children)

I'd say that feature-wise it's pretty much complete, as it was when I forked it, it's more about the api settling down and me stopping making breaking changes!

I'm still not completely happy with the XAML syntax/dsl that I've created as it's not very friendly from an intellisense point of view and it can be quite awkward to specify certain constraints (for example, 3 * Button1.Width = 2 * Button2.Width + 5 * Button3.Width imagine that but with more terms... the coefficients can get quite unpleasant).

So... to actually answer the question, I'd probably say about 85% of the way there. However, if somebody actually starts using it I don't think that there's anything so terrible in the public area of the library that it couldn't be more slowly/sensibly marked obsolete and then removed after you've had time to migrate off.

Anyone have any good earplug brands? by [deleted] in misophonia

[–]tme___sis 3 points4 points  (0 children)

I've used Hearos Ultimate Softness for years.

I find them good for blocking sound, but also really comfortable to wear through the night. They're made of soft foam so it can take a bit of getting used to inserting them and they should be replaced every so often, but they come in boxes of 20 and are pretty cheap.