Color sorting is an interesting problem

color palette for #336699

I love exploring colors, color theory, and color spaces. I have made several color sorting and selecting tools, including a color palettes page.

One of the challenges I encountered is that I want to show a color palette derived from a base color. Since every proper color palette should be sorted by hue, and I am not hand-picking these colors, I need to sort the resultant color set programmatically. The problem is that my current hue-sorting function doesn’t sort related colors the way I expect. You can see the sorting on this page. Notice how there’s a nice long line of perfectly-sorted greens, and then the one oddball green at the end? What’s up with Lime anyway?

I know where I went wrong. I copied the color-sorting code from elsewhere on the internet. The code, which can be seen here, does a two-fold sorting process. First it clusters colors together in a first pass, and then sorts them again on a second pass, by determining the distance between colors.

There are always outliers. The outliers are colors that are not close to anything else in my dataset, so they don’t get sorted with the rest. I haven’t figured out how to address these outliers in a visually pleasing way. The code is also so baroque that I have a hard time getting into it the weeds of it.

I have written my own color-distance functions which do simple arithmetic on the original R, G, and B values. This code can be seen here. The function limits the R, G, B values to a short numerical range. It works–it produced the palette shown above–but I am not sure if it can be scaled to a generic color-sorting function. It feels a bit hokey.

I also found this which seems to do the job, but it uses jQuery. I could rewrite it in vanilla JavaScript if I find that it gets the job done.

One of my goals is to have a perfectly fast, library-free page that puts together visually pleasing sets of color on the fly. I think it’s possible.

Let me know your thoughts on color sorting, colors, or code.

Language generators

I am in the middle of novel revisions, so naturally I am updating my language generators. I get kind of obsessed with them.

Random language generator
I wrote this page to generate random sentences using JavaScript and JSON libraries. It retrieves JSON data words using an AJAX call and then generates language using pre-defined rules.

Lorem ipsem language generator
This demo generates lorem ipsem text up to as many paragraphs as you specify. Use it for your web design projects. It is created using Markov chains applied to a very long sample of pre-existing lorem ipsem.

Markov chain language generator
In a Markov chain model, the probability of each item (in this case a word) is based on the state of the previous item. A Markov chain language generator can generate real-sounding text given a source document by predicting which word will follow next after each word. Sample documents here include Alice in Wonderland, Ulysses, my very own vampire novel, the King James Bible, a Latin Bible, a few other texts, and user input where you can enter your own text.

Procrastination by way of web design

I spent a good eight hours today revamping ankiewicz.com, and enlarging all the thumbnail images, bandwidth be damned. I am writing a novel, so naturally I spent all day twiddling with images that have nothing to do with my novel. In the interest of preparing for this novel, I wanted to start a blog about writing, procrastination, and the process. I debated five ways to Sunday whether or not to host my blog on wordpress.com, or ankiewicz.com. Pros to self-hosting: complete control of the look and feel. Cons to self-hosting: no real access to the community and wordpress.com ecosystem.

It’s probably six of one. I decided to host the blog here on wordpress.com.

There are a lot of frog photos on ankiewicz.com

Procrastination

My form of procrastination is a random language generator.

It makes little paragraphs like this:

  • None of the nude cheese lets everything speak of her tryout. Some fiercely stunning pauses speak of her. She says, medium-size. He replies, collecting operatives. They say, mad.
  • I yearn for an oval, parental, and crimson layer. Azure housemothers can gladly take her overcast border. She says, corned. He replies, confusing those heretics. They say, confused.
  • They grin at something. Those customers have these discerning outlooks. She says, blorpy. He replies, rubbing the stuff. They say, nervous.

I wrote it in JavaScript:

https://ankiewicz.com/technology/random-language-generator/

Feel free to use those sentences in your own writing projects.

I am a little obsessed with it. I strive to make it better and better. I want the output to be as natural-sounding as possible. It is satisfying when it spits out realistic-sounding sentences. It’s extremely satisfying when the grammar is correct. I spent hours getting the plurals of the nouns to match the verbs. I spent forever deciding whether or not a sentence needs an adjective, an adverb, or a prepositional phrase.

It will never produce a novel. If I spend half as much energy on my novel as I do on this thing, I’d be done by now. Yet, I am fascinated by the process of creating machine-generated sentences. I am drawn to it. Occasionally, from an unexpected and surprising turn of phrase, I get inspiration.

I find myself getting lost in sites like this, imagining how I would emulate such rules in my own language generator: http://www.gingersoftware.com/content/grammar-rules/adjectives/order-of-adjectives/

What’s your form of procrastination?

Fractals and PostScript

Below is an example of a fractal I wrote in PostScript long ago when I used to be a PostScript developer. I have been playing with my pseudo-fractals. They are repeating & branching designs generated by simple mathematical rules. I wrote them in PostScript and generated the output using Preview on Macintosh. You can also open the PostScript files in Adobe Acrobat Distiller or GhostView. Someday I will try writing these in the <canvas> tag. Someone has informed me that this is a true definition of a fractal, not necessarily “pseudo”, though I think I have a ways to go before they are as beautiful as these. If you like PostScript art, check out my fonts too.

fractal image of a red mushroom cloud

Posted in response to the daily prompt Branch

Words

I made a random language generator using JSON, JavaScript, and HTML. If only such a toy could write a novel for me, I’d be set.

The recreational furnace checks the operational equator between a hapless fiver. The unmoved brick. Protecting. The broken pumper battles the loud workshirt, says inherent, sincerely. I reply, fatuous. An unique moth admits the cumulative curfew amongst the sinuous solo.

An unconvincing tambourine books a stupid offensive. A fetal masque. Suspending. The boring broom buzzs the attributable squash, says hollow, jealously. I reply, normal. A capitalistic sounding attracts the skilled prodigality.

Responsive design

I have updated several of my websites to be more cleanly responsive. A responsive website will fit any layout, including phone and table. Additionally it should elegantly resize between various sizes on a desktop. Responsive design is best practice because in today’s world of proliferating devices, it means one set of code serving up the widest set of platforms; it also doesn’t lock the user into a specific design.

I build responsive websites using a combination of pure CSS media queries (using Sass, or Syntactically Awesome Stylesheets), Bootstrap, Respond.js as a responsive polyfill for older browsers, and Google’s HTML5 shim for older browsers. Ankiewicz.com is built using WordPress and PHP. Monsters.net is built using Jekyll and Liquid. Both sites use jQuery and JavaScript.

Resize the following websites in your browser, or visit them on your phone and tablet:

Want a custom theme, a WordPress install on your own domain, or a responsive design? Contact me.

Updates to ankiewicz.com

I have updated ankiewicz.com using JAlbum, PHP, and mySQL. I use phpMyAdmin to access my database.

I have loaded new photos to the front page. I also made the entire gallery structure of the site less deep, so that a user can more quickly get to the large (pretty) photos. More galleries are directly accessible from the photos home page.

I like the way my web pages look when the images are all the same size. However, I have a number of photos that I like that happen to be vertical. I’m not sure if they can be cropped horizontal and still look good.

It’s probably more worthwhile to spend my time labelling and describing the images.