2018-08-05 12:25 am
Entry tags:

Song of the nonce

Of all of the songs to get earwormed by, did it have to be MTC by S3RL? (NSFW)
2018-05-23 01:23 pm
Entry tags:

Quote of the nonce

From Thexalon at Soylent News on the Epic Systems decision:

With this decision, SCOTUS has basically made large businesses completely above the civil laws of the United States. They've replaced the court system with the private system of binding arbitration, a fake court in which there is no jury and the big business in question gets to pick the judge. And guess what the standard they use to pick the judge is.

If you as an individual make any kind of contract with a large business for any reason from here on out, remember that you have absolutely no recourse to the law if they screw you over. In AT&T v Concepcion [wikipedia.org], in which SCOTUS (with a somewhat different lineup than this SCOTUS) said that businesses can in their contracts with customers ban class action lawsuits and force cases into arbitration, even if the state laws say they can't. Now, with this case, the same rules apply to employees. And these kinds of clauses are also common in contracts with small companies too.

2018-04-02 04:34 am

Clash Champions: The Second Great Renaming

I decided to rename several characters in my Smash fanfic.


Read more... )

In summary:

  • Job 1: Clear up the confusion between Celestia, Ceilidh, and Cela
    • Cela Porter => Rona Porter
    • Ceilidh Minh Bustamante => Siobhan Minh
  • Job 2: Fix Sunny and Solaria
    • Solaria => Solana Sondager
    • Sunny Delight => Pleasant Beauty
  • Job 3: Fix Alex and Alif
    • Alif => Leph

The First Great Renaming was changing the title and expy-izing the main characters when I restarted this fic.

2018-03-11 02:53 am
Entry tags:

Richard Sherman explains decision to sign with 49ers: "I was tired of winning"

Former Seattle Seahawks star cornerback Richard Sherman explained at a press conference today why he decided to sign as a free agent with his team's longtime rival, the San Francisco 49ers.

"There's one thing that I've never done in the NFL and that is being on a really crappy losing team, the kind of team that can be in the Super Bowl one year and then before you know it they're 2-14. That's something that I believe I can experience by being with the 49ers. Since I'm so great that no one will ever throw the ball my way, I'll just sit back and watch the other teams throw touchdowns past whatever poor son of a bitch they line up on the opposite side of the field from me."

The 49ers have signed 38 other cornerbacks and plan to have to go through "two or three a game" according to 49ers general manager John Lynch, one of four general managers who were fired and replaced during an interview yesterday.

While stepping down from the podium after the press conference, Richard Sherman immediately sprained his Achilles tendon and he will be out for the season.
2018-01-18 07:43 pm
Entry tags:

Fanfic update

I haven't worked on my Smash parody/fanfic in months but I decided to throw together one-paragraph brief descriptions of the characters. The managers are original characters and Hong merges enough different elements to be an OC. You've probably met most of the rest.


Read more... )

2017-11-22 05:02 am

The Monster of the Week

I haven't worked on my fanfics lately, but inspiration struck this morning and gave me a side story.
Read more... )
2017-11-05 12:50 am
Entry tags:

Al-Waleed bin Talal arrested

What did Trump have to promise the Saudis to get this done? This guy owns $25+ billion in Kingdom Holdings. He's one of the biggest big shots in the world.
2017-09-04 12:38 am

Fanfic status update

About seven or eight years ago I had an idea for a fanfic: "What if Samus and Iji had a fight?" That's not very original, I'll admit, but I banged out more text for it than any other fic I've worked on before it sank into a morass of headcanon and fanwankery that didn't look good in foresight or hindsight. To sum it up in one line, it was supposed to be a combat fic and they spent most of their time on a shopping trip.

I revived the story last year with a few mental guidelines. Cut back the fanwankery and build the characters around the headcanon. Rename the characters so they are not the exact same characters but expys, obvious analogues or parodies that the reader can recognize if I write them well (spoiler: I don't) and who also are appealing and interesting characters on their own merits. Add more action and adventure (and fewer shopping trips) and make it meaningful.

For a time the fic's going name was Let's You And Her Fight which was a great name except that the team will change in the second season and include a male fighter. I changed the name to Crash Champions because it kinda-sorta invokes Smash Brothers, which the universe is based around to explain why Samus/Alex Smith and Iji/Jill would be having a fight. I will probably change the name again to Clash Champions which invokes combat and has an actual meaning in English.

Then the fic expanded to include other teams of fighters, a scheduled tournament, team managers, referees, corporate politics, and offworld adventures in every episode. The first fic didn't have any of that. It had ended with Celes stealing Mick's ship and going around the multiverse knocking off the big bads of other video games. That sort of thing is going to be a part of the new story and will turn out differently.

I now have a finished draft of the first of 13 planned episodes. Most of it is still that shopping trip.


My other fics are going nowhere fast. The most promising of them was Odyssia Papadopoulos and the Princess of the Skies which got bogged down in the need to explain all of the Holy Shit that just happened (tldr: an ancient god of war attacks a Russian base during the Cold War) and I don't have anything for the main characters to do, which is really bad for a story that is supposed to be about these same characters. I haven't touched any of the other fics in close to a year.
2017-08-25 01:37 am
Entry tags:

Hong / Starman's story

I ficced up some background on the referee Starman, a minor character. I had wanted to tell his story in Season 1 but decided it wasn't a good fit, so this will probably all get cut. I could work it into Season 2. Read more... )

2017-08-06 02:21 am

The MacLeod House

I had a parody idea this morning that would fit into my Smash fanfic so I pounded it out. This would fit into Season 2, recruitment phase, episode 3 or 4.

Scene: A suburban household

An average modern suburban house is full of rowdy girls playing around and one woman trying to control them all, with a baby in one arm and a phone in her other hand, as she is on the phone to somebody about placing orphans in foster care or public school.

She is repeatedly interrupted. To the girl cooking in the kitchen, "careful with the eggs!" as they roll toward the edge of the counter. To the girls chasing each other in the hallway, "Slow down in the hallway!" The doorbell rings. "Could somebody get that?"

One of the girls opens the door. Outside stands a 12-year-old boy with a serious expression on his face, slicked blond hair tied back in a ponytail, wearing sunglasses and an oversized trench coat that spills onto the ground around his feet.

The boy speaks in an odd accent that is like French and Scottish smashed together. "Hello. I am looking for the orphanage."

The girl calls over one of the teenagers, "Hey {$NAME}, I think your new boyfriend is here."

The teenager rushes over. "He's here?" She looks. "That's not him."

The boy questions her. "Would you be the lady of the house?"

"Umm..." both girls hesitate before calling over their foster mother. "Mom!"

She walks over. "Hello, may I help you?"

The boy: "I seek room and board for a fortnight."

Mom: "Ah, we are an orphanage-"

The boy: "I am an orphan. My parents died" - (dramatic pause) - "a long time ago."

Mom: "I am so sorry. The orphanage is all girls right now, but we _could_ make room for you."

The boy: "That is acceptable."

Mom: "What is your name?"

The boy: "I am Abraham MacLeod, of the clan MacLeod."

Mom: "It's nice to meet you, Abraham. Come on in and introduce yourself."

As the boy steps up to the doorway, we see the tip of a scabbard hidden under his coat. Read more... )

2017-07-04 08:01 am
Entry tags:

Elvish, a new Unix shell

Via lobste.rs, the Elvish shell:

Pipelines in Elvish can carry structured data, not just text. You can stream lists, maps and even functions through the pipeline.

Not too long ago I was thinking that shells should bring in high level language features and pipes should be matched with data types. It sounds promising.

2017-06-09 02:06 am

Webcomics list 2017

It's time to update my webcomics list. Read more... )

2017-06-08 10:28 pm
Entry tags:

Optimizable Malleability, and other thoughts

Optimizable Malleability

The life of a productive environment may look like:

  1. High malleability - you can do almost anything, with few restrictions.
  2. Exploration - certain workflows are found to be better than others.
  3. Optimization - simplified interfaces increase productivity while leaving out lesser-used features.
  4. Stagnation - The existence of a standard way of doing things discourages the development of alternative ideas.
  5. Replacement - Somebody invests a new system that replaces the entire old system.

Examples of malleable systems and optimized systems:

  • Assembly language lets you do anything, leading to goto spaghetti. C gives you formal looping and function call patterns along with a subset of assembly's features. Higher level languages have additional formal implementations of common programming patterns and lack some of C's features to prevent entire categories of bugs. Driver writers and OS programmers still need the lower-level features, but 90% of programming can be done without them.
  • Text files allow you to store data in any format. Every Unix tool invented its own text file format. INI, CSV, JSON, and XML are types of text files that are optimized toward storing certain types of information.
  • Tail call recursion is an optimizable subset of recursion.
  • Excel lets you freely place data without structure. Access requires you to define the structure first.
  • Static typing versus dynamic typing. A language could be dynamic by default with optional static typing and optional type constraints. In this case the optimized system (static typing) came first and the malleable system came later.

Stagnated systems and their replacements:

  • Why aren't webforums based on Usenet/NNTP? The environment of HTML+SQL allowed for the development of alternatives at a lower cost.
  • Why don't new languages use object files? The burden of compatibility is not worth it.
  • Why aren't most programs made of shell scripts? Fewer features, security concerns, etc.

Reconsidering the notion of a "program"

Let us view the entire operating environment as a set of mechanisms for directing input to a function.

Consider the command line shell.

  • The user provides the program with representations of the function's arguments. The arguments are not passed directly, but you provide a string that represents the argument. Code inside the program converts the string to a filename or URL, parses the data, and provides that as the argument to the function.
  • The program provides standard input and output methods, using pipes
  • The program may allow the user to set the initial state of the program, using switches

We could say that a program is a wrapper that sets state, has the standard input and output, and provides access to the desired function(s). Let us consider a future operating environment that separates these tasks.

  • The future system could automate the generation of wrapper code.
  • The future system may use dynamic type casting, late binding, just-in-time compilation, etc to rewrite part of the program based on the user's input.
  • The future system might allow the caller to directly set global variables / class members by name, doing away with the need to parse switches.
  • Inputs and outputs may be something other than raw byte streams. The pipes may have a class type. The system may provide a standard iterator for a given type and handle casting automatically. The standard Unix tools may be rewritten to work on interfaces.

Incomplete classes and comprehensive dynamic typing

Consider the evolution of classes.

  • 1970s - C - A struct is, basically, a way to arrange data
  • 1980s - C++ - A class is, basically, a way to arrange functions around the data they operate on
  • 1990s - C#/Java - An interface is, basically, a definition for a set of functions that we will expect any given type to implement.

The struct, class, and interface are all key/value pairs.

Consider the function:

sub doStuff(x){ return x + 1 }

In the "message passing" concept we might consider x:Dynamic and expect the runtime to check whether the given x has a ._plus() method at call time. (A more complex system could check for this when the object to be passed as x is known.) In the "interface" concept we might check that x implements the INumeric interface which includes a ._plus() function. "INumeric" is a way of saying that a dynamic type will implement a standard set of methods, what C# calls a contract.

An interface might be seen as an incomplete data type. An incomplete data type might be seen as a type of filter. A data type filter could describe the partially resolved value of a dynamic type, or could be used to implement very strict typing.

interface IPercent:UInt8 {
  _value = 0..100 // Value is between 0 and 100 inclusive 
} 

interface asdf {
  foo:String and len = 0..8 // .foo will be a string whose length is > 8
  
  // let's propose something outrageous... 
  baz: fnord(_) between &("camel"), dronf("llama") and & > 3 
  // * we will have a .baz member
  // * the namespace will also include functions fnord() and dronf()
  // * the result of fnord(baz) has a comparator that puts its result
  // between the results of fnord("camel") and dronf("llama"),
  // * and the value of fnord(baz) will be greater than 3
  // * or else the program throws a type mismatch exception,
  // preferably at compile time 
} 

This would be of little use to a programmer, but might be useful to a compiler, runtime, or IDE.

// as written by the programmer
function doSomething(futz): 

// as interpreted internally 
function doSomething(futz:{
  foo:String = "foo" // string with a known value 
  bar():Int // an undefined function that returns int
  } 
)

The same sort of filter or incomplete class can also be used as a search object.

interface SalariesOver30000:Employee { 
  salary:Numeric >30000   
}

select SalariesOver30000 from Employees // pseudo-sql

Function constraints

A compiler could theoretically determine that it is impossible for a function to do certain things:

  • a given function may not modify its inputs
  • the function may not make any asynchronous calls
  • the function may not open any additional inputs or outputs
  • the function's inputs may have values known at compile time or runtime

A compiler could potentially use this information to optimize the function, possibly running it at compile time if enough information is known.


My TODO list for language design is to look into:

2017-02-06 03:41 pm
Entry tags:

A lesson in meaningful variable naming

A variable representing a link to a website might be called $url or $link or $site. Take this project I'm working on. At one point in the code the variable might be called $url. At another point it is $link. Further on, it is $site. I want to reach back across time to my younger self and slap him the face and scream at him and impart a lesson on the value of maintaining a consistent naming convention.

So let's say $site represents a link to a website except when it doesn't because I am also using $site as a unique key to represent a website in the general sense that "this website contains web pages". For this purpose I send $site through a filter that strips out the protocol and leading www. and the ending index.html if it exists. This means that $site is not the same thing that it used to be. So $site and $link actually are two different things with two different meanings. They should be two different variables.

I fixed a few bugs just by noticing that the meaning of these variables was not consistent.


In the same program I have two variables $sites_visited and $destination_count that seem to have a similar purpose.

$sites_visited is:

  • set to 1 when process_site() is run
  • checked when recursing into new sites
  • was sent to process_site_results() in an earlier version, but this is commented out

$destination_count is:

  • increased by 1 when process_site() is run (this is a bug)
  • increased by 1 when a site's list of links is finalized
  • used by process_site_results() to determine whether the site should be included in output.

So both of them are set to true when a site is processed and were intended to be used to tell if a site is worth processing. However, they mean different things.

  • $sites_visited is true when a site has been fetched and processed.
  • $destination_count counts the number of times a site has been linked from another site. It is nonzero (true) before the site is fetched or processed.

So they remain two different variables because they account for different concepts.

2017-02-05 07:23 pm
Entry tags:

Quick thoughts on multiple inheritance

Has-A pattern:

class MyClass { 
 FooType foo;
 BarType bar;
}
  • each MyClass allocates space for a FooType and a BarType.
  • foo and bar establish their own namespaces.

Inheritance:

class MyClass extends FooType, BarType { }
  • each MyClass allocates space for a FooType and a BarType.
  • The namespaces for FooType and BarType are incorporated into the MyClass namespace.

So what's the problem? Something in FooType or BarType might overlap.

General outline of a solution:

  • All namespace conflicts must be resolved by the programmer.

Considering specific examples:

1. Both FooType and BarType have a .x property?

  • Solution 1: Forced upcasting. All attempts to access MyClass.x must be upcasted to the parent. All parent methods work on their own .x property.

2. Both FooType and BarType have a .fooMethod()?

  • Solution 1: Forced upcasting. The compiler should warn if the programmer fails to resolve the conflict, and throw an error if the programmer tries to run MyClass.fooMethod() without overriding it. This can cause problems (see case 4).

3. MyClass has its own .x property?

  • Solution 1: Override parent access methods. If the property is interface-compatible with the parent's .x property, the FooType/BarType methods will run on MyClass.x instead of their own .x properties. If the property is not interface-compatible with the parent's .x, the compiler should throw an error and refuse to compile. PROBLEM: FooType and BarType may intend for their .x property to mean different incompatible things or to hold separate pieces of information. Sharing the same piece of data will introduce bugs.
  • Solution 2: Do not override parent access methods. Parents continue to operate on their own .x properties.

4. MyClass has its own .fooMethod()? Theoretically, this should override the FooType/BarType methods. However, it introduces a double-call problem.

  • Solution 1: Override parent methods. This introduces a double-call problem. If both parents have a method called every second that calls their own fooMethod(), this causes the overridden fooMethod() to be called twice per second instead of once per second.
  • Solution 2: Do not override parent methods. Parent calls to fooMethod() will call the parent version of fooMethod().

Conclusions

More thought needs to go into this.

  • Multiple inheritance is fine until you have a namespace collision, and then you're in trouble.
  • If you have the parent classes share data when both have a .x property, then you have the problems that each might treat .x as a different conceptual thing and that conflicting actions on the same .x may introduce race conditions that do not exist when each class uses its own data.
  • If you do not have the parent classes share data, then you have multiple copies of what might be the same conceptual thing, updates to one do not affect the other, and the state of ".x" is unclear.
  • If the child class .x overrides the property for both parent classes, then you risk the parent methods modifying the data in ways you did not intend.
  • If the child's .foo() overrides the method for both parent classes, then you might get a double-call problem when methods in both parent classes call their overridden .foo() method.
  • If the child's .foo() does not override the parent method, then you lose the ability to extend the parent class by having its .foo() method do something different.
  • The programmer may want to resolve namespace collisions in a different way for different properties and methods in the same class.

2017-01-31 01:58 am
Entry tags:

Revisiting a pet project

Gee, I think this software of mine is close to ready for release. I just need to brush it up a little.

... (create a todo list ... it's half a dozen things)

... (open the file, and there's a list of another half dozen things to do)

... (there are several known bugs that have no discernable cause)

... (none of the functions are documented and I cannot tell what one of them is supposed to return)

... (making it run well will require repeatedly rerunning it and massaging input data files)

... (it produces no output when given the same input that had produced good results the last time I had worked on it)

... (the file is still named test.pl)

This might take more time than I had thought.

2017-01-27 05:18 am

The best spam that I have received in a while

This appeal ended up in my inbox:

(If you are not the person who is in charge of this, please forward this to your CEO, because this is urgent. If this email affects you, we are very sorry, please ignore this email. Thanks)

We are a Network Service Company which is the domain name registration center in China.

We received an application from Huayi Ltd on January 16, 2017. They want to register " hfb " as their Internet Keyword and " hfb .cn ", " hfb .com.cn ", hfb .net.cn ", " hfb .org.cn ", " hfb .asia " domain names, they are in China and Asia domain names. But after checking it, we find " hfb " conflicts with your company. In order to deal with this matter better, so we send you email and confirm whether this company is your distributor or business partner in China or not?

Here is a link to my "company" that distributes HFB. In fact, you can look at all of the HFB that I am distributing.