|
Only because pkfox solved it
Spam - ad
Trio - trio
Absurdly- anagram?
Clever - definition
Ad + trio -> adroit
I thought βspamβ was the clue for an anagram.
|
|
|
|
|
Celebrating Pizza[^]
"The only place where Success comes before Work is in the dictionary." Vidal Sassoon, 1928 - 2012
modified 6-Dec-21 3:20am.
|
|
|
|
|
I'll celebrate with you; making pizza dough in a moment.
Pizza is life.
Bastard Programmer from Hell
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
We had pizza party yesterday - without knowing that today is a special pizza day... We may do it again today
"The only place where Success comes before Work is in the dictionary." Vidal Sassoon, 1928 - 2012
|
|
|
|
|
Pineapple?
Bastard Programmer from Hell
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
Some decency please!
"The only place where Success comes before Work is in the dictionary." Vidal Sassoon, 1928 - 2012
|
|
|
|
|
ππππππππππΊπ½π―ββοΈπ―ββοΈπΊπ½πΎ
|
|
|
|
|
Celebrated by having cold leftover pizza for breakfast. One of my favorite breakfasts. Note that when having it for breakfast it must be eaten cold. Warmed up is for lunch an dinner.
So many years of programming I have forgotten more languages than I know.
|
|
|
|
|
I am not there, but hopefully next year, when I would like to sell my dungeon mapper.
Anyway I plan to make the app "freeware", but every time one save their document there is a nagging ad windows for like 8 seconds, with an opportunity to buy a license (which got rid of the add!).
I am not too sure how to make the registration though.
If it's a single magic key, then it can leaked to the whole world and nobody need to buy anyway. if it's a key specific to the computer they need to register computer and perhaps receive a computer specific key to the email they registered with, but that sounds bothersome...
Any other idea?
|
|
|
|
|
Maybe these...
1. OTP - generate personal key - base on email, but when first entered you also ask for an one-time-password, which will send to the same email...
2. Hardware bounded key. In this case you have to add a way to move license from one computer to an other, which will ask for identification based on the original registration values...
"The only place where Success comes before Work is in the dictionary." Vidal Sassoon, 1928 - 2012
|
|
|
|
|
I have hardware keys not because I want to limit the number of licenses (unlimited licenses is fine by me), but just so that key cannot be shared....
But you seem to imply that having to wait for an email for the app to be unlocked is fine. Actually the app can run without it and can register it without restarting as well.. so.. it's fine hey!
|
|
|
|
|
If there is no problem with unlimited licenses, but you do not want to pass an existing license from one machine to an other, than use machine bounded without further check... Create an API that will receive a number that identifies the machine (CPU id?) and returns a unique registration code for that... End of story...
"The only place where Success comes before Work is in the dictionary." Vidal Sassoon, 1928 - 2012
|
|
|
|
|
Super Lloyd wrote: If it's a single magic key, then it can leaked to the whole world and nobody need to buy anyway. if it's a key specific to the computer they need to register computer Should not be specific to a computer, but a customer.
Bastard Programmer from Hell
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
machine key is because I want to make license key unshareable.
other than that unlimited machines is fine.
so buy licence once.
when unlocking a new computer, request (via return email) a key for that machine.
I was wondering if it was annoying, but since the app work 100% even unregistered and since the lock key can be entered while the app is running, I guess it's not much of a bother.
|
|
|
|
|
As long you do not expect customers to remember or keep anything. An email based license key recovery is more or less a must (it can be done manually to start with), but then you cross into GDPR territory which can also be entertaining. And then of course, there are also people changing email and loosing access to the old one.
|
|
|
|
|
Yes.. I was concerned about people losing email..
But I have yet to work on the website.. where I want the people to be able to login with Oauth (I'll use all .NET Oauth provider?!) to update / recover their details!
|
|
|
|
|
At minimum, your key needs to be tied to the machine.
User needs to contact you (company) with encrypted info from his/her computer and you generate a key based on that.
Email back the key to the user.
CI/CD = Continuous Impediment/Continuous Despair
|
|
|
|
|
Yeah.. I guess I was wondering whether it was too much of a bother for the user...
But since the application can be used while all of this is happening, I guess it's fine...
|
|
|
|
|
What does everyone think about the Halo Infinite gameplay we have seen so far? Asking since it COMES OUT WEDNESDAY!!!
|
|
|
|
|
I don't.
Too busy playing GTA V ...
"I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
"Common sense is so rare these days, it should be classified as a super power" - Random T-shirt
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
A Homeless Guy, Looking Ragged And Dirty, Came To Apply. He Persuaded The Manager To Give Him A Try.
The guy was given a glass of wine. He swirled, smelled, sipped and spit. βIt's a red wine, Merlot, three years old, grown on the South Slope and matured in oak barrels." He said. "Impressive," said the manager.
The man is given another. "Still a red wine, Cabernet, eight years old, from the Northeast slope, stored in a steel vats.β
The manager was amazed. He winked at his secretary. The secretary understood and brought out a glass of urine. The drunkard tasted it and said. "It's a blond, 27 years old, three months pregnant, and if I don't get this job, I'll tell who the father is!"
Real programmers use butterflies
|
|
|
|
|
First time ever I threw away coffee.
You're evil.
Bastard Programmer from Hell
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
This one is cute...
__________________
Lord, grant me the serenity to accept that there are some things I just canβt keep up with, the determination to keep up with the things I must keep up with, and the wisdom to find a good RSS feed from someone who keeps up with what Iβd like to, but just donβt have the damn bandwidth to handle right now.
Β© 2009, Rex Hammock
|
|
|
|
|
Okay, you don't need to get your coat!
Charlie Gilley
βThey who can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety.β BF, 1759
Has never been more appropriate.
|
|
|
|
|
I unboxed my fancy new ESP32-S3 yesterday. I intended to connect it to a parallel display and start banging on it until I realized that no toolchains are really ready for developing against it yet except for the ESP-IDF's which can limp along and do it if you're willing to devote your life to driving python scripts from the command line. So back in the box it goes.
I unboxed my ILI9341 display driver with an 8-bit parallel interface. Usually they come with a serial (SPI) interface.
I need to write a driver for it, and the ESP32 does not have hardware support for a parallel bus, meaning I have to bang the bits myself by controlling the individual pins.
And the trick is getting the timing right.
This is the part where I hate GCC (which I usually adore), because it doesn't respect "inline" very well. That means code like this:
#define HTCW_RS_C GPIO.out_w1tc = (1 << pin_rs)
#define HTCW_RS_D GPIO.out_w1ts = (1 << pin_rs)
#define HTCW_CS_L if(pin_cs>31) { GPIO.out1_w1tc.val = (1 << pin_cs-32); } else { GPIO.out_w1tc.val = (1 << pin_cs); }
#define HTCW_CS_H if(pin_cs>31) { GPIO.out1_w1ts.val = (1 << pin_cs-32); } else { GPIO.out_w1ts.val = (1 << pin_cs); }
#define HTCW_WR_L if(pin_wr>31) { GPIO.out1_w1tc.val = (1 << pin_wr-32); } else { GPIO.out_w1tc.val = (1 << pin_wr); }
#define HTCW_WR_H if(pin_wr>31) { GPIO.out1_w1ts.val = (1 << pin_wr-32); } else { GPIO.out_w1ts.val = (1 << pin_wr); }
#define HTCW_RD_L if(pin_wr>31) { GPIO.out1_w1tc.val = (1 << pin_rd-32); } else { GPIO.out_w1tc.val = (1 << pin_rd); }
#define HTCW_RD_H if(pin_wr>31) { GPIO.out1_w1ts.val = (1 << pin_rd-32); } else { GPIO.out_w1ts.val = (1 << pin_rd); }
#define HTCW_WRITE8(C) GPIO.out_w1tc = HTCW_CLR_MASK; GPIO.out_w1ts = HTCW_SET_MASK((uint8_t)(C)); HTCW_WR_H
#define HTCW_WRITE16(C) GPIO.out_w1tc = HTCW_CLR_MASK; GPIO.out_w1ts = HTCW_SET_MASK((uint8_t) ((C) >> 0)); HTCW_WR_H
#define HTCW_WRITE32(C) GPIO.out_w1tc = HTCW_CLR_MASK; GPIO.out_w1ts = HTCW_SET_MASK((uint8_t) ((C) >> 24)); HTCW_WR_H; \
GPIO.out_w1tc = HTCW_CLR_MASK; GPIO.out_w1ts = HTCW_SET_MASK((uint8_t) ((C) >> 16)); HTCW_WR_H; \
GPIO.out_w1tc = HTCW_CLR_MASK; GPIO.out_w1ts = HTCW_SET_MASK((uint8_t) ((C) >> 8)); HTCW_WR_H; \
GPIO.out_w1tc = HTCW_CLR_MASK; GPIO.out_w1ts = HTCW_SET_MASK((uint8_t) ((C) >> 0)); HTCW_WR_H
Forgive the formatting. There I'm using a combination of the preprocessor and constexpr charged if s to get them to resolve at compile time based on the pin assignments. It's a mess that should have been able to be done without the preprocessor at all.
That mess is to get it as fast as possible, so that when I do insert delays, they are minimal and controlled - I'm not blowing overhead on branch prediction misses from function calls and the like.
Anyway, at least the bit banging is fun, even if what I have to do to the C++ language isn't.
I love coding the metal. I love writing hardware interfaces. It dovetails with my love of circuit building, right there where the rubber meets the road. Turn this pin on in software, send that bit to the 8080 parallel interface connected to the display. Woo.
Something about it just feels pure.
Real programmers use butterflies
|
|
|
|