I'm sorry Internet, I'm part of the problem.
I made a video of my cat chasing the shadow of her tail. It got posted to a social media site. I have contributed to videos of kittens.
I made a video of my cat chasing the shadow of her tail. It got posted to a social media site. I have contributed to videos of kittens.
After too many years of femtoblogger succumbing to PHP language drift, I’ve been idly reimplementing it in Go.
I’ve been through several iterations wherein I tried to force sophisticated abstractions onto Go, with rather poor success. I finally realized that Go deliberately eschews abstraction. I gave up abstracting and just wrote out the code in as many minor variations as required to do the job, and it was a much more pleasant experience.
In the end I’m looking at about 2,000 lines of Go (not counting imports I didn’t write) which has most of the functionality of the 3,000 lines of PHP. So, within a power of two, they appear to be a wash.
femtoblogger has gained some important ground:
It is statically type checked. Typos and errors won’t be lurking around to explode at run time.
I have an executable which will continue to run until I break it. No more will the web site disintegrate when I update PHP on the server because the language drifted or a Debian packager changed a setting.
I feel better about its security. PHP always made me slightly nervous.
I’ve ditched WYSIWYG editing for markdown. The HTML folk have had plenty of time to make editing work, it’s not my problem if they can’t get their act together without thousands of lines of Javascript repair code.
So here’s to another 7 years of femtoblogger. Who knows what I’ll rewrite it in when 2021 comes around.
Safari is odd with contentEditable divs. It doesn’t assume you will have a pre-formatted div as a container so it puts each line into its own div… sometimes marked with code class, sometimes not.
That makes a mess but is tolerable, until my HTML sanitizer burps out the clean version with newlines between the divs and causes accidental double spacing.
I could rewrite the ->saveHTML() method of the PHP DOMDocument to not put newlines in between divs, but that would give awful looking HTML.
For now I added a function to the sanitizer to remove extra divs from inside code formated divs. It tries to be smart about inserting newline characters, but it may not be smart enough.
Someone should revisit the whole contentEditable thing and specify precisely what is to meant by all of the operations.
femtoblogger has reached that odd state for software. It works well enough that I am happy using it. There are rough edges, but not rough enough that I will fix them.
The only thing I have changed recently is to add a meta robots tag to suggest the aggregate pages, like the front page and archive months, not be indexed. That should help keep the clicks on target. I already had robot tags to deter indexing of all the non-content pages.
There remain two rough points:
I suppose since femtoblogger has become stable it is time to move it into a public subversion repository.
I’ve added a few features today.
And now 4 days later.
I noticed that the Opera browser rocketed up to 38.4% of my hits. A quick dig of the logs shows that I am being drilled by bots that look to be trying to create link spam and masquerade as Opera browsers.
I suppose eventually they will have a human help them through the captcha and succeed. I have changed things about so untrusted users will get rel=nofollow tags on all their links. Maybe that will make them lose interest and go away.
I should probably make an RSS feed for comments while I’m at is so I notice when they get through the defenses.
Femtoblogger has just been rolled out to a corporate community of 150 users. Let the bug reports and feature requests roll.
Perhaps it isn’t fair, firefox 2 is the oldest of the browsers I am supporting, but could they make the editable html interface any less user friendly?
The editable region has to be in an IFRAME, I’d rather not restrict people to a fixed region of screen, but ok. Now the user clicks in the IFRAME to edit, but it won’t place the insertion point unless they happen to click on an element, so if you click in the bottom of the IFRAME you get no insertion point. That makes me create a special onfocus handler to place the insertion point someplace to get them started. Then in one final gesture of hostility, the insertion point placing code doesn’t work on an empty IFRAME, so I have to insert a nonbreaking space to open up a line for the insertion point (because a normal space gets an insertion point about 2 pixels tall.) All told, most of a day wasted to support bad decisions from the firefox coders. They should have tried to use it after they coded it.
A list of things that I might add to femtoblogger:
Femtoblogger now shows on IE7. Not too bad. It only took 2 hours to work out the layout problems.
The most severe is that max-width: 600px in the CSS file brings up a bug when used inside a table cell. The cell gets expanded as if there was no max-width so the table ends up expanding to fill the screen. All the articles were cowering against the lefthand border of the screen with the nav stuff still on the right. (Firefox does this too but only if you are clicking a link in a table cell. There went 120 minutes of my life for that one.)
My ultimate solution was to make IE use a width: 600px instead. There is now an IE only CSS file that is loaded after the real one and has a rule to patch that up. Thankfully the IE blokes must have known they were being a menace to society and they built a special comment hack into their HTML parser to let people cope.
<!--[if IE]>
<link rel=stylesheet type=text/css href=femtoblogger-ie.css>
<![endif]-->
… it would have been nice to have something similar in CSS, that would save a file and a download.
You can read more about this hack at CSS Hacks- The good, the bad, and the ugly- Conditional comments
Hi, apologies for disturbing you, but could you help me out?. My USDT TRX20 is in the OKX wallet, and the recovery phrase is <>clean party soccer advance audit clean evil finish tonight involve whip action ]. What's the process to transfer it to Binance?