Shut it!

Wednesday, April 25


RSS Is Back

Teeny-tiny bug in Monday's update kind of wrecked the RSS and Atom templates.

Fixed now.

Posted by: Pixy Misa at 03:33 PM | No Comments | Add Comment | Trackbacks (Suck)
Post contains 18 words, total size 1 kb.

Tuesday, April 24


More New Toys


The pullquote tag makes for easy and attractive magazine-style pullquotes.
The pullquote tag makes for easy and attractive magazine-style pullquotes. You can place the pullquote to the left or right of the text, set your own colour schemes, control the line breaks yourself or let the system handle it for you, and select different text for the quote and the main body.

Code: [pullquote left strip scheme=orange]The pullquote tag|makes for|easy and attractive|magazine-style|pullquotes.[/pullquote]

Usage: [pullquote {left|right} {strip} {nobody} {scheme=scheme_name}]
  • The quote can be placed either left or right (the default) of the body text.
  • This text appears only in the pullquote.
    When needed, the pullquote text can be different to the body text. To specify that the contents are to appear in the pullquote only, specify the nobody option.
  • Markup in the body text may cause problems in the pullquote. The strip option removes any markup from the pullquote, leaving it in the body.
  • Schemes can be user-defined in your CSS. The standard schemes include
    red, orange, green, blue, and purple
    red, orange, green, blue, and purple. The default scheme (if no scheme is specified) is black and grey. The CSS code for the blue scheme, for example, is simply:
    .pullquote-blue-1,.pullquote-blue-5  { color: #55D; }
    .pullquote-blue-2,.pullquote-blue-4 { color: #339; }
    .pullquote-blue-3 { color: #004; }
  • Pullquotes are automatically split into five sections, unless you specify the break points using pipes | as shown in this example.

Posted by: Pixy Misa at 12:33 AM | Comments (2) | Add Comment | Trackbacks (Suck)
Post contains 209 words, total size 4 kb.

Tuesday, April 17


Random Taggery

Examples Of The New BBCode Tags

[technorati=wii] wii
[google=wii] wii
[googlegroups=wii] wii
[wiktionary=rhythm] rhythm
[tvtropes="genki girl"] genki girl
[theppn="hayashibara megumi"] hayashibara megumi
[sourceforge=psyco] psyco









(Couldn't find anything actually worth watching on Vimeo.)



Posted by: Pixy Misa at 01:47 AM | Comments (1) | Add Comment | Trackbacks (Suck)
Post contains 16 words, total size 2 kb.

Monday, April 16



I think smaller, more frequent updates might be the way to go...

Posted by: Pixy Misa at 04:28 PM | Comments (1) | Add Comment | Trackbacks (Suck)
Post contains 13 words, total size 1 kb.

Friday, April 13


Hitting The Books

Starting to write some real documentation for Minx.  It's not a trivial task.  That's one block tag; there are hundreds of those.

Posted by: Pixy Misa at 01:08 AM | Comments (4) | Add Comment | Trackbacks (Suck)
Post contains 25 words, total size 1 kb.

Monday, April 09


A Post To Pound On

I need to test the breaking strain of the Minx commenting system, so please comment here.  A lot. smile

Posted by: Pixy Misa at 08:57 PM | Comments (441) | Add Comment | Trackbacks (Suck)
Post contains 24 words, total size 1 kb.

Sunday, April 08


Well, Poop

The date change logic is busted.  That just might have something to do with all the date/time changes I made a couple of days ago.

Throw another bug on the tracker...

Update: Fixed, and at a cost too small to measure (less than a millisecond for this page, anyway).  Now takes timezones properly into account; I haven't applied all the new date/time rules... Though I guess I should.  Maybe.  Later.

Posted by: Pixy Misa at 04:58 AM | No Comments | Add Comment | Trackbacks (Suck)
Post contains 72 words, total size 1 kb.


New Toys

The new feature set has been uploaded.  Minx now has proper management screens for posts, files, folders, templates and directories, as well as working site and user options, the date/time enhancements I mentioned before, and account and statistics pages.

And a neat little image management module:

Apart from changing flags and copying, renaming and deleting files, you can perform a few other tricks.

Starting with the original:

You can resize, to a fixed size, in proportion to a new height or width, or to a percentage:

Convert file formats:

(Which doesn't seem to work terribly well for converting to GIFs; I'll look into that.  I think it might be using a fixed palette.)

Flip or mirror the image:

Switch to black and white or inverted colours:

Smooth or blur:

Sharpen or detail:

Posterize or contour:

There will be a whole bunch more of these if I can get PythonMagick working, but (except for the convert to GIF) it will do for now.

Update: Looks like PythonMagick is an ex-library.  If I want to use ImageMagick, I'll have to call it directly.  Which is not actually hard; just inefficient.

And dammit, my images aren't showing up in the editor again. frown

Update: Okay, a few more options before bedtime. smile

Adjust the colour: 50% and 150%.

Brightness: 80% and 120%.

Contrast: 80% and 120%.

And sharpness: 1% and 200%.

Sharpness is relatively subtle, which makes it useful for fine adjustments, unlike the basic smooth and sharpen filters.  I pushed it to fairly extreme settings here to show its range.

Posted by: Pixy Misa at 02:30 AM | Comments (3) | Add Comment | Trackbacks (Suck)
Post contains 260 words, total size 7 kb.

Tuesday, April 03


More Iffing About

I've made some FizzBuzz-related enhancements to the new conditional tags.  TTLWAIN* is sufficiently lacking in expressive power that even simple programs like FizzBuzz are a pain to write, so I've added some new options to [if] to smooth things out.

First, all the [if.condition] tags now work if supplied with a single variable.  The missing variable is assumed to be zero, if the provided variable is a number; False, if the value is True, blank, if the value is a string, and None otherwise.

Second, some new condition codes have been added:

[if.z] and [] test whether the value is zero or non-zero.  This is effectively identical to using [if.eq] and [] with a single numeric variable, but may be clearer to the user.

[if.odd] and [if.even] test whether the value is odd or even.  If the variable is not numeric, the result is undefined.

[if.all] tests whether both the variables are true (non zero / non-empty) - effectively an and.
[if.any] tests whether either or both of the variables is true - an or.
[] tests if one and only one of the variables is true - a xor.
[if.none] tests if neither of the variables is true - a nor.

Third, there is now a matching [ifn.condition], which does what you'd expect.

Fourth, and cause for much rejoicing, there is an [else].  Code within [else]....[/else] is evaluated if the last tried conditional block within the current template was not evaluated.  In other words, it works the way you would expect, with one addition: You can have multiple [else] blocks after one [if] block, and all the [else] blocks will be evaluated if the [if] fails.

* The template language without an interesting name.  The Minx API is called Mai (Minx Application Interface); the forthcoming Minx desktop app is called Miko.  I haven't managed come up with a neat and appropriate name for the template language yet.

Posted by: Pixy Misa at 03:06 AM | Comments (6) | Add Comment | Trackbacks (Suck)
Post contains 305 words, total size 3 kb.

Monday, April 02


Tag Soup

So what's new for today?

Conditions, calculations and variables!

Minx already had four conditional tags, namely [if], [ifn], [iff], and [iffn].

[if] tests a single variable. If that variable exists and has a true (non-zero / non-null / non-empty) value, the template code within the bracket of the [if] and the [/if] is evaluated.

If the variable is false (zero / null / empty), the code is not evaluated.

And if the variable does not exist, the [if] tag itself is not evaluated, and is instead included directly in the output. So if you get the name of the variable wrong, and type [if post.coments] instead of [if post.comments], you will be able to see your mistake right there in the page. In this case, the bracketed code is processed as if the [if] tag did not exist.

[ifn] works exactly the same, except that the condition is reversed. Code inside the [ifn] [/ifn] is evaluated if the variable is false.

[iff] and [iffn] are similar, with one big exception: The bracketed code is evaluated if and only if the variable evaluates to true (or false, for [iffn]). If the variable does not exist, the code is skipped, just as if the variable had been false.

Comparison Tags

[if.eq], [], [], [], [], [if.le]

These extended conditional tags compare two values, to see if, respectively, they are equal or unequal, or that the first value is greater than, less than, greater than or equal, or less than or equal to the second value. They must be closed by a corresponding [/if.XX] tag such as [/if.eq], not by a [/if].

The values can be either variables or constants. The way Minx determines which is the case is somewhat simplistic: If a variable exists which has the name of the value, it assumes that's what you mean; if not, then it assumes the value is a constant. So unlike the simple [if] tag, there's never a case where the variable doesn't exist.

These tags will perform integer comparisons if both values are integers; otherwise they will perform string comparisons. So [ 10 2] will evaluate as true, just as you'd expect, and [ a10 a2] will evaluate as false.

[I had held off on implementing these for the sake of keeping the template language simple, but it turns out I need them to properly manage context-sensitive selection lists - such as on my new forum pages - so in they went.]

Variables and Calculations


You can set a variable with the [set] tag. Like the extended conditionals, [set] can take either another variable or a constant, so [set a post.title] or [set a "Wombats in Paradise"] are valid examples. Again like the extended conditionals, [set] assumes a variable if the variable name exists, and a constant otherwise.

The variable can be accessed again with the prefix var. So [var.a] will print the value of a, and [if var.a] will test it. You can use the var.a terminology inside set as well, and it will be interpreted appropriately.

Variables can be used anywhere a normal data tag could be used.

[calc.add], [calc.sub], [calc.mul], [calc.div], [calc.mod], [calc.min], [calc.max]

The [calc] tag performs a calculation based on two values, and assigns the result to a variable. The values must be integer variables or constants; anything else will be evaluated as zero.

So [calc.add x var.y var.z] will set the variable x to be the sum of y and z.

[inc], [dec]

Just want to increment or decrement a counter? These are the tags for you! [inc a] or [dec a] and you're done.

If the variable did not exist beforehand, it is created as zero, and then incremented or decremented.

Note that none of these tags can alter the value of an existing data tag, only user variables.

Posted by: Pixy Misa at 12:37 AM | Comments (5) | Add Comment | Trackbacks (Suck)
Post contains 546 words, total size 6 kb.

<< Page 1 of 2 >>
327kb generated in CPU 0.1101, elapsed 0.3105 seconds.
58 queries taking 0.2182 seconds, 671 records returned.
Powered by Minx 1.1.6c-pink.
Using http / / 669