The first step is to get authorized to use IRIS. To do this, you apply at the TCC portal. You'll have to sign in with your ID.me account, meaning creating an account if you don't already have one. This can be a bit of a challenge for some situations, but is pretty straightforward and you can call them easily for help. Then you select individual or create an organization, and fill out the form. This is easy enough, but note that most organizations will need two people to sign the application so another person will have to also make an ID.me account and sign. To sign, you'll enter your PIN. I had no idea what my PIN was and got initially concerned, but it's not actually a security feature or anything. All you have to do is go back to the main screen after selecting your organization and click "Modify PIN" in the navigation bar and you can just make a new one without any work.
One more thing to note is to be very sure before submitting the application. If you make a mistake (potentially with the other person who needs to sign), there's no way to correct it on your own after signing. You'll have to call the IRS, wait on hold forever, and get someone to get their manager to manually unsubmit it.
After you apply for a TCC, there's a wait. It me about a week and half to get accepted. You'll get a physical letter in the mail with your TCC(s), which are five-uppercase-letter codes. You should probably save this letter, but practically I haven't found a need for it or even knowledge of my TCC. Instead you'll just log in to the Information Return Portal with your ID.me account, and it will just have your TCC linked to your account already. Then you can start a new 1099 of any type right there. Also, a tip is that if you are doing a few, click "Issuer Management" at the bottom and put your issuer's information in to save it as a preset option. Otherwise, you'll have to enter it every single time. It's then pretty simple to manually enter 1099s.
One thing to note is that if you are issuing multiple 1099s to the same entity, you are apparently required to put an account number on each of those to delineate them. It will give you an error afterwards if you don't.
If you have a list of 1099s to issue, that is where things get complicated. There is an option to "Upload CSV with Form Data" and you can then download templates, but they only consist of a header row and there is little...
]]>$arr = array("a");
$a = &$arr[0];
$arr2 = $arr;
$arr2[0] = "b";
print_r($arr);
This simple code prints:
Array
(
[0] => b
)
If you don't have the reference in there, it remains "a". Somehow the mere act of assigning a reference to an int in an array changes the behavior of any future copies thereof. How can that possibly make any sense?
It took a while to figure out, but vardump()
is a very handy function for these situations. If we dump the array before and after assigning the reference, we can see what's going on:
array(1) {
["c"]=>
string(1) "a"
}
array(1) {
["c"]=>
&string(1) "a"
}
Since PHP arrays can be either lists or dictionaries, its engine does not have a way to just reference the address of an item therein. Instead when you create a reference to a primitive in an array, PHP converts the primitive to a reference to that primitive. Then both the array and the other variable can have a pointer to this stored value. Usually, this is fine enough. You can use a reference to an int seamlessly as if were the int itself usually. However, the fact that you cannot even see that anything changed is what makes this bug so insidious. If you thereafter copy the reference, you will think it is still a raw int. Since array copies are shallow, any modification to the array copy will modify the pointed-to value, modifying it everywhere.
This is a reported, if little-known, bug. The proposed fix was to make arrays deep copy by default, but this was deemed to costly. I would advocate that a far better fix would be to supplement arrays in some way to allow references to point to items thereof without modifying the array, but I am blissfully unaware of how challenging this would be to implement.
If you do want to work around this, there is no clear, right way to do so. Not only does PHP shallow clone by default, it does not have a built-in way to deep clone an array, nor to dereference a reference.
Obviously, the first—and probably best—option is to avoid ever making a reference to an array item. This behavior means it will almost inevitably come back to bite you, and the hassle of just storing a key and/or reference to the array is surely less than the hassle of trying to figure out how your data is being secretly corrupted....
]]>Interviews are usually pretty structured affairs, with the interviewers asking most of the questions, and the interviewees just doing their best to answer them. However, they're not like tests. There's no one right answer. There's typically no scores. Those being interviewed simply need to convince the interviewers that they are the best candidates for the job.
Therefore, you shouldn't view questions as a checklist to be checked off like if you have a passable answer to every question you'll get the job. What if someone else has a passable answer to every question too? Instead you need to figure out how you can use the questions to explain why you're the best person for the job. The questions are just a means to an end for both sides.
What do employers look for when determining who would be best? I would abstract it to three things: who can do the job, who would do the job, and who wouldn't interfere with other people doing their jobs. With each answer, you should be seeking to further your case in one of these areas.
The most important thing you need to communicate is that you are capable of doing the job. For some jobs, this might simply mean you can follow instructions, while for many it will be convincing them of your skill, knowledge, and talent.
For this, you want to be narrow and focus on experience, experience, experience. Ideally, you've done this job before and did it well. Bring that up as much as possible. Use people who witnessed such as references. Make them convinced that you can jump right in without a worry.
If you haven't done the job before, talk about the closest thing to the job you've done, and why you know how to do it. If you're new to the workforce, focus on your education in relevant areas.
Most importantly, you need to show that you know how to do that specific job. If you have been jumping between fields or doing a hobby, talking about those other fields won't convince them of your skill at this job at all. Mentioning such things can be good for the other two goals, but those are less important. If you can answer a question with an example in a relevant job, do it, even if it doesn't seem as great an answer. If they ask what your work experience, disproportionately talk about jobs in that field. If they ask you about your strengths, your strengths are things that could help at this job. If they ask what you enjoy about an unrelated job, include something that is also true about the job you are applying to. If they ask for an example of something (problem-solving, conflict resolution, etc.), use an example of something at a job in that field. Make them feel like you eat, sleep, and breathe relevant job experience.
Sometimes you may clearly be under-qualified for a job. This isn't always a death sentence for your...
]]>The whole point of home automation is to do things conditionally. Maybe you want to change the light color depending on the time of day. Maybe you want to play a noise when someone hits a button. Or, in my case, I want to adjust the thermostat based on the temperature and people's locations. Regardless of what you want to do, the go-to software is the mostly-lovely Home Assistant. It makes it easy to integrate all your devices with whatever setup you want and then lets you run automations to…automate them.
Typically automations are controlled by simple triggers. If a button is pushed, then do this. If the temperature changes, then do this. Home Assistant's GUI makes this fairly easy to set up, but it's also pretty limited. You can set triggers, conditions, and actions, but that doesn't let you really program things. It has a simple if-then action, but limited to this, it's hard to do things with more than a couple possibilities. It would be impractical to make many, many branches to do something like gradually change the color and brightness of a light based on the time of day.
Home Assistant's solution to this problem is its scripts. However, this name is misleading. It's not really a scripting language like one may think of like bash or Python or PHP or Javascript. For instance, to setup my thermostat to be 73° in the day, 3° cooler at night, and 10° less when we're not home, I would naturally write something like this:
from datetime import datetime
target_temperature = 73
if (datetime.now() > datetime.strptime("7:00AM", "%I:%M%p") and
datetime.now() < datetime.strptime("10:00PM", "%I:%M%p")):
target_temperature -= 3
if state.zones.home == 0:
target_temperature -= 10
climate.set_temperature(target_temperature)
This is very simple and straight-forward logic. You set the temperature you want and then adjust it. It would be easy to put a conditional in there to set it to hot or cool depending on the current temperature and change the initial target temperature accordingly. You could easily add another intermediate zone with a different temperature change.
Scripts cannot easily do this. They are not very different from automations really. They're just YAML files with a series of commands and optionally conditions. One of these commands is setting a variable, but it has serious limitations. You might naturally think you could implement the same thing with the following:
sequence:
- variables:
target_temperature: 73
- if:
- condition: template
value_template: "{{ now().hour >= 7 and now().hour < 22 }}"
then:
- target_temperature: "{{ target_temperature - 3 }}"
- if:
- condition: template
value_template: "{{ int(states('zone.home')) == 0 }}"
then:
- target_temperature: "{{ target_temperature - 10 }}"
- service: climate.set_temperature
data:
temperature: "{{ float(target_temperature) }}"
target:
device_id: "{{ device_id }}"
Sure it's horribly ugly and a pain to write, but that should at least do what you want, right? Nope, that script will always set the temperature to 73° without even a warning. If you try setting target_temperature
in an if statement, you'll get an error. How...
Since 2007, applying postage for most mail has been extraordinarily easy. You buy one Forever Stamp and put it on. It doesn't matter if you bought the stamp five years ago. You don't have to think about what the current rate is. You don't have to see any numbers at all. It's just one letter, one stamp.
However this simple rule only applies for what the post office calls "standard-sized" letters. For most mail, that's fine, but there are a couple of rules that greeting cards often don't comply with, making you have to research why it got sent back and either guess how much to pay or else do math.
The first standard of standard mail is that a letter must weigh less than 1 oz. Unless you're using really cheap paper, this is about 4 sheets of letter-sized paper. Most greeting cards are thick cardstock and will be over this. You can guesstimate with a kitchen scale, but err on the heavy side as these are not accurate enough to be sure.
Assuming you are over, you have to pay extra postage. Currently, the fee is 24¢ per ounce over, although this will surely increase in the future. Since standard stamps are currently 68¢, mailing a card usually costs 92¢ postage. If you're not a big card person, just slapping an extra Forever Stamp is a safe bet which will cover it 2¾ times over and only donate 44¢ to the government unnecessarily. However, if you mail a lot of cards, it may be worth it to pick up some neato "Additional Ounce" stamps the next time you're at the post office to save a little money and add a little flair to your letters. Like Forever Stamps, Additional Ounce stamps will always cover an additional ounce no matter what they make the rate, while saving you money to buy over normal stamps. It's quite the handy stamp secret.
The other issue you might run into with cards are the size standards. A "standard-sized" envelope must not be more than 6⅛ inches tall and must have an aspect ratio of at least 1.3 (E.g., if your card is 5" tall, it must be at least 6½" long). I would guess neither of these size restrictions is an issue with most cards, but it's good to be aware of.
If you do have a large or square card, it instead becomes a "large envelope", also known as a "flat". These are quite a bit more expensive. Instead of the current 68¢ rate for letters, large envelopes cost $1.39 to mail. Assuming it's also at least 2 oz, that's $1.63 total.
Unfortunately, there is no simple "large envelope stamp". You have choose a less-ideal option:
I, like any American, love burgers. I'm not very picky. Obviously, some burgers are a lot better than others, but I like basically all of them, whether it's Five Guys, Wendy's, Steak and Shake, Dairy Queen, a local smashburger, or even McDonald's. I like all styles—from a plain cheeseburger to a Big Mac to a blue cheeseburger to a peanut butter royale burger. However, I believe that there is a core element to a burger—primarily comprising the burger patty itself. In light of this, I believe a burger should taste like a burger.
I understand the inhumane treatments often found in factory farms. Growing up on a farm with cattle myself makes the factory facsimile appear even more grotesque. However, I do not believe that eating meat on its own is inherently immoral. In fact, I often find myself leaning more towards being the opposite of a vegetarian. (In law school I lived on a ketogenic diet for a number of months.)
That being said, I do like the idea of vegetarian meat substitutes being an option. If offered such, I will often pick them if they are of comparable price for environmental reasons if nothing else. However, the success of their mission is very inconsistent.
The first plant-based, meat-substitute burger I tried was Burger King's Impossible Whopper in 2019. I am not a big fan of Burger King as a restaurant, but back then it was a fair bit better. (Actually, 2019 was probably the last time I had a good experience at a Burger King.) I got a free coupon in Burger King's app to either get a regular Whopper or an Impossible Whopper. My palate is nothing if not adventurous, and it was more expensive otherwise, so I chose the vegetarian option. To be honest, I could not tell a difference. It tasted just as good as real meat, at least what they serve at Burger King and if it wasn't for the price and the rest of the shortcomings of Burger King, I would probably get it fairly often.
Starting off on a high note, my next plant-based meat substitute experience was at KFC. They came out with Beyond Chicken from Impossible's competitor, and I had to try them too. These were…less impressive. They still tasted like meat, albeit mediocre meat. However, they were unnaturally tough. Obviously, they lacked the fibers and texture that real quality chicken has, so they were more like expensive, tough McNuggets. Not a worthwhile replacement, in my opinion.
That brings me to the meat (heh) of this article. A couple of weeks ago I was at Costco to buy a bunch of frozen burger patties to take advantage of my new chest freezer when I saw that Beyond Meat patties were on sale, making them only a little more expensive than beef patties. Again, being adventurous and seeking the option more friendly to both the environment and my diet, I bought two packs. I had to finish off my pre-existing Kirkland...
]]>If you order lattes or macchiatos, you probably like a little sugar (or a similar substitute sweetener) in your coffee. When you order one on the Dunkin' Donuts app it asks you what sweetener you want. Somewhat oddly, the default is none. You are likely quite inclined to change this so you don't get just bitter bean juice you could get far cheaper elsewhere. However, this would be a mistake if you have added one of the sweetened flavor shots. If you turn your drink into a mocha latte and still add the recommended four packets of sugar to your drink, be warned: it will be really, really, really sweet.
The reason for this is that the sweetened flavor shots are intended to replace the sweetener. A large latte's mocha flavor shot contains 45 grams of sugar! The caramel swirl has 51 grams!
You might be able to tell this yourself from the name "sweetened flavors", but it's a bit ridiculous just how much sugar they put into them. If you order just a large iced macchiato, it will have 12g of sugar. If you order an iced macchiato and add the recommended amount of sugar, it will have 47g. If you order a caramel iced macchiato, it will have 63g! If you order a caramel iced macchiato and add the recommended amount of sugar it will have 98g of sugar!
While this isn't really a flaw in the app, and it's good to have the flexibility, I think it could be communicated a bit more clearly. Maybe it could add the recommended sugar by default and take it away when you add the sweetened flavor shot, or at least say the recommended amount of sugar for a drink with a sweet and flavor is zero packets. I will give Dunkin' credit that the current names for the shots are much better than what they used to be. Only the unsweetened flavor shots used to actually be called "flavor shots", while the sweetened flavors were called "flavor swirls". It was much more like playing sugar roulette before they realized the error of their ways.
Regardless, I think it's important for a coffee enjoyer to be aware of what you're really ordering to ensure you get something good. If you don't want flavor and you want sugar, add sugar. If you want flavor and sugar say you want no sugar because the flavor will include it.
]]>I recently came into possession of a used Bunn coffeemaker, which is very nice, but its operation was very hard to figure out without a manual, such that I thought it was broken initially. It would just dispense coffee cold without properly heating it up.
To be clear, I've made coffee before and other coffee makers, and it was very simple and straightforward. You put in the filter, fill it up with grounds, add water, and push start. Then you would wait a few minutes for the water to boil, and that would come coffee.
I tried that same procedure on this coffee maker, but the instant I hit the on switch, it started dispensing "coffee" without heating it up at all. Completely cold, it failed to really pick up any coffee taste. Unless I was going to pre-heat my water and/or dump a ton a ton of grounds in, it would essentially be worthless. The coffee maker had a warming plate, so I briefly considered that to be the intended method of heating, but that would be ridiculous.
As despair over my new machine began to take hold of me, I finally went to men's last resort: reading the instructions. It took me a minute to understand them, but it turns out that the water I was pouring in wasn't the water it was pouring out. The coffee maker has an internal water reserve that it's supposed to keep hot all the time. That sounds energy inefficient, but it means it's supposed to dispense coffee instantly instead of waiting for the water to heat up like with most coffee makers. To effect this, you have to leave the coffee maker on all the time. Instead of turning it on dispensing the coffee, the trigger is actually shutting the water lid. When you do so, it dispenses water from the preheated reserve to the extent you filled the water input, and then afterwards it refills the reserve from what you poured in and heats it.
The proper procedure is as follows:
Voilà: coffee. ☕
]]>On June 5, 2023, a number of amendments to the Illinois Notary Public Act went into effect. Among these changes are the requirement of a 3-hour course to obtain or renew a notary commission, the permanent establishment of both remote and electronic notarization, and the new requirement that most notaries keep a journal of every notarization they do. Somewhat confusingly, the act was actually passed in 2021, but many provisions required the Secretary of State to issue guidance as to how they should be implemented before they took effect. This month the Secretary of State finally published those rules.
Many states have required notaries to keep journals before this, but Illinois has not before now. As of this writing, even the 2023 Secretary of State Handbook still incorrectly says Illinois Notaries don't have to (even though the Secretary of State is who finally implemented the legislated change):
Should I keep a log book of any actions as a notary?
There is no requirement in Illinois that a notary public keep a log book or journal. However, a notary may keep a journal for his or her own record keeping.
This is now incorrect however. P.A. 102-160 added 5 ILCS 312/3-107 to now require Illinois Notary Publics to keep a journal.
Note that it exempts law firms from having to maintain a journal of all the notarizations they do as this could violate attorney-client confidentiality, but we are now required to keep copies of all documents we notarize if we don't maintain a law firm journal.
Everyone else has to maintain a personal journal in compliance with 14 IAC 176.900 & 14 IAC 176.910. The former gives the requirements for a notary journal overall, and the latter the requirements for journal entries. Namely these requirements are:
Each journal of a notary public, whether maintained on a tangible medium or in an electronic format, must contain all of the following information in any order:
1) The name of the notary public as it appears on the commission;
2) The notary public’s commission number;
3) The notary public’s commission expiration date;
4) The notary public’s office address of record with the Secretary of State;
5) A statement that, upon the death or adjudication of incompetency of the notary public, the notary public's personal representative or guardian or any other person knowingly in possession of the journal must deliver or mail it to the Secretary of State;
6) The meaning of any abbreviated word or symbol used in recording a notarial act in the notarial journal; and
7) The signature of the notary public.
You also have to update your information if it changes while you're using the journal.
Then if you're using an electronic journal, it has to have the following additional requirements:
]]>1) Prohibit the electronic notary public or any other person from deleting a record included in the electronic journal or altering the content or sequence of such a record after the record is entered…;
2) Be securely backed up...
For my birthday this year, my wonderful wife gave me a Silicon Power 2 TB M.2 SSD, which I requested, love, and recommend. It's both a very reasonable price and extremely fast, so it seemed like the perfect little upgrade for my computer until GPU prices come back down. I had previously upgraded my original hard drive to a larger hard drive and then upgraded that to a smaller SSD, so I was familiar with the experience and mostly knew what I was doing.
To start the migration, I just cloned my drive with Clonezilla, like I had before. The ISO I had was (I think) too old to work with my M.2 drive. (It just said Unable to find target partition "nvme0n1p1".
) So I booted into a live Linux image, installed Clonezilla, and copied it from there. Everything worked fine. I booted Windows and all my drives were there. It was complaining that the cloned drives had the same UUIDs as the old ones, but that didn't sound hard to fix.
However, my partitions were still tiny and only filling 13% of my new drive. I rebooted back to Ubuntu to move it away and make both drives larger. After a small skerfuffle of GParted Bug: A partition cannot end (3651028992) after the end of the device (%2)
, which was just caused by rounding to the nearest MiB rounding the partition off the end of the drive (so I made 1 MiB empty between), I had my Linux partition resized. (It failed to resize NTFS for who knows why.)
However, I wasn't happy with just one Linux distribution. If I had been, I probably could have just resized C: in Windows and been at peace. Yet I had heard neat things about Nix and wanted to try out NixOS. It had sounded like a more practical alternative to Gentoo, so I downloaded and tried to install it. However, NixOs is unable to install an EFI on a drive with an MBR. (A Master Boot Record is a small partition at the start of a drive, describing the partitions on the drive and how to boot. An Extensible Firmware Interface is the new way to describe how to boot, typically used with the new GPT partition table.)
Since I had always been cloning my C: partition from drive to drive over the years, I never replaced the old MBR with a GPT. I figured now's as good a time as ever, so I used gdisk to convert it.
What a terrible mistake.
I installed NixOS, however it installed systemd-boot. I only really ever have used GRUB, and that's the only bootloader I have tools to edit, so I ran boot-repair and installed GRUB. This turned out to not actually remove systemd-boot and just made nothing boot, but running bootctl remove
removed systemd-boot and everything was seemingly good again.
But…if you convert a drive containing Windows to UEFI without doing it with Windows' mbr2gpt, it seems...
]]>