• A modern website is a complex system of inter related pieces. Each of which must work correctly and communicate correctly with the other parts of the system.

    As website creators, we break the design into the Frontend and the Backend. The front end is anything the end user sees, while the back end is responsible for generating content to be displayed.

    The backend is further subdivided into the Model, Controller, and View. The model is our term for the database and database access. The controller is the rules for the website. The view is the creation of content to be displayed.

    Consider a website that allows you to purchase an item. The “model” would describe that item. SKU, size, weight, cost, price, images, description, name, and much more. The “controller” encodes the business rules. We can only ship to people that have paid us. And the view turns all the information into content for a browser to display.

    The content is delivered as HTML. We can also supply JavaScript code and Cascading Style Sheets. The HTML can have the JavaScript and CSS embedded in the HTML or the HTML can link to other resources to be included with this page.

    HyperText Markup Language

    The US government wanted a standardized way of creating electronic documents for printing. This was the Standard Generalized Markup Language, ISO8879.

    SGML has the advantage of being very application-specific. If you are writing a book, you use one set of tags, if you are creating the Message Of The Day, you use a different set of tags.

    The power of markup is that you describe what you are marking up, rather than formatting whatever it might be.

    Consider and address. Bilbo Baggins, 999 Bagshot Row, Hobbiton, The Shire. As written in this sentence, it is just a row of text. You could write it that way on a letter and it would be delivered, but the postman would be unhappy at the formatting

    <b>Bilbo Baggins</b><br/>
    999 Bagshot row<br/>
    Hobbiton, The Shire<br/>

    Is the address formatted, which looks like

    Bilbo Baggins
    999 Bagshot row
    Hobbiton, The Shire

    Using DocBook, a particular version of SGML, we would write that same address something like:

    <address><surname>Baggins</surname><givenname>Bilbo</givenname>
    <street>99 Bagshot row</street>
    <city>Hobbiton</city><state>The Shire</state>
    </address>

    We do not know how to display the address, but we know that it is an address. If we are provided rules on how to display addresses, we can display this address per the rules.

    Structure

    HTML was designed to be simpler than SGML. There are fewer tags, and the fixed meaning of the tags made it easy to write HTML by hand.

    Almost every post I create is written in raw HTML. That HTML is then styled and displayed in nearly pretty ways.

    HTML defined the structure of the document. The structure was of a header section, describing the page, and a body section with the actual content.

    Within the content section were the different displayable content. You had headers, levels 1 through 5, you had numbered lists, unnumbed lists, and definition lists (a word with an attached definition). There were paragraphs, links, tables, and finally, there were images.

    This content was rendered however the browser wanted to.

    There were formatting tags for bold, italics, blinking, and not much more.

    If you wanted to “layout” your webpage, you used tables and fought to get things right.

    Cascading Style Sheets

    CSS allowed us to provide styling to an element. The paragraph above has margins, padding, and boarders applied to it. It has colors applied for the background and for the font. All are set via a style sheet. Your browser has a default style for each element.

    The problem that arises is how to attach that styling to particular elements. The answer starts with the structure of the document.

    p {
      color: red;
      background-color: green;
      margin-left: 50px;
      border: 2px;
    }
    

    This uses a CSS selector, ‘p’ to locate all paragraph elements. It then sets the background to green, the font to red, moves it to the right 50px, then draws a 2px solid border around the paragraph.

    This is a basic selector. Selectors get very complex.

    DOM

    Every element in an HTML document is loaded into the DOM. From there, we can select elements and modify the style of the element with CSS and CSS Selectors.

    The simplest method is to give important elements an ID. IDs are unique for a DOM. If there is more than one element with the same ID, this will generate an error, which most people will never see. The rules tell us which element will own that identifier.

    To find a particular element with a particular ID you use the ‘#’ symbol. Thus, to find the header just above, we would write “#DOM”. While the header would look like <h3 id=”DOM”>DOM</h3>.

    We can add a multiuse identifier, called a class, to multiple elements at the same time. <div class=”quote”> is the code I use to create a quote. The class “quote” has a CSS group attached. This causes all the divs of class quote to be rendered as a block quote.

    We then have the tag selector. We used one above with the “p” element. This allows us to select all the elements of a particular type. The selector “li” would select all the list items in the DOM. We could use this to make every line italic.

    We can combine selectors to limit which elements are selected. “ul>li” would select all line items of unordered(without numbers) list, while “ol>li” would select all line items which were part of an ordered (with numbers) list.

    These selectors can even allow us to move through the DOM in a structured way. We can ask for the first paragraph after a header for special treatment.

    DOM Manipulation

    When we load JavaScript on a web page, that JavaScript can watch for events on elements. This is done by locating an element with a selector, then watching for a particular event to take place on that element.

    The JavaScript can then modify the DOM. This can be by changing the structure of the DOM, or it can be modifying the style of elements in the DOM.

    A recent example of this, I added a class to some table data items (td). I did it with a class. I then found all the elements with that class and watched for a mouse click on those elements.

    When the click was detected, my JavaScript ran. The JavaScript grabbed the contents of the element, stripped out formatting, then put that content into a text input box, displayed the text input box for the user to edit.

    When the user completed their edit, the value they entered was formatted, the input was removed from the DOM. The formatted value was then placed back in the element.

    All with a bit of good selection to make it work.

    Finally, Selenium uses different types of selectors to find elements for manipulation or testing.

    Very powerful stuff.

  • This is boring geek babble.

    Quality Assurance is not something computer nerds are good at. It is boring, repetitive, and difficult.

    That doesn’t mean it shouldn’t be done. Instead, it means that you need somebody to do QA for you. You cannot do QA on your own. You won’t see your own errors.

    Consider a simple unit test. You have just created a new model (database table). You know you have created it correctly. Some of that is because you trust the infrastructure you are using, but mostly it is because it has worked in the past.

    To do a proper unit test, you would need to verify that you can read and write an object of that model. That each functional manipulation does what is should, and that all possible options into the functional unit works.

    In the past, I would test student programs that did simple math. For example, they would write a simple four function calculator. I’m the ass that would get their calculator to attempt to divide by zero. They had to handle that case.

    The thing that happens, is that as we are developing new code, we test that code, extensively. We know what we are adding and what it should do. We don’t “retest” what we know is already tested and working.

    Last Tuesday, that nearly broke me. I had tested my code, was getting ready to deploy the code. Before deploying, I was doing some testing. It wasn’t until I clicked on a link that went to a page I was not going to be testing that I discovered a major error.

    I wasn’t even planning on looking at that page.

    Here is another example, you have a standardized header for your website. If you check it on one page, why should you test the header on every page? It should work the same. So you don’t test it on every page. Except that there is one page that doesn’t set a context variable, so it causes errors on the page. Because you didn’t test that particular page, the error is missed.

    This is where unit tests are a win. In theory, you write a test for every part.

    Currently, I’m working with Selinium, This is an API that interfaces to an actual browser. This allows you to control the browser via code.

    The basics are you write code to find a page element, you can then verify different aspects of the page.

    I’m currently writing code to test the left column. The left-hand column is on almost every page of the website. In the past, I’ve verified the parts of that column I’ve been working on. I haven’t verified the entire column since I first created the site.

    Using Selenium, I am able to run the same set of tests against the left column on every page. I can also verify that every menu item opens and closes. I can exercise the entire website.

    Because it is so easy to do this, I can just run the tests every time, giving me better results.

    Of course there is a learning curve. Of course it takes a different mindset to do these tests. Regardless, it is worth it.

  • The games people play…

    Consider the following, a plaintiff comes to the district court with a challenge and a request for a summary judgment. The court looks at the filings by the plaintiff, agrees the plaintiff is in the right. The court grants the summary judgment.

    At that instant, the defendants will appeal to the circuit court. They will request an administrative stay pending the court deciding if a stay pending appeal is warranted.

    The administrative stay is supposed to be very short.

    In one of the cases coming out of the D.C. District Court, the inferior court granted a temporary stay on a government action. The TRO then granted the plaintiff the relief they wanted as final judgment. The government appealed to the D.C. Circuit court, which said, “You can’t appeal a TRO, even if it is acting like a preliminary injunction or summary judgment.” The government then appealed to the Supreme Court.

    The appeal was presented to Chief Justice Roberts, who granted an administrative stay. This required almost no argument, the papers filed by the petitioner were enough. When SCOTUS heard the petition for a stay of the TRO, the Court denied the stay because the TRO had already expired, and thus the petition was moot.

    If the appeals court denies the stay, the defendant can then appeal to the Supreme Court for a stay pending the outcome of the case.

    The point of all of this is that a summary judgment can be appealed up to the Supreme Court.

    A Temporary Restraining Order is a temporary injunction. It is supposed to pause actions until a hearing for a preliminary injunction is heard.

    Since it is such a short-term instrument, it is not (normally) appealable.

    These inferior court judges are granting TRO’s against the government that act more like preliminary injunctions than TRO’s.

    Winter Factors

    The Supreme Court, in the Winter opinion, gave clear guidance on when an injunction or stay should/can be issued. These are known as the “Winter Factors”.

    The first factor is the likelihood of success on the merits. That is to say, is the party requesting the stay or injunction likely to prevail on the merits of the case?

    For example, if you are requesting an injunction on the IRS freezing your assets, you have to have a strong enough argument that you will win before the court will consider your request. Since it is unlikely you will win, no injunction will issue.

    This is the place where most Second Amendment challenges loose. The courts will determine that the plaintiffs (good guys) are unlikely to succeed on the merits, and will thus not grant the injunction.

    The second factor is irreparable harm.

    In general, if the party were to prevail with no stay or injunction, could they be made whole with a payment of money?

    Any suit involving money is very unlikely to create irreparable harm.

    For example, if you are fired, and you sue for wrongful termination, your loses can be made whole with payment for your lost wages. The courts do not consider secondary problems, only the primary. So if you were to lose your house because you defaulted on your mortgage, you might not get enough money to recover from that lose.

    The third winter factor is Balance of Equities. This is designed to balance harm. If the injunction is granted, one party will be harmed. If the injunction is denied, the other party will be harmed. If granting the injunction would delay some “good thing” to the harmed party, but denying the injunction would cause somebody to lose their home, the balance of equities swings to granting the injunction.

    The fourth factor is Public Interest. Is granting the stay or injunction in the best interest of the public?

    When any court disregards the winter factors, they are going rogue.

    In Second Amendment cases, the courts would often say that the infringement was “in the best interest of the public” and deny relief to the Second Amendment plaintiffs. They would do this, even if the other factors would lead to granting the stay or injunction.

    The Supreme Court has emphasized that a denial of a Constitutionally protected right is irreparable harm, that the balance of equities always tilts to those being denied their Constitutionally protected right, and that the public has no interest in enforcing unconstitutional regulations.

    Winter v. public interest

    The opinions issued by these rogue inferior judges often discard the winter factors. This is something that could and should be appealed. But a TRO cannot be appealed.

    This means that these rogue judges are doing their best to make these TRO’s as broad as possible and to last as long as possible to stop the administration’s policies from being effected.

    Judge Shopping

    There are almost 100 federal district courts with 677 judgeships, with a few more senior judges thrown in.

    A senior judge is a judge who is no longer in the lottery but still hears cases. I.e. A judge who is very near retirement.

    If you want to file a suit against a gun company, you can do no better than filing your case in the District Court of Massachusetts. They haven’t found an infringement they didn’t approve of.

    There is no combination of judges in the First Circuit court who would agree that any law was an infringement of the Second Amendment. They are so anti-gun that I don’t believe there is a single case where they found for The People in a Second Amendment Challenge.

    The attitude of the Supreme Court has varied. Unfortunately, it takes a very long time for a case to make its way to the Supreme Court.

    These bad actors are intentionally searching out judges that they expect will go rogue. There also appears to be a thumb on the lottery system used to pick judges for cases.

    Oh, when a case is filed, the judge assigned is picked at random via a lottery. A plaintiff can request that a case be assigned to a particular judge, if the plaintiffs believe that their case is similar to other cases the judge is or has handled.

    This is why one judge in the Southern District of New York got so many of the product liability cases against drug manufacturers. He’s the guy who decided that even if a person couldn’t prove which company manufactured the medication, he would portion out the penalty based on the market share of the different manufacturers.

    Consider a judge who found that the distillery was liable for crashes where the driver was drunk. He has 1000s of plaintiffs demanding money from the distillery.

    The problem is which distillery is at fault for a particular crash. The guys drinking rum and coke, which brand of rum did they drink? It is unlikely they know.

    So instead of forcing the plaintiffs to point to a particular “guilty” distillery, the judge looks at the market share of each distillery. If the penalty is $1,000,000 then the distillery with 50% of the market share of that class of product is responsible for $500,000 of the penalty.

    The little distillery, that is producing Don’t Drive Vodka, is so small they only account for 0.1% of the market share of vodka. They would be responsible for $1,000 of the $1,000,000 penalty.

    But what if 90% of the drivers that are drunk were drinking “Don’t Drive Vodka”? Wouldn’t that mean they should pay more of the penalty? Yes, it does mean that, but it’s not what this judge did. It was all about market share.

    California in Massachusetts?

    Why would the lead plaintiff, California, be opening a case in Massachusetts?

    Because they know that it is an almost certainty that they will get a judge with TDS.

    On March 10, 2025, the United States District Court for the District of Massachusetts issued what it styled as a temporary restraining order (TRO) enjoining the Government from terminating various education-related grants. The order also requires the Government to pay out past-due grant obligations and to continue paying obligations as they accrue. The District Court’s conclusion rested on a finding that respondents are likely to succeed on the merits of their claims under the Administrative Procedure Act (APA), 60 Stat. 237. On March 26, the Government filed this application to vacate the District Court’s March 10 order (as extended on March 24) and requested an immediate administrative stay. The application was presented to JUSTICE JACKSON and by her referred to the Court.

    Although the Courts of Appeals generally lack appellate jurisdiction over appeals from TROs, several factors counsel in favor of construing the District Court’s order as an appealable preliminary injunction. Among other considerations, the District Court’s order carries many of the hallmarks of a preliminary injunction. See Sampson v. Murray, 415 U. S. 61, 87 (1974); Abbott v. Perez, 585 U. S. 579, 594 (2018). Moreover, the District Court’s “basis for issuing the order [is] strongly challenged,” as the Government is likely to succeed in showing the District Court lacked jurisdiction to order the payment of money under the APA. Sampson, 415 U. S., at 87. The APA’s waiver of sovereign immunity does not apply “if any other statute that grants consent to suit expressly or impliedly forbids the relief which is sought.” 5 U.S.C. §702. Nor does the waiver apply to claims seeking “money damages.” Ibid. True, a district court’s jurisdiction “is not barred by the possibility” that an order setting aside an agency’s action may result in the disbursement of funds. Bowen v. Massachusetts, 487 U. S. 879, 910 (1988). But, as we have recognized, the APA’s limited waiver of immunity does not extend to orders “to enforce a contractual obligation to pay money” along the lines of what the District Court ordered here. Great-West Life & Annuity Ins. Co. v. Knudson, 534 U. S. 204, 212 (2002). Instead, the Tucker Act grants the Court of Federal Claims jurisdiction over suits based on “any express or implied contract with the United States.” 28 U.S.C. §1491(a)(1).
    Department of Education v. California 604 U.S. ___ (2025)

    The five Justices that wrote the unsigned opinion obviously thought the rogue, inferior judge, was playing games.

    The Chief Justice couldn’t bother to write why he dissented, but he did.

    Justice Kagan claims her dissent was because the government didn’t argue that what they did was legal. She entirely ignores the government’s merits argument, that the district court didn’t have jurisdiction, instead focusing on “irreparable harm” that involved money.

    Justice Jackson spent 15 pages on her dissent, with Sotomayor joining. Jackson also ignores the majority’s view that the government was likely to prevail on the merits, no jurisdiction, instead focusing on the inferior court thinking that the government’s termination of grants was somehow illegal.

    She argues that the TRO would be moot in a few days, so this wasn’t the right time to take up the issue.

    And finally, she thinks the government has to provide “meaningful explanation” of the cancellation of these grants.

    I still think she is a clown.

    Conclusion

    This is a win for the Trump administration. It is the Supreme Court taking a stand. They are calling this particular judge on these preliminary injunctions wrapped in the verbiage of a TRO.

    More importantly, that part where they say, …the Government is likely to succeed in showing the District Court lacked jurisdiction to order the payment of money under the APA &mdash, Ibid, that is a warning to the inferior courts that they need to reconsider if they have jurisdiction in these cases.

    The Supreme Court speaks in code. Lawyers understand the code. Courts understand the code. Those that follow the Supreme Court will often figure out the code. Leftist refuse to acknowledge the code.

    Rogue courts insist that the code means something different. All that you need to do to understand this is to watch a court twist one footnote into the most important part of Bruen while ignoring the thousands of words that refute the footnote.

  • We’re almost at the point in time when some of the seedlings you’ve planted should be going outside. Hardy greens like kale, cabbage, and chard will probably be able to weather the outside temperatures in the next week or two. This means there’s a lot of work to do!

    The first thing you need to do is start hardening off your seedlings. This is a long but simple process that ensures your new plants will thrive once they’re in the great outdoors. Now that we’re getting a few days in the high 40s and low 50s (and sometimes warmer), you want to pick a day that’s slightly overcast and warm, with not too much wind. Take your flats or pots of seedlings and place them in a wind-free spot that isn’t in direct sunlight, and let them bask in the natural light for about an hour. Do this at the warmest point of the day, just after noon, if at all possible. Then bring them all back in. Repeat this every day, adding an hour or so a day to the time outside, until your plants have developed stronger stems and secondary leaves.

    When the nights are all above freezing, you can leave your seedlings outside. Cover them up, though, because critters like raccoons and mice like to eat those yummy miniature plants. Once the plants are hardened off, you can wait for a nice, overcast day to plant your seedlings into the garden.

    Before that, though, you have to prepare your garden. If you’re going to be using buckets and/or bins of any kind, they need to be readied for use. This means cleaning them out, bleaching them (to kill any bacteria that could harm your plants or transfer to them), and then rinsing them thoroughly. Drill, poke, or melt some holes into the bottom of each container. This allows excess water to drain. Some people do it in the bottom of the containers, but I find doing it about an inch above the bottom, along the sides, works best. That way, excess water can still escape, but there’s a “well” below the holes that continues to hold water for the plants on dry days.

    (more…)

  • That New Car Feeling

    Well, a portion of the inheritance from my parents arrived. I gave myself a small amount and the wife. Money that wasn’t spoken for in other ways.

    The last few times I’ve needed a rental car, I’ve gotten a current version of my Toyota Tacoma. Every time I came away wishing I had a new truck.

    Then a few days after getting back in my truck, I would realize that I didn’t want a new Truck. What I wanted was the new radio/head end.

    So that’s what I got. A serious upgrade, It is an Alpine unit with Android Auto. I will be able to get in the truck and when I turn on the unit, it will hook up and give me navigation, calls, and music. Life is nice.

    And for much less than a month’s payments on a new truck.

    Boy they last a long time

    In 1967, my parents bought a VW Microbus. It had hauling capacity that a standard station wagon did not. It was the equivalent of today’s mom van.

    At the time, most cars were getting an astonishing 5 to 7 MPG. The VW got 20MPG. Given the amount of travel we did, this likely made a difference.

    They gave me that car when I turned 16. I drove it until 1987 when I traded it in.

    At the time I traded it in, it was on its third engine, its second gas tank, it didn’t have a working speedometer. The floor was nearly rusted through. Hell, it was rusted through. The aux. heater hadn’t worked in years. The main heater wouldn’t even defrost the windshields.

    The bumper was a replacement that my brother wielded up out of diamond tread.

    In short, it was at the end of its life. A year after I traded it in, I saw somebody driving it around town.

    My truck is 15 years old. At 15 it is in better condition than that VW was at 10. It is still on its first engine. There is no rust on it. I expect it to keep going for at least another 5 years.

    Lawfare

    We keep moving closer and closer to the administration telling the courts to pound sand until the Supreme Court Rules.

    It is sickening how inferior courts can find their way to always rule against trump.

    A stat I heard was that between 1900 and 1999, there were 22 nationwide injunctions issued. There were 87 issued against Trump in his first term.

    I believe I heard that there have been 30 so far in his second term.

    People Fall For This?

    I had numerous ads pop up because I purchased some computer stuff direct from China. Would you believe that you can buy a 2023 GMC Sierra for only $1,500? Sounds too good to be true.

    Looking at the listing, they only accept payment via Western Union or wire transfers. Yeah, too good to be true.

    And This

    A friend ordered a DVD he had been searching for over the last 5 years. It arrived. New In Box.

    Except it was just the box and book. No DVD. Amazon seller who was long gone by the time my friend received his package.

    Amazon is covering the costs, but still…

    Tariffs

    I spent the last two weeks adding tariff processing to a B2B e-commerce website. The Canadian was just frustrated at the extra work for him and having to finally track tariffs. He had just been eating the cost of tariffs for years, a part of doing business.

    In the meantime, I’ve been told that Trump’s tariffs are going to cost me thousands of dollars per year.

    I’ve watched videos of leaders in other countries say, “We aren’t going to take this from the USA!”

    One article pointed out that Vietnam has tariffs on the $10B they import from the US. Trump has put tariffs on the $150B we import from Vietnam. Isn’t it stupid that he did this to them?

    Question of the Week

    If the United States putting tariffs on imports is so bad, why is it good when other countries put tariffs on our goods.

    What do you think of this entire tariff thing?

  • Watching The Supreme Court is always frustrating. There is a tendency for things to take a long time.

    David Snope filed a petition for writ of certiorari on September 23, 2024. This will be the third or fourth time he has requested a writ of certiorari from the Supreme Court.

    It has been granted once, the ruling of the Fourth Circuit court was vacated, and the case was remanded back down to the Fourth for a do-over in light of Bruen.

    In November 2024, we were hoping that this case and Ocean State Tactical would both be granted cert. It did not happen.

    If cert had been granted by January 16th, the case would have had oral arguments in the fall, with the opinion issuing in August.

    As things sit, we might not hear the outcome of this case, if granted cert, until the fall of 2026.

    But there are things afoot here.

    First, the court heard Bondi v. Vanderstok and published their opinion on March 26th. This was not a direct Second Amendment Challenge, it was more of an administrative challenge. We did not win. Both Alito and Thomas dissented.

    Mexico’s lawfare case was heard. We will have an opinion on that before the end of the 2024-2025 term. This is a case where the Supreme Court can slap down the lower courts for abusing the Protection of Lawful Commerce in Arms Act.

    Snope is in regard to Maryland’s “assault weapons” ban. It is one of the many cases where the inferior courts have said things of the sort of “well, some arms aren’t arms under the protection of the Second Amendment.”

    Another case, with a docket that looks almost the same, is Ocean State Tactical challenging Rhode Island’s magazine ban. Here, the inferior courts have declared that magazines aren’t really arms under the Second Amendment.

    A third case has shown up on the radar.

    Antonyuk II is a Second Amendment challenge to New York State’s Bruen tantrum response bill.

    The heart of this is New York designating almost every part of the state a sensitive place. Even though Bruen explicitly said that the state couldn’t declare Manhattan a sensitive place, just because there were cops and people there.

    All three of these cases are being discussed by the justices, again, this Friday. If we get lucky, we will hear some movement on Monday.

    At this point, my tea leaves are missing, my crystal ball has clouded up, and the wife won’t let me sacrifice a chicken to read its entrails.

    I haven’t a clue what the justices are going to do. I am holding out hope.

  • The art of the emotional appeal, aka “emotional blackmail,” is usually mastered by around age 3. The first time your child’s chubby little hands rise up and they pout, saying, “Pweeeeeze?” you can feel it, that tugging of the heartstrings. As responsible adults, it’s our job to teach our offspring (and local offspring in our vicinity) that you can’t get everything you want, and sometimes the answer is going to be no.

    Saying no isn’t something that comes easily to the current crop of newly minted adults out there. Those who fall between the ages of 25 and 35 seem to have no concept whatsoever of “no” or “FAFO.” They’ve essentially never “found out” about anything, because they so rarely hear the word no.

    While I don’t always put a lot of stock into certain theories of civilization, there’s one going around that seems to have at least some grasp on reality.

    Ingraham, Eli. (2024). Land and Forgiveness: How One Woman’s Dream to Free the Land is Breaking New Ground. Interdisciplinary Journal of Partnership Studies. 11. 2. 10.24926/ijps.v11i1.6140.

    I don’t know if the dates are accurate, but it does seem to be grounded in factual research. Excuse the article I pulled it from; it was the only one with a decent enough graphic explaining it. The article is horrid, poorly written (imo), and not well grounded. But the theory that Ingraham’s study is based upon is real, and not too bad. If you want to really go down the rabbit hole, check out this post by Noema. You don’t have to do that, though. The graphic does a fairly decent job of making it easy to understand.

    The general idea is that society, civilization as a whole, goes through these multi-stage cycles that last somewhere between 180 and 280 years in length. This is borne out by history, which does indeed seem to follow such cycles. They’re not perfect, but they are present, and they can be seen quite clearly. Drop in the history of Greece, and it fits. Rome, it fits. Early China, it fits. And so on.

    The theory, followed through for America, states we’re in the end stages of one complete cycle. This isn’t too difficult to believe, considering we’re 248 years old as a country. Things were bound to break. After all, no one had previously attempted to run a country under a President, an elected official, prior to America. Our Constitution was radical in the most vast understanding of that word. The fact that so many other world leaders are now attempting to use our methods to run their countries is a testament to how well it has worked.

    The thing is, though, I believe our Founders knew it wouldn’t work forever, as given. That’s one reason why they created the Constitution. It was created in such a way as to allow We The People to change and ratify it, as we became better as a People, and as we matured as a country.

    (more…)

  • Love it or hate it, project management is a thing. It has to be there. If you don’t think it is there, you are just doing it badly.

    Project Managers are a different kettle of fish. Some need to be boiled alive. Others can just dance on hot rocks. And a very few can sit at the big boys’ table.

    I’m coming off the end of a rush project that was big. I had to take a customized system and add tariffs to it with about 14 days from concept to deployed. More than a little to get done.

    When I started programming, I had a choice of an 8080 with a 24×80 character display, or a 6502 with a 24×40 character display.

    When I was introduced to JOVE, Jonathan’s Own Version of EMACS, I fell in love with it. Multiple views into the same file, the ability to copy and paste from different files or different places in the same file. And auto indentation.

    Powerful stuff for the time.

    My fingers worked will with vi and later vim because I played Nethack and before that, Hack. The programs had a particular key set for moving the cursor based on the key caps of a terminal type used at MIT.

    The author had never seen a terminal without arrows over the J, K, H, and L keys. To give you an idea of how ingrained those are, I had to fire up vim and tell my fingers “down”, “up”, “right”, and “left” to record the keys for this sentence. My fingers know, I don’t.

    Besides jove, I learned emacs. Emacs is my programming editor. It is what I use when I need to write a lot of code or text. With modern computers, it starts just as fast as jove ever did on a 68020 class CPU.

    The problem we had was keeping track of what needed to be done or fixed. This might start off as a document, written with jove in troff. This could be fed to different processors to create PostScript files to be sent to our printers.

    Later, some of us used LaTeX for the same thing. Your “design document” was a separate file that was “fixed” before you started coding. These documents never contained more than brief pseudocode and discussions of algorithms.

    As you were coding, if you discovered something, you created a comment and marked it. The two most common marks were, XXX which meant that the code was broken in some way, but it didn’t need to be fixed now. All XXX marks had to be addressed before the code could be released.

    The other mark was TODO. This was working code but needed some features or extensions added. These did not need to be fixed before release.

    In general, we used grep to find all these markers in a list of files. It wasn’t difficult.

    The small program I’m working with has some 250k lines of code. After 3 or 4 years of supporting this site, I would say I’ve looked at every line of code in the system.

    Finding every marker in 4100 files across 1200 directories is a pain.

    Enter Kanban

    Kanban is a project management tool. The concept is easy enough to do with sticky notes and a white board or notes with push pins on a larger bulletin board.

    Today, the normal Kanban has 4 columns to hold cards. The cards are labeled, “backlog”, “To Do”, “Doing” or “Working”, and “Done”.

    When you create a card it goes into the “backlog” column. These are issues or tasks that have no resources assigned to them.

    Once per week, there is a meeting of the workers and the project manager. In this meeting, the project manager evaluates the cards that are in the “Done” column. If they are truly done, then they are removed from the board and added to the QA project.

    Cards that are in the working column stay in the working column. Cards that are in the working column can be moved into the backlog column if some other card blocks them.

    For example, if you have a card that says, “Put new tire on left front wheel” it cannot be worked on until the card that says, “Purchase a new tire for the front left wheel.” Until the purchase card is completed, you can’t work on the installation card.

    If there are any resources (workers/developers) that think they are going to need more tasks to work on, the project manager will take cards from the backlog column and move them to the To-Do column.

    When a worker requires more work, they move the card from the To-Do column to the working column. When they complete the card, they move it to the Done column.

    I’ve used Kanban in the past. It never really appealed to me as it didn’t feel any different from the old ways of doing things.

    For this latest project, I used my Kanban board.

    Instead of putting markers in the code, I opened a new issue. That issue just went into the “backlog” column. I could tag the issue as a bug or a feature. I could indicate that cards were blocked. It was faster to create the issues/cards than to make entries into the files and then try to locate them later.

    Today, I’ll be looking through anything in the QA column and writing unit or web tests for them. I’ll also be doing a QA across the site, to add to the project board.

    The biggest thing for me was the ability to visual see what still needed to be done.

    Conclusion

    Good tools make the work go faster.

  • You may ask yourself, why is Allyson posting up songs from 1967 that weren’t even popular back then? Listen to the song. Sure, it’s a song about Snoopy. No question at all.

    It’s more than that. I’ve been listening to bunches of OLD music (defined as pre-1970s, thank you very much… you know, EARLY 20th century) of late, and this one really struck me. On the surface, it’s just a silly song about Snoopy, our beloved cartoon dog. The lyrics aren’t particularly smart, but they scan nicely and the song is fun to sing.

    But the Red Baron was a real person, and he really did take down 80 aerial combatants in 1917. Of course he wasn’t stopped by Snoopy; his plane was shot down by a combination of RAF pilots and Australian ground gunners. He was killed by a single bullet, and went down near Vaux-sur-Somme, France.

    So why this silly song? Because it harkens to a time when this country actually cared about its position in the world stage. If the actions of Hitler in the 30s and early 40s were to happen today, we would do nothing. Today’s generation isn’t interested in fixing those kinds of wrongs. To misquote Karoline, the people in France would be speaking German. We can see this all around us. There are plenty of places where heinous things are going on, and we’re just not involved anymore.

    I’m not sure we should be, because America managed to get itself listed as the world’s police, and that’s not a good thing. But at one time, when we stood up the enemy nations cowered with fear. Today, they just shrug and go back to messing with little girls and silencing women and killing the innocent.

    There is hope. With Trump currently in office, military enrollment is up, exponentially. We see world bullies quietly standing down and skulking off to the shadows once more. The question is, can we keep it up? There is hope, but it’s going to take more than Trump’s four years in office to make it real.

    I want to live in a world where we can make slightly off color jokes about stuff, and have folks chuckle. Most of the music I’ve listened to in the last five days would NEVER be permitted on the radio today. Too sexist, too racist, too … whatever. But they’re fun, and light, and frankly, no one gets hurt by listening to them.

    So here’s to a world where we can cheer on Snoopy, and be proud of our troops, and stand up for freedom in our country… and then, when we’re in a better place at home, for freedom elsewhere.

  • Everyone in my house loves stir fry. I do all kinds of stir fry dishes, too. I make a great coconut Thai curry, and my ginger soy poke bowls aren’t bad either. Recently, I was in a mood for noodles instead of rice, though, and I went looking and found a recipe for using ramen noodles in a stir fry. This is my take on that!

    Ingredients:

    • 3 tbsp regular soy sauce
    • 3 tbsp dark soy sauce
    • 3 tbsp hoisin sauce
    • 1 tbsp oyster sauce
    • 1 tbsp rice wine vinegar
    • 2 tsp sriracha or sweet chili sauce
    • 1/4 tsp white ground pepper
    • 3 packages instant ramen noodles (discard flavor packets)
    • 1 lb skinless, boneless chicken breasts, diced
    • 3 tbsp vegetable oil, divided (see recipe)
    • 1 cup diced red bell pepper
    • 1 cup sliced white button mushrooms
    • 1/2 cup diced sweet yellow onion
    • 1 cup broccoli florets
    • 1 tbsp fresh minced garlic
    • 1 tbsp fresh grated ginger
    • 2 thinly sliced green onion
    • 1/2 tbsp toasted sesame seeds

    In a small mixing bowl, whisk together the soy sauces, hoisin, oyster sauce, rice wine vinegar, sriracha (or chili sauce) and white pepper. Set aside.

    In a large pot or saucepan, bring 6 cups of water to a low boil. Add the noodles to the water and cook for 2 minutes only (you just want to soften them). Drain and rinse the noodles in cold water to stop the cooking process, then set them aside.

    Heat a wok or other nonstick pot to medium high, and add a tablespoon of oil. Add in the diced chicken breast and cook for 4 to 5 minutes, until the chicken is thoroughly cooked. Remove the chicken pieces and set them aside. In the same wok, add the remaining 2 tablespoons of oil and let it heat up. Add in the bell pepper, mushrooms, and onions. Cook until the onions and peppers are tender but still toothsome. Add in the broccoli and continue to cook until it turns a vibrant green. Toss in the minced garlic and grated ginger, and cook for an additional minute.

    Return the chicken to the vegetable mixture and stir to combine. Turn off the heat but keep the wok on the stove. Add in the cooked ramen, and then pour the sauce over everything. Use tongs or two forks to toss everything together. Be sure to get the sauce on everything.

    Garnish your stir fry with the thinly sliced green onion and the sesame seeds. Serve this while it’s still hot.

    Notes:

    We don’t use peppers around here because of allergies. I substituted in some thinly sliced carrots instead. You could really go with any combination of vegetables for this (or any) stir fry, but do keep it simple. The sauce is the star of this show, and too many vegetables will take away from its glory.