[HN Gopher] Some tiny personal programs I've written
___________________________________________________________________
Some tiny personal programs I've written
Author : atg_abhishek
Score : 474 points
Date : 2022-03-09 14:19 UTC (8 hours ago)
(HTM) web link (jvns.ca)
(TXT) w3m dump (jvns.ca)
| jrm4 wrote:
| My dream in life, seriously, is to get waaaay more people doing
| this sort of thing than they do now. If STEM is worth anything,
| it would be worth things like this*
|
| *(I run a STEM non-profit, so I feel pretty qualified to
| criticize it this harshly)
| markussss wrote:
| I absolutely love this, and I do the same. Small programs and
| scripts to solve problems I encountered in my daily life. When I
| make them for my own use, and for myself to enjoy making
| something, I don't care about whether it's the best solution or
| the most elegant solution, as long as it's _a solution_! And I
| really, really enjoy that. I don 't care if it's one or one
| hundred lines, as long as it's enjoyable!
|
| A few of my examples are:
|
| 1. A PyQt GUI for redshift. I use this every day, and have been
| for a few years.
|
| 2. Userstyle for horizontally flipping a video. Sometimes a video
| or stream is mirrored, for some reason, and it's just _nice_ to
| be able to fix it.
|
| 3. Userstyle for scaling videos that originally had an aspect
| ratio of 4:3, but have been stretched out into 16:9 back to the
| original 4:3 aspect ratio. It's surprising how often you come
| across those.
|
| 4. Userscript for improving the functionality of the investment
| portal of my bank.
|
| 5. Bookmarklet for opening all videos on the page in new tabs,
| but there are some problems with iframes yet.
|
| 6. Bookmarklet for setting playback speed of videos on the
| current page. I use this several times per day.
|
| [1]: https://github.com/Markussss/redshift-gui
|
| [2,3,4]: https://github.com/Markussss/userscripts
|
| [5,6]: https://markussss.github.io/
| wwilim wrote:
| > I don't think it actually helped but it was fun
|
| This seems like the central theme, and I can totally relate
| nivethan wrote:
| Julia writes so nicely, something about the way she talks about
| projects and things is so earnest. I have a brag document because
| of her and it's helped quite a bit. I have my own list of toy
| projects and I think it's good to track them especially to find
| code examples later!
|
| https://nivethan.dev/projects.html
|
| I really liked writing a http server in bash because I started
| just to see if I could. I also really like my project to get the
| top reddit stories from each country.
| ludovicianul wrote:
| It's fun to build simple stuff that work, but it's even more
| rewarding to build stuff you actually use every day. I made a
| simple expense tracker that will parse the SMS messages I get
| from the bank when paying for stuff, categorise based on merchant
| categories and push it to a google spreadsheet for traceability
| and visual charts. Good opportunity to play with building native
| images (it's done in java) in order to minimise resource usage as
| it's deployed in a 5$ digital ocean droplet. 10 years ago I've
| built a Swing app to generate invoices in a local compliant
| format. It was great to flexibility to customise everything.
| psalminen wrote:
| I did the same thing. I use a twilio number that calls a GCP
| cloud function. Super handy utility, and I haven't had to pay a
| dime for it.
| aghilann wrote:
| If any of you know don't know what LaTeX is, it's a way to write
| documents, it's usually used to write Math and Science research
| paper's because the of the formatting and symbols LaTex allows
| for. It has a lot of flexibility, but everything in LaTex
| requires a lot more effort to type then in something like MS
| Word. I have to use it for a class I'm currently taking where you
| have to do super long proofs, I created a short 50 line script
| where I can enter a mathematical expression using plain text and
| shorthand's for special symbols and the function returns a string
| I can copy and paste into LaTex. Saved me and my groupmates
| multiple hours, I also posted on my class forum so I can save my
| classmates the pain as well.
| arendtio wrote:
| You might want to check out those blog posts:
| https://castel.dev
| generalizations wrote:
| Might be worth looking into Lyx also. It's a sort of WYSIWYG
| for latex.
| version_five wrote:
| I have to disagree with you about LaTex being slower than word
| for equations. In fact, one of the big reasons I started using
| it was faster equation typing. And when word2003 was upgraded
| to 2007 or whatever came next, they actually changed the
| equation editor to allow latex style entry so you didnt have to
| click through the menus to get symbols.
|
| What kind of shorthand do you use with your script? I honestly
| find latex's shorthand already short.
| aghilann wrote:
| The course I'm currently taking makes me uses symbols like
| the biconditional, xor, and quantifiers. Each symbol requires
| an entire word to type out but I also frequency have to look
| at a reference sheet to find the command for each symbol. I
| just use short hands like "-" for not, "and" for $\land$,
| etc. I'm sure if I used LaTex more often, I would have most
| of the commands memorized but I use it infrequency so I
| almost never remember.
| hegzploit wrote:
| I'm pretty sure you can create macros in LaTeX, not sure If
| this would solve your problem.
| xmprt wrote:
| I wonder if you could make a few minor tweaks so it's a latex
| plugin and you can skip the copy and paste process.
| froh wrote:
| Here is relatively recent collection of tools and tweaks to
| quickly create math in LaTeX, quick as in: live transcribing
| class notes.
| https://www.reddit.com/r/LaTeX/comments/ieonbz/using_latex_f...
| hereforphone wrote:
| I don't think there are any engineers (people who have gone to
| engineering school) that haven't used LaTeX. [Editing based on
| replies]: Apparently I am wrong. Maybe it's just at the grad
| school level that one can expect to use LaTeX frequently; I
| made the assumption because I took a Master's.
| pitaj wrote:
| Checking in as a BSEE: never used LaTeX.
| pushrax wrote:
| It's more common in CS than engineering in my experience,
| when CS is part of the math department.
| Jtsummers wrote:
| You're very optimistic. I doubt anywhere near the majority of
| engineers have used LaTeX directly. I've seen a lot more (of
| all ages) who used Word for their technical writing. If they
| used LaTeX or TeX it was a one-off, not something they became
| skilled with.
| avg_dev wrote:
| If you put it on GitHub, or anyone linked me to a similar tool,
| I'd be interested. Thanks.
| vulcan01 wrote:
| This is not exactly the same thing, as it just renders the
| output, but the following uses markdown and asciimath for
| quick math notetaking.
|
| https://vedthiru.com/tools/notetaker
|
| Disclaimer: I wrote it.
| aghilann wrote:
| This is pretty cool, similar note taking service called
| Obsidian I use to take notes in Markdown
| Minor49er wrote:
| I recently came across a zine someone made called The Codex:
| Life with Linux. It's on Etsy for $6 [1], but their short
| chapter of LaTeX tips is fully shown in one of the screenshots
| [2]
|
| [1] https://www.etsy.com/listing/1099735271/the-codex-a-zine-
| abo...
|
| [2]
| https://i.etsystatic.com/9756188/r/il/09766b/3387078510/il_1...
| fmakunbound wrote:
| > use secret undocumented APIs where you need to copy your
| cookies out of the browser to get access to them
|
| Yea, thank you modern front end developers. This is my favorite
| start for scraping as well.
| JamesMcMinn wrote:
| I own the house I currently live in because of a script I wrote.
|
| We had been looking for a new build for some time and had settled
| on a development and specific house we wanted to buy, but it was
| still months away from being released. We were told they released
| houses in person first, then listed them online later that day,
| but I was bored and wanted to see when new houses were listed, so
| I wrote a scraper to alert me whenever a new house became
| available.
|
| One day, we got a call from the property developer telling us the
| house we were interested in would be available in person from
| 10am the next day. Because we wanted to be certain to get it, we
| appeared at 8am, only to find that 3 other people were already
| waiting. Houses are released in batches of 2 or 3, so whilst we
| weren't hopeful, we joined the queue and waited.
|
| At 9am, while waiting in line, I got an alert telling me that the
| house had been released online, so I open their website on my
| phone and paid the deposit.
|
| At 10am, when the sales office opened, all hell broke loose as
| the person first in line (waiting since 5am...) discovered the
| house they wanted had already been reserved online. I'd
| effectively stolen his house. It was awkward to say the least as
| all of us were crammed into a tiny portacabin while this
| unfolded.
|
| In truth, I felt awful for depriving him of the house he and his
| family wanted, but relieved that we had reserved the house we
| wanted after a 5 month wait. A few weeks later the developer got
| in touch to say that they had changed their policy nationwide and
| would only be releasing houses online in the future because of
| "the incident"...
|
| Whilst I wasn't willing to give up our reservation, I worked with
| the person who had wanted our house so that they were alerted
| whenever a similar house in the same development became
| available. He got one, there's no hard feelings, and him and his
| family are now my next door neighbours.
| jwong_ wrote:
| Did you end up running the scraper longer for your new
| neighbour?
| JamesMcMinn wrote:
| I did, yes. I set it up with some specific conditions that
| sent him an alert whenever a house similar to ours became
| available. In the end, he got the house directly next to ours
| and very similar in design.
|
| Our garages actually share a wall.
| jwong_ wrote:
| That's really kind of you to run that scraper for him as
| well. Glad it all worked out~
| recentrecruit wrote:
| Reminds me of "Project Thor" from my university days. Course
| registrations were online, but in phases, e.g. Seniors for a
| week, then Juniors for a week, and so down the line.
|
| However, many students would snag a spot in a course only to
| drop it as they shuffled courses around. There existed a
| "queue" for the overflow, but it appeared to work as a CRON job
| or otherwise involved a human in the loop as one would
| routinely see:
|
| Spanish 102 (Registered: (29/30), Queued:(60))
|
| While in this state, one could simply click on the course and
| register, completely bypassing this poorly designed queue. So,
| naturally, I wrote a script to scrape the site on once a minute
| (hammering it, and so Project Thor) and alert me once a slot
| had opened up. Eventually provided this service to my friends
| as well.
| jotm wrote:
| I've got something similar for appointments at citizens'
| bureaus in some European cities. The waiting time is usually
| around a month, which is insane imo.
|
| My script constantly looks for open/canceled spots and
| reserves them (some need email/phone confirmation, which
| makes it a bit harder). Pretty standard stuff.
|
| That's how I got my appointment in 3 days instead of a month.
|
| So, I'm thinking of making money from this, but I'm not sure
| about the legality of it all.
| therein wrote:
| I did something similar at UIUC very many years ago. I was
| called to the office of head of Department of Computer
| Science and kindly told while he thinks it is cool that I am
| applying my skills relevant to my field of study, I should
| stop what I am doing as even simply scraping could be
| construed malicious if it got the attention of the wrong
| people in the school.
| conroydave wrote:
| id love to get their honest opinion on the 'no hard feelings'
| part
| nunez wrote:
| lol don't feel bad; you took advantage of a broken system and
| automated your way through it. The first person in line
| would've done the same if they knew how!
| zhoujianfu wrote:
| I also own the house I currently live in because of a script I
| wrote!
|
| I wrote it in 2012 to automatically buy bitcoin once a week.
| dybber wrote:
| Did the same for my previous apartment. I wrote a script
| scraping various "self-sale" sites (sales without real estate
| agents), the script would notify me when new apartments living
| up to my criteria was posted online.
|
| When I got such a notification I would quickly check photos of
| the place etc. and then call the seller. The guy selling the
| place I ended buying, said it felt like I called him up
| instantly after he posted it online.
| gcheong wrote:
| Great story though I initially thought you meant you wrote a
| script that paid off your house :).
| hungryforcodes wrote:
| Myself as well!
| tshaddox wrote:
| One of the things that always frustrates me (despite being very
| much in the "first world problems" category) is when queueing
| or reservation systems are unclear or chaotic or otherwise
| unfair, although I generally only encounter this at stores,
| never for something as significant as a house! The most
| ubiquitous one is the practice of totally separate parallel
| queues where you just have to guess which queue will be
| fastest. Another lovely related one is when you're waiting in
| your queue for quite some time, then a new queue opens up right
| next to you and quickly fills up with newcomers who haven't
| been waiting at all! Come on store owners, just have a single
| queue with multiple consumers popping off the same queue!
| Again, I'm not going to pretend this isn't totally a first
| world problem!
| TillE wrote:
| Berlin's international film festival has this horrendous
| system where they'll release a small batch of tickets online
| every morning on certain dates, and you just have to sit
| there, refresh refresh and hope you clicked fast enough.
|
| Serious major events use a lottery system, which is vastly
| more fair and means you don't need the server infrastructure
| to deal with this huge flood of requests. I'm not really sure
| why _everything_ doesn 't work like that: let people submit
| their requests/applications/whatever, and if you truly have
| zero other criteria, just process them in random order after
| a cutoff.
| pedantsamaritan wrote:
| Another variation I have been on both sides of: stores
| favoring certain channels over others. For example, a local
| fast-food restaurant might prioritize answering the phone for
| carry-out orders over in-person carry out orders.
| jrockway wrote:
| Something went wrong here. The price of the house should have
| been raised until only 1 person wanted to buy it. If you're
| first in line, the incentive is to sell it at a higher price
| to the person who's second in line, right?
|
| I have to imagine some sort of regulatory thing was going on
| here, like they have to provide X% of units at Y% of market
| rate in order to get some tax concession or something.
|
| I know there's not going to be a lot of sympathy for higher
| housing prices here, but it does feel like something went
| wrong in this specific case.
| rlayton2 wrote:
| For the people selling, it is often more profitable (or at
| least less hassle) to sell quickly with minimal fuss and
| move onto the next one.
| maxerickson wrote:
| It's like how event tickets are routinely scalped. The
| thing that is going wrong is that the additional bid isn't
| worth the reputational drama.
|
| Homo economicus would understand the the seller is simply
| being efficient. Homo sapiens gets all emotional about it.
| mikepurvis wrote:
| Camping reservations for Ontario Parks are a big mess like
| this-- so much so that people do ridiculous hacks like
| booking the full two weeks that lead into their desired
| weekend and later paying a fee to cancel just the first part
| of it. By the time the actual popular weekend would have come
| available for online booking, it was already taken weeks
| earlier.
| cecilpl2 wrote:
| I wrote a script to poll the Parks Canada reservation
| system for availability for a camping trip I wanted to do,
| so that I'd get notified the instant someone cancelled and
| space became available.
|
| Sadly after two weeks they banned my IP for the rest of the
| year and I was no longer able to make reservations without
| going through a proxy.
| polishdude20 wrote:
| A friend and I made a website based around this called
| campalert.live We've had to stop doing BC and National
| Parks as the API changed and we haven't had time to
| update our end. But Alberta still works!
| sequoia wrote:
| I'm pretty sure they do this on their own now. I set up
| "notify me" for a site and got tons of emails as sites
| became available.
| sequoia wrote:
| Wow, thank you for explaining this!! I was wondering how
| weekends that were "not yet available for online booking"
| were already nearly fully booked when I looked on the
| booking site. Very irritating that people do this... With
| that out of the way, I'll go ahead and start doing this
| myself, if that's the price of admission
| cgriswald wrote:
| I definitely appreciate a single queue. It doesn't seem to be
| the norm though.
|
| If it's a place you frequent, pay close attention. The
| checker is usually a stronger indicator of line speed than
| the number of items in peoples' baskets.
|
| Whole Foods near me does this awful thing where the lines are
| in the aisles. You can't even see how long the line is
| without walking the entire length of the store.
| ipaddr wrote:
| Is a jealousy issue? Without the second line you were going
| to take as long as you were. Opening a second line helped
| people further back catch up and in some cases surpass your
| speed. Someone else having a quicker experience shouldn't
| have changed your experience.
| tshaddox wrote:
| I wouldn't call it jealousy to want everyone to be served
| in the order they arrived, since that's obviously the
| intention of flat unprioritized queues. You can certainly
| make arguments that FIFO _isn't_ the best or right way to
| process a grocery store checkout queue, but for now I'd
| rather it be implemented well rather than poorly.
| stockboss wrote:
| maybe it's more of a fairness issue. in theory, the proper
| way should be to have a single line that funnels to any
| available lane, so any newcomer would still have to join
| the same line and not get any advantage over someone who
| has been waiting.
| tomcam wrote:
| Your generosity gave you the best possible outcome in this
| deal. Impressive.
| japhyr wrote:
| I appreciate you bringing this up, because I think this plays
| out all the time. I live in a small isolated town, and there
| wasn't a lot of turnover in houses even before the pandemic. I
| wrote a short script that scrapes all the listings, and alerts
| me to any new local listing. It was a fun little project to
| learn about generating text messages, and to see how effective
| a cron job on a sleeping MacBook can be. We ended up getting a
| house through a friend who sold their home without listing it,
| but those alerts were really helpful, and almost got us one
| house a little earlier.
|
| The bigger story here is what this means for the divide between
| tech-literate people and the rest of the population. I don't
| think the parent commenter was wrong to write their script, and
| I don't think I was wrong to write mine, and if you wrote
| something similar I think it was a reasonable move as well. But
| we have to recognize the advantage this gives us, as people who
| are able to spot these opportunities and act on them.
|
| I don't have any answers, but I think this story brings up a
| good discussion. I'm curious to hear other people's thoughts on
| this.
| davnn wrote:
| > The bigger story here is what this means for the divide
| between tech-literate people and the rest of the population.
|
| Where I live the good deals from private sellers (mostly
| older people) pretty much never get posted online, thus you
| would have to socially integrate somehow offline in the
| region you would like to buy a house :). It looks like I
| still have to wait for some cultural development to benefit
| from your proposed divide.
| philsnow wrote:
| Especially in smaller markets, there aren't very many agents.
| You can get a lot out of inviting realtors to coffee from
| time to time. When somebody is thinking about selling, they
| often talk to realtors early on, so you can learn about them
| before they hit the MLS.
| adhesive_wombat wrote:
| I did basically exactly this but for reserving a spot at the
| visa centre for a residence permit appointment.
|
| Subverting a small aspect of the Hostile Environment[1] took a
| little bit of the edge of the general bastardry of the whole
| process. Still a bloody expensive and emotionally draining
| experience though: if it has to be done again, I won't be
| putting a loved one though that again and we'll both be
| leaving.
|
| [1]
| https://en.wikipedia.org/wiki/Home_Office_hostile_environmen...
| zachwill wrote:
| Very cool! Great story.
| diatone wrote:
| In case anyone's interested in the math to get the dice answer,
| it's (1 + 2 + ... + 6) * 2500 / 6 = 8750. At least, I think it is
| gjs278 wrote:
| I wrote a scraper that looked through substitute teacher jobs for
| a friend. she subbed 30 days in a row and got a full time job due
| to it.
| Semiapies wrote:
| Some years back at work, I actually hit the size limits of email
| rules in Outlook, just for filing emails into folders for my
| clients. So, I wrote the first of a few iterations of an email-
| filtering script in Python, connecting into the office's Exchange
| server in different ways as we upgraded.
|
| The current version wraps exchangelib and, besides just running
| the straightforward Python code rules, checks whether the email
| is in a thread and files it away in the folder with the previous
| emails. (This is the _slow_ part over the web API, with walking
| folders to find the location of any particular thread the first
| time it 's encountered adding a few seconds to the run. If I find
| myself caring about the few extra seconds, I'll try one of a few
| ways it's occurred to me to speed it up.)
|
| While at first I slightly minded having to run the script instead
| of Outlook silently tucking them away, I found I liked the chance
| to see what was in my inbox first.
| vermarish wrote:
| My friend invited me out to karaoke, but most of the songs I know
| aren't popular enough to be in karaoke systems. It turns out that
| the local karaoke place has a song database that serves queries
| formatted as a URL parameter, so I wrote a script to query it for
| every artist I've listened to on Last.FM. I found out that Black
| Sabbath and Iron Maiden are surprisingly good picks for karaoke!
| There were also a few singles I didn't expect from Children of
| Bodom and Arch Enemy. https://github.com/vermarish/karaoke-sign-
| in
| somdax wrote:
| I wrote a tiny program to help me buy a puppy :)
|
| The place I wanted to get a puppy from said that they didn't take
| reservations for the upcoming puppies until they were born. The
| only way to know when they were born was to check their website
| and then give them a call.
|
| So the tiny program I wrote kept checking a webpage and whenever
| it changed content, it would sende a text message "PUPPY ALERT!".
|
| A few hours after I deployed the program, I got message so I
| thought it had a bug, but no, the puppies had just been born <3
| hereforphone wrote:
| To those thinking about getting a dog: please consider a
| shelter first.
| frockington1 wrote:
| I was ineligible to adopt a Daschund from a shelter because
| my property doesn't have 1 acre of fenced in yard. Other
| places required 2 veterinarian references (we had 1 reference
| due to owning a cat). It can be a lot harder than people
| think to adopt a dog from a shelter
| iamricks wrote:
| To adopt my cat during covid i had to do a Facetime
| interview with the shelter and show them around my place.
|
| It felt like i was applying for a job.
| henryfjordan wrote:
| This really varies. I got this kind of treatment from a
| group of ladies fostering Shi Tzus. I think they really
| just wanted an excuse to keep those dogs or give them to
| new potential old-lady friends.
|
| At the next place I tried they basically threw the dog at
| me.
| tshaddox wrote:
| I was recently having a conversation with a married couple
| I had just met through a mutual friend. They were detailing
| their recent difficulties trying to get a dog. They were
| looking at both shelters and breeders, and both had their
| own difficulties, costs, red tape, waiting periods, etc.
| The woman was also pregnant with their first child. I
| asked, and the irony was not lost on them.
| anthomtb wrote:
| One acre of fenced yard for a dachshund? I've seen onerous
| dog ownership requirements before but never that much land
| for that small of a canine.
| gcheong wrote:
| If you're set on a particular breed also consider a rescue
| that specializes in that breed if there is one.
| munificent wrote:
| This is very good advice, but I wish it wasn't presented
| without qualifiers. There are good reasons to get a shelter
| dog:
|
| - You are potentially saving a dog's life that would
| otherwise be put down.
|
| - They are often initially cheaper than buying a dog from a
| breeder.
|
| People rightly focus on the strong moral argument of the
| first point and they even emphasize the second to imply that
| it's a good self-interested choice too. But they advocate so
| strongly that they often omit the real downsides:
|
| - The long-term cost may be higher. There are breeds that are
| known for significant health problems, but many breeds don't
| have them and if you buy a puppy of those breeds, their
| health is closer to being a known quantity. With a shelter
| dog, you are rolling the dice. There is maybe an argument
| that hybrid vigor makes shelter mutts statistically more
| healthy, but that has to be balanced against the facts that
| (1) the dog may have ended up in the shelter _because_ of
| health problems or (2) the dog 's life pre-shelter may have
| _caused_ health problems.
|
| - There may be long-term behavioral problems. Dogs in
| shelters may have been feral, living on the streets, abused,
| or relinquished because of behavioral problems. If they were
| feral and weren't potty trained well as a puppy, you may
| never train them out of marking. Even if the dog was homed,
| the kind of people who don't spay and neuter their animals
| (thus leading to puppies that end up in the shelter) are
| often the kind of people who don't train them well either.
| There also seems to be a correlation with shelter dogs coming
| from dog fighting communities. You see a ton of pitbulls,
| which are wonderful sweethearts when raised right but are not
| when they aren't. Even non-pit breeds may have been abused as
| bait dogs.
|
| I love the dog I got from a breeder, and I love my shelter
| dog (who is snoring next to me as I write this), but the
| latter was _not_ the pure win that shelter advocates often
| make it out to be.
|
| The right way to think of it is sort of like getting a used
| car: it _can_ save you money and be a morally good choice (in
| the case of a car, less waste and better for the
| environment), but it 's also an unknown quantity where you
| need to do more due diligence to know what you're getting
| into, or accept that you are taking a risk with higher
| variance.
|
| But, unlike with a car, you're signing up for the dog for
| life.
|
| So, yes, please consider a shelter first. Any future dogs I
| get will likely be shelter dogs. But consider it _cautiously_
| and take your time finding the dog that is right for you.
| hereforphone wrote:
| Wall of text on point. I got a shelter dog 5~ years ago and
| it is a relatively difficult breed. I knew nothing about
| dogs. But I love it and take care of it (because I take
| ownership of my decisions, particularly where they involve
| the life of another creature), and it's gotten better over
| time. I also exercise caution where necessary.
|
| If I had to do it again, I'd get an easier breed.
| cgriswald wrote:
| Anyone getting a shelter dog should pay for a dog
| behaviorist to either help them select a dog or evaluate
| the dog they have selected. They should also have a trainer
| lined up to help them teach the dog how to live with them.
| This goes 20x for first time dog owners.
| Ntrails wrote:
| > There may be long-term behavioral problems..
|
| I know this is right - but I feel obliged to point out that
| _this is true with a new puppy too_.
|
| Training dogs properly is work, and inconsistent or
| incomplete training only gets harder and harder to fix.
| Plenty of dogs in shelters are there because owners could
| not rectify their own mistakes. Not from malice, or lack of
| caring. Simple unknowing incompetence.
|
| Don't be too quick to judge those who give dogs up
| hbn wrote:
| Right, but when you don't know the dog's breed (i.e. it's
| 17 types of cross-breeds) nor its history (if it's gonna
| have PTSD from being abused or fighting for its life in
| the streets), it's a much safer bet to get a purebred or
| simple/common cross of 2 breeds where you can Google the
| general behaviours of those types of dogs, and you know
| its entire history of life up to that point: being born,
| then laying around with its siblings and mom
| cgriswald wrote:
| You really want a common cross that has been breed from
| that same cross for generations. Otherwise what you get
| is an unpredictable grab bag of behaviors from the
| original breeds.
| munificent wrote:
| I'm not saying this to judge the dogs' original owners.
| In many cases, the dog was feral and there _is_ no
| original owner.
|
| The important point is that dogs go through developmental
| milestones just like people and when you get a dog that
| has already finished its puppyhood, you have lost the
| opportunity to be present during those milestones and
| train the dog. Dogs _can_ learn as adults, of course, but
| correcting bad behaviors is a _lot_ harder. When you get
| a younger dog (shelter or not), they are more plastic and
| easier to train.
|
| Yes, of course, it's on you to actually do that training
| well, but at least you have the _chance_. When you buy an
| adult dog, which is what most shelter dogs are, you 're
| kind of stuck with what you get.
| livinglist wrote:
| I did something similar not long ago.. lol
| uxcolumbo wrote:
| For anybody considering getting a dog - please consider
| adopting rather than buying.
|
| * You're Saving A Life
|
| Adopting a dog from a shelter not only means that you're giving
| him a happy life, but you also free up a spot at the rescue or
| shelter to save another dog's life.
|
| * Helps Fight Puppy Mills
|
| Approximately 90% of puppies you can buy in pet stores or
| online are from puppy mills. Adopting a dog from a shelter
| takes business away from mills. The more people who adopt, the
| more puppy mills have a hard time staying in business.
|
| More reasons: https://www.caninejournal.com/adopt-dont-shop/
| vgel wrote:
| Except every dog adoption place around here has requirements
| like "Must be an experienced dog owner, have a 5 acre yard,
| own your home, and be able to do 50 push-ups without getting
| out of breath. Expert sword-swallowers preferred."
| epolanski wrote:
| Also, if you care about environment consider not getting an
| animal at all.
|
| The idea that we grow food to feed cattle or fish to feed
| pets is among the biggest environmental stupidity I can think
| of.
|
| I went vegetarian to help the environment and here people
| feeding dogs and cats fish and meat. Makes me think we're
| doomed for extinction.
| lgvld wrote:
| Such a cute story :)
| merely-unlikely wrote:
| I wrote a script to email me the top 10 Hacker News articles at
| lunchtime. And now I'm here :)
| jbmny wrote:
| > one of my favourite things is to use secret undocumented APIs
| where you need to copy your cookies out of the browser to get
| access to them
|
| I love this too. It's always a nice surprise when you realize you
| won't be needing to write xpath/pyquery/et al. after all... It's
| like the scraping has already been done for you!
| kinduff wrote:
| What a nice read. Motivates me to make a list of these small apps
| I have all over the place; Raspberry Pis, DO servers, Netlify,
| etc.
|
| It also reminds me about that usenet story where in a company
| their lead developer left, and they discovered some fun scripts
| to automate excuses for his wife, or turning on the coffee
| machine through telnet. Can't remember the name.
| nso95 wrote:
| https://github.com/narkoz/hacker-scripts
| johnklos wrote:
| Tiny projects like these are fun and rewarding. I just wish I
| were as good as Julia at keeping track of them. After reading
| this, I think I'll start keeping track of them in one place :)
| 333c wrote:
| I also wrote a script to get a vaccine appointment! I wonder how
| many other people did that.
| alexpovel wrote:
| A couple years ago, I switched from German QWERTZ to a UK QWERTY
| keyboard (wouldn't have minded US QWERTY but the differently
| shaped return key seemed too foreign). I am not looking back: for
| programming but also general tasks, having keys like
| ` [ ] \ / { }
|
| very easily available is a blessing. The German QWERTZ keyboard
| has _triple_ occupation on some keys, which is not ergonomic and
| harder to type fast with.
|
| Anyway, both Linux and Windows offer fast switching between
| installed keyboard layouts/languages using SUPER+SPACE. This is
| needed in e.g. emails, where I still need Umlauts. It's just much
| easier to read that way. However, switching back and forth
| constantly is completely overwhelming and not viable. However, in
| German, there are perfectly and officially (?) acceptable
| alternative spellings for our special "Unicode"-characters. They
| can be typed using plain ASCII, aka a QWERTY keyboard.
|
| So, I wrote a script to read in any text, combined it with
| AutoHotkey on Windows and now have a tool that, at the touch of a
| button, replaces selected text using alternative spellings
| (gruen, Duebel, Faehre) with their correct versions (grun, Dubel,
| Fahre). The tool could be extended for other languages rather
| easily. I've been using it for over a year now and recently got
| to release it properly on the cheese shop: pip
| install betterletter
|
| (https://pypi.org/project/betterletter/)
|
| Before putting this together, I had looked around for an existing
| tool. To my surprise (there's always something!), I found
| nothing. I guess this scratches a too specific itch: using QWERTY
| but wanting proper spelling quickly, while remaining on QWERTY as
| to not have a mental breakdown and stay at full typing speed.
|
| After writing, select everything (CTRL+SHIFT+HOME works well),
| hit shortcut, text will be replaced. This takes about 2 seconds,
| much faster than switching keyboard layouts back and forth. If
| this ran as a daemon with the dictionary loaded into RAM already,
| the script could run almost instantaneously (most of the 2
| seconds is IO, reading from disk), in linear time according to
| the text input size.
| w-m wrote:
| Neat! I'm using QWERTY International layouts myself, where you
| can type umlauts and ss with special keys for modifiers (e.g.
| alt+u on Mac for "), but I still think this is a cool tool.
|
| Looking through the repo I wondered why you would commit the
| complete German dictionary weighing in at over 30 MB, whereas
| you only need a small fraction, the words containing the
| umlauts (or their false matches). Surely this would be a huge
| performance boost?
|
| Turns out: a whopping 30% of that dictionary are words
| containing "ae|oe|ue|ss|a|o|u|ss". Crazy. I would not have
| guessed that, at all.
| alexpovel wrote:
| > Neat! I'm using QWERTY International layouts myself, where
| you can type umlauts and ss with special keys for modifiers
| (e.g. alt+u on Mac for "), but I still think this is a cool
| tool.
|
| Yeah, I had looked into these but for some reason that didn't
| work. Don't remember why.
|
| > Looking through the repo I wondered why you would commit
| the complete German dictionary weighing in at over 30 MB,
| whereas you only need a small fraction, the words containing
| the umlauts (or their false matches). Surely this would be a
| huge performance boost?
|
| Yes! It would be performance boost. In fact, I had a
| "caching" sort of functionality in the tool before. The whole
| dictionary is shipped (because that makes it much easier and
| there's almost no risk of wrong-doing just copy-pasting a
| word list, plus it compresses well enough), but then a list
| containing only special characters will be generated on first
| use if it doesn't exist yet.
|
| As you noted, a lot of words do contain special letters, so
| the "complexity" wasn't worth it to me and I removed that.
| Could be brought back anytime, but it's fine for now.
| tedunangst wrote:
| Just fyi, Windows will let you set a keyboard layout per
| window. If you like writing programs, you can write one to
| switch the linux keyboard layout based on active window.
| bArray wrote:
| > When the second COVID vaccine doses opened up, all of the slots
| were full. It turned out that the website's backend had an API,
| so I wrote a script to poll the API every 60 seconds or so and
| watch for cancellations and notify me so that I could get an
| earlier appointment.
|
| I imagine the hacked together COVID vaccination websites were
| already under quite a high load. If it's anything like
| unoptimized WordPress websites it's doing a database query each
| time and I really hope the API wasn't being shared by healthcare
| providers. The saving grace appears to be that the script isn't
| shared.
|
| I guess this is a reminder to be careful when sharing scripts
| that rely on other's services (especially important services).
| Cache when possible, poll minimally, etc. Recently I found out
| that Ubuntu doesn't cache DNS queries by default, which I
| discovered when I got temporarily blocked from a DNS server. Good
| job I didn't share that script!
| eindiran wrote:
| My recent favorite small program I wrote:
|
| Was watching a movie with a group of friends which someone had
| ... acquired from the internet, but it didn't have any subtitles.
| Someone found an SRT file, but the subtitles were offset by quite
| a bit - enough that you would be seeing dialogue in the subtitles
| for what had been onscreen 10+ seconds ago, which kind of
| defeated the point of getting the subtitles. So I wrote a program
| in a few minutes to specify an offset and rewrite all of the
| timestamps in the file. We timed the offset, ran the script and
| got to watch the movie with working subtitles less than 20
| minutes later.
| Dyac wrote:
| VLC allows you to specify a subtitle offset, fyi.
| adhesive_wombat wrote:
| FYI, Aegisub can do that.
|
| It used to be a regular thing for me since I already have
| subtitles on (ESL spouse). The worst is when you have a time
| shift _and_ a different frame rate, as it 'll slowly get worse
| over time, but seem ok for the first few minutes.
|
| Recently, Plex's "agents" seem to be good enough at figuring it
| out and auto-downloading subtitles that it's not often a
| problem.
| sideproject wrote:
| I frequent ProductHunt to see what new products are launched. I
| usually click on every link. That takes time and hurts my fingers
| clicking. So I automated it and created an app called Rockmelon.
|
| https://www.rockmelon.app
|
| It became a tool that opens multiple links all at once. Once I
| had the basic foundation, I created a daily ProductHunt link,
| which opens all the links at once. You can subscribe to daily
| product hunt links here.
|
| https://www.rockmelon.app/rc/Cg08Y06Vu9#/
|
| Now my fingers are happy. Hopefully yours too.
|
| You can create your own mega link with API as well.
| fsniper wrote:
| I have had many small scripts or software doing automation for
| me. One of them is the one that found me a motorcycle. It was a
| neat web console JavaScript code, which would go over the
| listings and score them with a pretty basic algorithm. I scored a
| good Cbr250 with that. In turn I dislocated my shoulder in the
| upcoming days :) I rode the bike for a few years. It was also my
| first and the last motorbike. Fun times.
| ocdtrekkie wrote:
| I run a badly written monolith (my home automation system), and
| tend to make tiny personal programs some weird offshoot growth of
| it.
|
| There's upsides and downsides to this. I'm aware it's basically
| guaranteed to be useless to anyone else because it's depending on
| software I'd never encourage someone else to run, for instance,
| and it locks me into certain coding choices.
|
| However, I spend a lot less time doing boilerplate/framework
| stuff, because I've already got the basics running for other
| tasks: Stuff for logging, settings, data storage, and remote
| control and monitoring is already a given.
| [deleted]
| twic wrote:
| I wrote a little web app (Python and CGI) to organise a secret
| santa ring. You put in a load of names with email addresses, then
| it shuffles them, and sends an email to each person telling them
| to buy a present for the next person on the list (wrapping
| round). It meant a group of friends could do a secret santa
| without one person having to know who was buying for who.
|
| There's a way to put people in groups where they shouldn't buy
| presents for each other, which is useful for couples of families,
| where they will probably be buying presents for each other
| anyway.
| brink wrote:
| Nice article! Here are a couple of my recent personal projects..
|
| I couldn't find a command line media player that was simple
| enough for my liking. So I wrote one for myself that uses
| gstreamer as the back-end. https://github.com/codabrink/aquinas/
| It's hasty code. I plan to improve it in the future by adding
| features and switching the music library structure from an array
| to an iterator when I find time.
|
| I also needed a daemon that would watch a folder for new files
| and upload them to Backblaze B2.
| https://github.com/codabrink/backblaze-upload/ I use this with
| Nginx on my vps to proxy requests to the bucket for nice looking
| vanity urls. (http://i.kota.is/5ruvD.png) The code is really bad;
| the focus was to build it in under 90 minutes or so, but the
| important thing is it works, so therefore I'm not going to spend
| anymore time on this one.
| jchook wrote:
| For a command like media player, did you try cmus?
| brink wrote:
| Yeah, I didn't like it. :)
| jim_lawless wrote:
| I wrote a command-line MP3 player in C for Windows. I just wanted
| to play with the media manger API's, but I've ended up using this
| to play MP3's in succession via a script.
|
| https://github.com/jimlawless/cmdmp3
|
| It doesn't work on all versions of Windows ... it depends on some
| configuration elements. This has been used in another developer's
| video game and I believe it's installed with an MP3 player
| library in node.js ( if you're running node.js under Windows. )
| It also plays WAV files on Windows 10 (possibly 11) if you pass
| the name of a WAV file into the command-line.
|
| I needed a command-line emailer that would send an email via
| Gmail with a very simple one-line body for my Mac. I also wanted
| to exercise Go's SMTP libraries while experimenting with trying
| to build a minimal emailer application.
|
| https://github.com/jimlawless/gsend
|
| I use this regularly. I used to use it on MacOS, but I use it
| more frequently on Windows.
| submeta wrote:
| I got an appointment at the registry office for my marriage
| because of a script I wrote.
|
| Years ago I desperately tried to get an appointment for a
| marriage at my local registry office but as soon as their website
| listet possible appointments they were gone. So I wrote a web
| scraper that blocked an appointment as soon as it was offered,
| and sent me an sms (via Twilio) notifying me. My script was so
| eager that within an hour it blocked several appointments. I got
| a call from that office wondering how often I wanted to get
| married. So finally I got my appointment. Otherwise it was close
| to impossible to manually book an appointment.
| kevincox wrote:
| One fun one is I was playing a game with friends and it felt
| super random to me. So I wrote a simulator and some simple
| strategies to see how effective these strategies were vs
| randomness. If the game is mostly strategy you would expect to
| see clear difference in all of the strategies. If the game is
| mostly random the good strategies would have a hard time
| differentiating them from each other consistently.
|
| https://gitlab.com/kevincox/red7-sim
| recentrecruit wrote:
| Wrote a TI-83 program (TI Basic) for a geometry course in high
| school. About a month prior to the feared final exam, I combed
| through all of our coursework to catalogue all of the
| calculations needed then wrote a program that would solve for any
| query (length of side, angles, etc.) based on the shape and input
| data.
|
| I read the operators guide to the device cover-to-cover and found
| a way to store the program such that the teacher's method of
| "clearing" the device would not remove my program.
|
| On the day of the test I realized I had accidentally taught
| myself geometry, as I didn't need the calculator at all and could
| do the calculations in my head. I did, however, use the TI-83 to
| verify my answers before handing in the test. According to my
| teacher I not only had a perfect score but did so in record time,
| and suspiciously so did my two best friends.
|
| Nothing ever came of it, but I enjoy the fact that I accidentally
| learned a course to such proficiency by trying to cheat.
| Sohcahtoa82 wrote:
| While in my Algebra II class, we were studying polynomial
| expansion, and I wrote a program on my TI-85 that would not
| only expand things like (2x^2 + x + 3)^4, but it would _show
| the work_. I literally just had to enter a couple values and
| then verbatim copy what it spit out onto the paper.
|
| I asked the teacher if I could use it on the test, and she was
| like "If you can write a program that doesn't just solve it,
| but shows the work, then obviously you know the material
| incredibly well, so there's no need to make the test tedious.
| Go for it, just don't share the program with any of your
| friend."
|
| The last bit was easy because I didn't have any friends. :-(
| twodave wrote:
| I actually got into programming on my graphing calculator in
| high school in the early 2000s. Most of our tests from algebra
| up thru calculus were simply "apply the correct formula to the
| problem". I would simply program the calculator with the
| formulas, use it to calculate the answers and then work
| backwards to "show my work". I got 100% on every test for 4
| years. I'm still not sure whether I feel guilty or not.
| Semiapies wrote:
| You might find it funny that a scaled-up version of this was
| the plot of a 1958 children's book, _Danny Dunn and the
| Homework Machine_. (Except the teacher figures it out and
| starts assigning the kids using the computer more advanced work
| that they have program the computer to perform.)
|
| https://en.wikipedia.org/wiki/Danny_Dunn_and_the_Homework_Ma...
| lhuser123 wrote:
| I write tiny programs with pyautogui to automate parts of my job.
| It's like having an assistant.
| wolfgang000 wrote:
| I did something similar to the vaccine appointment bot but to get
| my passport appointment, I'm Venezuelan, and let me tell you
| getting a passport is almost impossible due to all the corruption
| and mismanagement, so years ago the webpage to schedule the
| passport appointment was down for 99.9% of the times, I am not
| joking the page was only functional for a 10~15 minutes per week
| at random intervals of the day, there were facebooks groups of
| people doing watch reloading the page every few minutes ALL DAY
| LONG to catch it when it was working and then inform the rest
| when it was up, It was insane I decided to do a simple(not really
| tho) bot that did the polling and fill my data to the form, I was
| very happy to result and event more because I didn't have to
| bribe anyone(This is the "normal" method to get the passport and
| the sky is the limit of how much are they going to charge you)
|
| here is the code if someone is curious about it
| https://gitlab.com/wolfgang000/saime-bot/
| conroydave wrote:
| I'd like to add that OP has some incredible easy to understand
| "zines" that help explain technical topics like http, dns,
| containers etc.
| hegzploit wrote:
| These little quality of life scripts are life savers, I've made a
| script which I'm really proud of and still use to this day, in my
| university they usually release assignments every now and then
| and I had to check each course's page manually for any new
| deadline, so I made a python script that scraped the website and
| would print any new assignments since the last run of the script.
| I would later make a little telegram integration where new
| assignments were sent on a group chat for my class mates to get
| notified too and left the script running in crontab on some vps I
| had around. https://github.com/hegzploit/lazy-chicken
| pseudosavant wrote:
| I love to put simple web apps like this on Glitch.com.
|
| Days Until - Create a URL to countdown to any date:
| https://glitch.com/edit/#!/days-until
|
| Flexible Fetcher - scrape/fetch contents of a page based on HTTP
| query params: https://glitch.com/edit/#!/flexible-fetcher
|
| Scrape HTML <table> return JSON: https://query-page-table-to-
| json.glitch.me/?url=https%3A%2F%...
|
| USPS Zipcode Lookup + offline JSON - easily add city,state
| autocomplete from zipcode: https://glitch.com/edit/#!/usps-
| zipcodes-demo
|
| Create Data URIs - 100% client side:
| https://glitch.com/edit/#!/data-uri-pwa
|
| Frame Counter - great for testing latency across displays or
| remote links (e.g. Parsec) using a camera:
| https://glitch.com/edit/#!/frame-count
|
| NBA Team Standings in JSON: https://glitch.com/edit/#!/nba-
| standings
|
| Read/render markdown files on your HTTP server:
| https://glitch.com/edit/#!/markdown-html-remix
|
| Create map links that open in Apple Maps on iOS and Google Maps
| everywhere else: https://glitch.com/edit/#!/apple-maps-link
|
| Clean your Amazon URLs: https://glitch.com/edit/#!/clean-amazon-
| url
| ciroduran wrote:
| I love Glitch, I wrote a number of Twitter bots. But then they
| changed some things in the free tier (understandably), so I
| moved my bots to a local server that runs Docker, with each
| container running a bot, and I'm really happy it's chugging
| along.
| pseudosavant wrote:
| I'm dying for Glitch to get native Deno support.
| belkarx wrote:
| When I was first learning to code, I spent a few hours writing a
| python script to get Advent of Code files and prompts, then open
| them in an editor, and also eventually made a util to check the
| answers. Fun times.
| prometheus76 wrote:
| I haven't turned it into a standalone program yet, but I wanted a
| way to calculate praying the Orthodox Book of Hours according to
| a sundial instead of a normal clock, and I used excel to do it.
|
| I found the formula for determining sunrise and sunset using
| latitude and longitude from NOAA's website. This allowed me to
| generate a sunrise/sunset table for my location by day.
|
| I use VBA to update a clock every 10 seconds (I didn't need it to
| be more accurate than that) that feeds to a cell, and I use that
| to know when it is time for First Hour (sunrise), Third Hour (9
| am, or 25% of the day), Sixth Hour (50% of the day), and Ninth
| Hour (75% of the day).
|
| I have it all working and it runs in Excel on my work computer.
| My goal is to translate the logic into an app on my phone so that
| I can get notifications when it's time to pray. It's been a fun
| project, which included a side project of making a 9-LED display
| in Excel for the clock. I have a clock for normal world time, and
| a clock for sundial time.
|
| It's been a fun project!
| rauhl wrote:
| Heh, I did that with Emacs! It already has sunrise & sunset, so
| the rest of the math was easy.
|
| Excel & Emacs: two things starting with E which let anybody
| program anything.
| friggeri wrote:
| These resonate a lot! Tiny projects are very rewarding, because
| you get something that works pretty quickly, this works well with
| my short attention span. Couple of ones I did in the last two
| weeks:
|
| - A little mac app that reads my calendar, grabs the next 2-4
| events and sends them over to my Vestaboard.
|
| - Setting up Cloudflare as a failover load balancer to reach my
| home network (I have two ISPs for redundancy), this involved
| writing a small script to get the WAN IPs out of my Omada router
| and using that as a custom command in ddclient to update the DNS
| entries for both uplinks.
| jsdwarf wrote:
| Created a python script that scrapes the holding lists for each
| of my ETFs and outputs an aggregated list of all companies I am
| invested in through the ETFs. Can also compute how similar two
| ETFs are based on their holdings. Has saved me some order fees
| because it drastically reduced the ETFs I am investing in.
| LinasKo wrote:
| A lot of the music I like is on YouTube, including many obscure
| remixes and covers. Now, I'm not a fan of forgetting things and
| YouTube can be pretty volatile, with videos getting removed.
|
| Rather than downloading all the audio, I made a playlist scraper
| for the names. Runs once a day on PythonAnywhwre, collects the
| names into a database, helps me sleep at night.
| ggerganov wrote:
| I've always wondered what would be the chance to win the lottery
| if I played consistently a certain set of numbers. Every day, no
| excuses.
|
| So I wrote a script to scrape the lottery site archive and check
| retrospectively the success rate [0]. Well.. the result is what
| you would have expected.
|
| [0] https://ggerganov.github.io/lottery-check
|
| Bonus - clicking the "Random" button helps you really understand
| how futile playing the lottery actually is.
| 75central wrote:
| When I briefly returned to the Windows world, I wrote a quick-
| and-dirty application that would clean the shortcut links that
| installs would clutter my desktop with.
| https://github.com/MattGHarvey/ShortcutCleaner
| eddieroger wrote:
| The stories on this page, as well as the other comments here,
| make me really happy because they're all examples of computers
| making life better, as opposed to being passive consumption
| devices. Pretty often, I think back to putting together a
| database to track invites to my bar mitzvah on a 386 running a
| program called MyDataBase - it created print jobs for envelopes,
| let me mark back RSVPs, track gifts and thank you notes,
| everything. We carry such powerful computers in our pockets these
| days, but there are so few apps that I know of that actually use
| the device to make our lives easier. I wish more people knew how
| to use these tools the way the audience here does, or that I knew
| enough to make something that others could then use to do the
| same.
| nunez wrote:
| So many people think that the most recent generations are more
| computer-savvy because they use computers and smartphones all
| of the time. Quite the opposite; many are app-savvy, not
| computer-savvy. While I've gotta hand it to the amazing PMs, UX
| researchers, designers, and SWEs that have contributed to this
| phenomenon, it's a shame that computer literacy in general is
| so poor on average.
| mooreds wrote:
| > The stories on this page, as well as the other comments here,
| make me really happy because they're all examples of computers
| making life better,
|
| Hear hear! I love stories where computers help relieve human
| misery.
|
| I got into programming because my parents had a business that
| required them to mail their clients a legally required notice
| every year. They originally were copying the letter, changing
| the address and a few other pieces of data, and then printing
| it out and mailing it.
|
| While I couldn't help with the latter, the former seemed like a
| great job for a database and mail merge. I set up WordPerfect
| to mail merge, and got started entering data (one month's
| clients at a time). Whenever the day to send out the mail came,
| it was a simple matter to merge in the data, generate a long
| WordPerfect doc, and print it out. Once the first year went by,
| it got even quicker. I ended up porting the dataset a couple of
| times to more advanced databases (eventually PostgreSQL).
|
| The first time they saw how easy it was going to make this
| onerous task, they were pretty happy.
|
| And I was hooked on software as a way to lessen such tedium.
|
| Edit: Of course now, I'd use a tool like lob to actually send
| the mail too.
| throwthere wrote:
| That Covid vaccine project gives me chills. That's not saying
| it's wrong to use an advantage like coding skill or anything else
| to increase your odds of surviving a pandemic-- but it's a new
| world we live in for sure.
|
| Edit: I guess I need to clarify I'm not asserting anything was
| right or wrong.
| kinduff wrote:
| Have done the same but using a scrapper, not for COVID, but for
| an impossible to schedule appointment I had to do in a
| government website.
|
| I still think it could be monetized but I don't feel like doing
| it. I heard a friend that there is a lot of people doing this
| manually and they charge you a considerable rate.
| mr_mitm wrote:
| This was done with a lot of collaborative effort in Germany:
|
| https://github.com/iamnotturner/vaccipy
| Macuyiko wrote:
| We had a similar governmentally organized system in our country
| during the first vaccination round where people could book an
| appointment. The website fell over and the devs introduced a
| queuing system and had you waiting in line. Except that it was
| badly implemented and only enforced client-side (through
| JavaScript) and hence very easy to circumpass. It also had a
| similar API which could be polled to see when a slot freed up.
|
| This actually happens quite often. As another example, there is
| a particular country visa centre which requires you to make an
| appointment and is typically fully booked for weeks on end. The
| calendar info is loaded in through an API call and the selected
| date then form POSTed with a hidden field's value set to an
| identifier representing the date and time. Not in plaintext,
| but easy enough so that it can be guessed. Once you spoof the
| value, no further server-side validation happens and no one at
| the centre will check it.
|
| I wanted to book a restaurant a couple of weeks ago. As I was
| discussing options with a friend, the booking provider already
| forced a refresh and our desired time slot was gone. Again,
| taking a look in the Network tab of the browser and spoofing a
| value led to a confirmation at the desired time. I expected a
| call saying that they were overbooked, though strangely enough
| the place was not packed (I guess they kept some tables open
| for social distancing / walk-ins / phone reservations).
|
| This is really security 101 on the same level as SQL injection.
| Strange how every dev seems to know how to hook up something to
| an API but still makes the same mistakes.
| bhaak wrote:
| It's always been this way.
|
| But advantages aren't always that obvious. In my case, it was
| just "don't reload the page while waiting for the server to
| respond" as the servers were DDOSed on the first day they
| opened the appointments. Obvious to many programmers, not so
| obvious to the general public that you might lose your position
| in the queue if you reload the page and not wait for a proper
| error page before reloading.
|
| Another advantage was getting my PS5. I wrote a simple web
| scraper that just looked if the shops had any PS5 in stock and
| wrote that into a static RSS I uploaded to my webserver and
| stuck this into my regular RSS reader.
|
| Over the last year, this way I could provide myself and 3
| friends/acquaintances the opportunity to get a PS5.
|
| Other people can build tables and shelves. I'm a programmer.
| sergiomattei wrote:
| I did the same.
|
| When vaccinations opened up for the elderly, I wrote a script
| to check open slots and get my grandparents a vaccine
| appointment.
|
| They patched it up, but similar to the author, I managed to get
| them one soon after through their website. I'm wondering if
| we're even talking about the same website.
|
| Wild days.
| melling wrote:
| "This didn't turn out to be necessary (more appointments opened
| up pretty soon anyway), but it was fun."
| TrapLord_Rhodo wrote:
| I used to play a game called runescape and there was this client
| called OS Buddy that had data dump of all 'buy' and 'sell' orders
| in the grand exchange.
|
| put the data in python and I calculated the "flip" ratio, average
| and liquidity of the items.
|
| Now that was all profitable, but around this time there was a
| phase where everyone discovered that you could do pump and dumps
| and make obscene profits. They worked exactly how normal pump and
| dumps work, a select few insiders buy a bunch of the random item
| and then after a few days they annouce it to the clan and start
| selling their item. I could see a surge in abnormal buys for
| items with low liqidity and effectively have a birds eye view of
| all the pump and dumps before they aree 'Public".
|
| I never had to have a job through high school as i could sell the
| GP and make around $50-60 a day!
| vorvac wrote:
| Back when you could create accounts with usernames instead of
| emails, I wrote a c# program that would generate a random
| user/password/DOB, go through the three web forms, and create
| an account. I integrated this with TOR so that on every third
| account, I'd switch IPs to prevent throttling. I'd let the
| thing run almost constantly and ended up with thousands of
| accounts.
|
| I sold these account lists to botters who would then go on to
| to their thing. Made a decent amount of money from this too!
| TrapLord_Rhodo wrote:
| it'd be interesting to make a mmorpg game that was entirely
| based on building bots. an MMORPG Programming idle.
| thequux wrote:
| Have you seen screeps? (https://screeps.com/)
| beamatronic wrote:
| >> secret undocumented APIs
|
| There's precedent in the US for going to jail for doing this
| anthomtb wrote:
| My SO is not always reliable when it comes to handling home
| duties while I'm away for work. So I setup a little Python script
| to send a text message with a TODO list every day. Twilio handles
| SMS, reminders are store in sqlite3, and cron runs the script
| once a day. It lives on a DreamCompute instance so (hopefully) no
| worries of a local power outage eliminating crucial (ok, not
| really that crucial) reminders.
|
| Are there better ways to do this? Undoubtedly. But I sure had a
| good time making it work.
| svilen_dobrev wrote:
| if anyone finds any of these useful...
|
| https://github.com/svilendobrev/svd_bin (terminal + sh setup ,
| version-control, lots of commands for this or that)
|
| https://github.com/svilendobrev/svd_util (python stuff)
| creeble wrote:
| If anyone is interested in a little script that grabs an image
| from a webcam pointed at a 7-segment LED display and returns the
| numbers it finds, let me know.
|
| It uses the ironically-named "Let's Go Digital" training set for
| the Tesseract OCR program. It works somewhat poorly, but good
| enough to read my hydronic-heat boiler's display to let me know
| that it didn't fire up in the middle of the night, so that I can
| get up and clean the flame probe.
| Zhyl wrote:
| I feel like 'tiny personal programs' is one of the bigger reasons
| to teach 'everyone' to code.
|
| Everyone has something in their life that is very specific to
| them that they would be much happier if it were 'just so'.
| Writing tiny scripts or being able to dive into the
| config/settings of something is a good way to get rid of some
| pain points.
| DrBoring wrote:
| > teach 'everyone' to code.
|
| I wonder if coding classes will be the new "shop class" .
| https://www.lexico.com/en/definition/shop_class
|
| In 8th grade, I took a compulsory wood working class. I guess
| it was a skill that adults thought children should learn.
|
| By that point, I had already been coding for 6 years. My school
| had a computer lab, but no coding was taught .... just typing.
| Also we played networked Oregon Trail Deluxe once or twice.
| prometheus76 wrote:
| I wish more of the engineers I work with had taken a wood
| shop class, so that they would learn about things like kerf,
| working with things that are out of square, tolerances, and
| how certain milling or lathing operations are impossible.
| Most of the young engineers I work with only know about
| drawing things and running simulations on them, rather than
| how things are actually built.
| lasfter wrote:
| I took a wood shop class in high school and did not learn
| any of those things, I learned how to make spoons, boxes,
| and cabinets.
| prometheus76 wrote:
| Fair point. But even learning how to measure things, mark
| them, cut them out, and how to assemble things would help
| my young engineer coworkers.
| iak8god wrote:
| For this reason, I often recommend 'Automate the Boring Stuff
| with Python' (https://automatetheboringstuff.com/) to
| beginners. It hits the basics and then moves pretty quickly to
| address: OK, what can _I_ actually use this for?
| v0x wrote:
| I am not a programmer, but it has been fun learning little
| bits of Python and making scripts to automate tasks.
|
| We have folders for clients at work and everything older than
| a couple of years should be archived, aside from certain
| legal documents. Building a script to check if any file is
| older than a certain date and checking that it does not
| contain certain words in the filename, was really easy, and
| useful, and gave me a good feeling of satisfaction seeing it
| actually work.
| syshum wrote:
| I think we need to teach people the basics of computer
| operations before learnToCode...
|
| Computer Illiteracy is still very high, even today lots of
| people can not tell the difference between their computer
| monitor, and their computer.
| Minor49er wrote:
| Apparently Gen Z has trouble even understanding filesystems
|
| https://futurism.com/the-byte/gen-z-kids-file-systems
| jxramos wrote:
| This right here. So often general purpose software winds up
| being some feature anemic app that focuses on some common
| denominator functionality. Plugin and extension support has
| been great to expand capabilities in general to make said
| software less confining.
| coreyp_1 wrote:
| I wrote a program to distribute my lecture slides to my students
| in real time.
|
| When I was a University Professor, I taught Theory of Computing
| (among other classes). I did not want to maintain two sets of
| slides (fill-in-the-blank style), and I didn't want the students
| to have to write non-stop during the lecture, so I wrote a couple
| of programs to distribute the slides in real time during the
| lecture.
|
| Part 1: C++. A program ran on my computer. When I pressed a
| button, it took a screen shot of my chosen monitor and sent it to
| my server. Communication via websockets.
|
| Part 2: Browser. Students connected to my server at the start of
| class. As I lectured, the slides appeared in their browser
| automatically. Of course, they could click through all previous
| slides (for that day as well as previous lectures), but if they
| were not actively browsing the slides, then the newest slide
| presented itself to them automatically. (Technically, it was
| always one slide behind, because I would not release a slide
| until I was done talking about it.) Communication via websockets.
| It worked in lectures attended by 100+ students.
|
| Part 3: NodeJS. My server received screenshots from me (as well
| as some metadata), kept a small database of all past
| lectures/screenshots, and served a browsable interface to the
| students. It routed all the websocket connections so that
| everything "just worked"TM.
|
| I thought it was cool. The students complained that the slides
| were not searchable like a PDF. I directed them to the index of
| the textbook.
| derekp7 wrote:
| One I did when I was much younger was after a trip to a Cracker
| Barrel restaurant. They have these golf tee peg games (triangle
| shaped board with holes and golf tees inserted). There are rules
| for doing jumps and removing pegs, with the goal of getting down
| to 1 peg remaining.
|
| So I went home, fired up basica on my PCjr, and wrote a brute-
| force solver for it. Turns out there something like tens of
| thousands of possible solutions.
|
| Then it became a challenge, to filter out duplicates (each
| solution appears 3 times if you apply it to the board with each
| 120 degree rotation, plus you have mirrors of these, etc). Was an
| amazing feeling for a youngster getting into computers.
| spc476 wrote:
| I did the same thing (only under Linux, not MS-DOS). I also
| found out that leaving 8 pegs is _way_ harder than just 1 peg
| (2 ways, excluding reflections and rotations). And for 10 pegs,
| only 1 way.
|
| Edit: Update number of ways to leave 8 pegs, and added number
| of ways to leave 10 pegs left.
| ectopod wrote:
| https://en.wikipedia.org/wiki/Peg_solitaire
| tomcam wrote:
| Mad props. I never managed to finish a one night project in one
| night.
| jrockway wrote:
| I thought about writing a program to get myself a vaccine
| appointment, but ultimately decided that we probably didn't want
| to vaccinate people in order of software engineering ability. I
| don't have to physically go to work, and can afford to have
| groceries dropped off in front of my apartment, so there was
| really no reason I should get the vaccine before everyone else. I
| can just self-quarantine with zero inconvenience or consequence,
| so probably a better use of limited resources to give it to
| someone else first.
|
| But at the same time, I also feel like literally nobody is
| looking out for you personally in the pandemic. I got the
| impression that pharmacies flat out lied to the government about
| vaccine availability (city websites would be like "oh yeah your
| CVS has tons of extra capacity" but then they have no
| appointments, and when you do get an appointment and show up,
| they turn you away). In that case, you have no choice but to DoS
| them to meet your basic medical needs. (Insert rant about how I
| was first able to buy N95 masks and at-home COVID tests in
| January 2022, 2 years after the first case. Now I have them for
| next time, I guess.)
| shimonabi wrote:
| I had a relly nice free seaside summer vacation because of a
| Python script.
|
| In our country we got vouchers to take a holiday because of
| Covid, but I couldn't use Booking.com because not all landlords
| had the proper paperwork to be able to redeem the voucher.
|
| I wrote a script to e-mail all the properly registered landlords
| from a government list in a particular region with my
| requirements and then manually selected the best offer. I had a
| really good time.
| guruparan18 wrote:
| Interesting to read the "dice rolling" part.
|
| > investigating dice rolling patterns A friend showed me a dice
| rolling game where you roll a bunch of dice and add up the
| values. I mentioned that if you roll enough dice and add up all
| the values, at some point it gets a lot less "random".
|
| And result turned out "true"? Rolled a die for 2500 times and the
| sum is all around 8500! I wonder what would be the results for
| 25/250 times? So, this is sum(expectations).. and for rolling a
| die, it is 3.5 [(1+2+3+4+5+6)/6 => 21/6], so the answer was 3.5 x
| 2500 = 8750. Should hold good for all numbers relatively large.
| matja wrote:
| https://en.wikipedia.org/wiki/Law_of_large_numbers
| alskdjflaskjdhf wrote:
| This is a classic illustration of the Central Limit Theorem--in
| fact, the example is even on the Wikipedia page [0]. The
| distribution tends towards a normal distribution as n increases
| (though to actually take the limit you need to rescale).
|
| [0]
| https://en.wikipedia.org/wiki/Central_limit_theorem#Applicat...
| amir wrote:
| to disable retweets on Twitter you can add "RT @" to the list of
| muted words
| punnerud wrote:
| Using print in Python to generate HTML and piping the output to a
| file:
| https://gist.github.com/jvns/a552895b6f9b523276e88d7e7506ee8...
|
| Always used append to file, but this is easier to debug/iterate.
| Thanks for the trick.
| pkdpic wrote:
| Yes! Tiny programs! And from one of my favorite zine makers and
| big inspirations for switching careers / getting a programming
| job. I need to make more of these at work. API team too busy to
| build an endpoint my team needs literally every day? No shame in
| making a mini webscraper and never wasting another minute asking
| them :^)
| unforswearing wrote:
| I am self-taught and little scripts like these were my entry into
| programming. Favorite programs of mine include a script to tell
| me when a boutique guitar pedal would be available from the maker
| to avoid paying +200% markup in the reseller market[0], and more
| recently I created a "todo focused markup language"[1].
|
| [0]:
| https://gist.github.com/unforswearing/db73475f333809119ae3dd...
|
| [1]: https://github.com/unforswearing/todo_markup.js
| davchana wrote:
| I made a html js + google apps script timesheet thing, its at
| https://spa.bydav.in/tsDMV/
|
| A simple html js collects my time and date, and come fields, and
| ajax it to Apps Script running as web app.
|
| Script logs it into a sheet, recent rows on top.
|
| The html page has a link to get the timesheet. On click, it again
| asks the apps script to send back this month's time sheet data as
| json, shows it as a table.
|
| Although no chance, but still all of these ajax expect a
| password.
|
| ====
|
| Recently I got into telegram bot, a multi bot. It has a /help
| command. Help describe the expected command keywords. Backend is
| again Google apps script. A string split, an switch case.
| hughrr wrote:
| I had a 200 line python script running on a junker PC that pulled
| a not insignificant amount of cash in. It was an arbitrage system
| that looked for poorly listed items in a couple of eBay niches.
| I'd literally buy the items it identified and then list them
| properly and reship. Average margin was 60%. On one occasion I
| managed to nab something for PS15 and resell for PS675 with a 4
| day turnaround.
|
| Alas I collapsed the whole niche in the end.
|
| Edit: all it did was every 10 minutes scrape some carefully
| crafted eBay searches with beautiful soup 4, do some custom
| filtering, remove any duplicate items it had already seen (stored
| in redis), then send me an email via SES with the links in it
| where I would make a decision.
| kzrdude wrote:
| Can you tell what the niche was? Collectible items or not?
| hughrr wrote:
| Not collectible. Specialist portable industrial equipment is
| all I'm saying :)
|
| The script was almost irrelevant compared to the discovery of
| the niche.
| simlevesque wrote:
| Thank you for the Fringe calendar !
| sailorganymede wrote:
| My parents work at a care home and every now and then, they will
| have a funny issue that I'll try solve with code. Like, the staff
| tried going paperless so important documents needed to be hosted
| somewhere and a QR code was used to link them. It's little things
| like this that honestly bring so much joy
| frans wrote:
| My tiny program regularly scans a dropbox folder. If it finds a
| pdf, it prints it and moves it to an archive folder. That was
| just to avoid every family member emailing me documents so it is
| nicely printed by the time they get home to study.
| Zircom wrote:
| That's brilliant, my girlfriend and roommates refuse to install
| the printer driver onto their computers and print things
| themselves so it's an endless cycle of bugging me to print
| things. Going to get this going when I get home today.
| senko wrote:
| Love these kinds of projects! To me they represent what's the
| most fun in programming.
|
| Here's a couple of mine:
|
| * During COVID lockdowns, the local grocery chain delivery slots
| were reserved a week or more in advance, but they were opening up
| a few slots each day; I wrote a scraper that would detect a newly
| opened slot and ping me on Slack, saving me a few days' wait on
| each delivery.
|
| * When I was buying a house, I wrote a scraper that would email
| me daily with what was new on the market; didn't end up buying
| through that, but I later repurposed it to check for used car
| classifieds and snatched a pretty nice deal.
| TrapLord_Rhodo wrote:
| >("using the API of local services" seems to be an ongoing theme,
| one of my favourite things is to use secret undocumented APIs
| where you need to copy your cookies out of the browser to get
| access to them)
|
| Would love more information about this one
| bloqs wrote:
| This is something I could never grasp. How on earth do you
| discover those things?
| jrkatz wrote:
| A basic step for securing a resource intensive API from DDOS
| attacks and some user impersonation attacks is to rely on a
| security token in a cookie set in the response to an earlier
| request. For example, a user may land on a web page and receive
| a unique, encrypted, short-lived security token cookie that is
| marked http only (inaccessible to javascript), plus a copy of
| the token in cleartext. When the user agent later polls an
| expensive API, it must send the cleartext token as part of the
| request. Server-side, that's compared to the encrypted copy
| (received from the cookie) and the expensive call is terminated
| early if they do not match.
|
| A DDOS attack that relies on a malicious ad or web page
| directing user agents to poll your expensive API in a loop will
| no longer work as well, because those user agents will not have
| the correct security token cookie value, and the attacker is
| unable to figure out what the correct value is for any given
| user agent running their malicious code. More
| sophisticated/expensive attacks are still available, but
| anything is an improvement.
|
| There are a few ways to skin this cat, so don't refer to the
| above as a how-to-guide - find a more authoritative voice on
| best practices than me, please, if you try to implement
| security like this.
|
| Anyhow, if you want to use an API implementing security like
| this, you copy the cookies out of your browser and feed them to
| your program so it can add them to the calls.
| prometheus76 wrote:
| This is super basic, but I finally sat down and learned the
| syntax for yt-dl and built a script for checking all of my
| favorite channels on youtube for any new content and archiving
| them locally. I was doing it manually before and that turned into
| a huge pain as my list of channels I wanted to archive continued
| to grow.
|
| Now it runs every night and I get notifications if it runs into
| errors.
| bonestamp2 wrote:
| When my wife and I were looking at buying an investment property,
| I built a little program to use Zillow's API to get tons of data
| for a particular area, make some calculations, and then sort the
| data in order of most potential profit as a rental (based on
| their estimated rental rates, which are not always perfect of
| course). Then I added some filters so I could find a property
| that met our other criteria.
|
| It worked really great, and we never ended up buying a property,
| but I couldn't help thinking this is a premium feature that
| Zillow could easily offer and charge for. If anybody at Zillow is
| interested, feel free to reach out.
| prova_modena wrote:
| I wrote a tiny program to help test the tire pressure sensors on
| my car. You can receive signals from these sensors using a cheap
| SDR dongle and a program called rtl_433. However, out of the box
| the process is bit messy and requires tweaking and
| interpretation. So I wrote a bash script that wraps rtl_433,
| guides you through the process in an easy-to-understand way and
| summarizes the results.
|
| A program like this is not full automation, but it greatly
| reduces the cognitive overhead of doing this task. Now when I
| suspect a sensor is bad, I can just pull out the script without
| having to get back up to speed on how to orchestrate the
| component programs and interpret the results. It's like having a
| well-designed jig for a woodworking task, hanging on the wall for
| later use.
|
| Writing tiny programs like this is really satisfying because the
| scope is small enough that I can carefully consider all
| decisions. I spent a lot of time reading through guides and code
| samples, considering dependencies vs pure bash, understanding
| shellcheck warnings, and making the code conform to a style
| guide. All not strictly necessary to achieve the goal, but I
| learned a lot and take satisfaction in a small, but refined
| result.
| el_benhameen wrote:
| Do you have the code for this living anywhere? I think I have a
| bad TPMS sensor in one of my tires and it sounds like your tool
| would be immensely helpful in figuring out which one.
| ajolly wrote:
| Feed rtl_433 into home assistant, can easily create alerts
| based on the output.
| jessetemp wrote:
| Can anyone elaborate on "secret undocumented APIs where you need
| to copy your cookies out of the browser to get access to them"?
| That sounds fascinating
| mynameismon wrote:
| So as a part of my daily activities, I have to use a portal
| that has an absolutely terrible interface, with text reflowing
| on every click, parsing and loading a 1 MB JSON file from an
| internal API taking about 5 minutes (of course, its a janky SPA
| with developers filling it with useless JS).
|
| Irritated, one day, I fired up dev tools, opened the Networks
| tab and copied the relevant API request that was being fired as
| a bash command, converted it to Python [1]. After that, I
| merely parsed the JSON, dumped it into a HTML file, and saved
| it on my hard drive so I wouldn't need to login to the portal
| again.
|
| [1]: https://curlconverter.com/
| gen220 wrote:
| If you look at the `network` tab in developer tools, you'll see
| every http request made by your browser, and the headers that
| are sent along with the request.
|
| e.g. when you hit the `reply` button in HN, it'll make some
| HTTP request, with a cookie in the header that identifies your
| user session.
|
| You can right-click on the request and click "copy request as
| curl", and then paste it into a terminal to duplicate the
| request locally.
|
| Fore example, Stripe has some API endpoints that are only
| available to logged-in dashboard.stripe.com users. They are not
| documented in the public API spec, and they have more powers
| than the public API. If you do the actions in the dashboard and
| record the requests, you can use those undocumented APIs: all
| you need it a session token!
|
| This leads down an unstable path, where you write a browser-
| emulating script to login to $service, scrape the cookie, and
| then use the cookie to make requests against the $service's
| undocumented API. Not a good idea to build companies on this
| logic, but it's fine and fun for personal projects.
| ckp95 wrote:
| May as well flog the little zsh thing I wrote:
|
| https://github.com/ckp95/fwf/
|
| fwf -- "Filter With Feedback". It lets you write sed/awk/jq/grep
| etc things interactively. You type in a UNIX filter, and on every
| keystroke it renders the result in a column on the right, which
| you can compare to the original on the left (watch the video
| demonstration on the link if that description is confusing). I
| wrote it to make the feedback loop for text-processing as quick
| as possible. I use it all the time now. It makes the "activation
| energy" for writing shell pipelines a lot lower, if that makes
| sense.
| belkarx wrote:
| Very cool, thanks.
| trickjarrett wrote:
| Most of mine are one-time use or limited use. I have a few
| ongoing dev projects for personal use:
|
| - My smaller blog is a (poorly) written CMS that makes a static
| site. Almost zero reason other than I wanted the experience of
| building my own CMS, could easily use another tool.
|
| - I have a 'Pick'em' with friends for MLS soccer. It's a fully
| coded website, definitely my biggest ongoing project.
|
| - I have a tool which looks at upcoming soccer games around the
| world and recommends the best ones to watch (looking at a number
| of variables such as relative ranking in the league, historic
| goals for and against, gambling odds, etc.)
|
| - I have a weight and body fat tracker I use to enter my daily
| weigh in and see graphs and charts of my progress.
| magamig wrote:
| I did the same for the COVID vaccine
| https://magamig.github.io/posts/scraping-for-a-covid-19-vacc...
| nunez wrote:
| Ages ago, I had a second job as a speed-dating host for a social
| events company. I did it partly for the (beer) money, partly to
| meet women at her other social events for free (she charged for
| them), and partly to get her brash-but-actually-quite-useful
| online dating advice (that helped me find my now-wife, now that I
| think about it!).
|
| The basic premise was simple: get 10-20 people into a hip
| restaurant or bar, set up tables, have women pick the tables they
| sit at, then have the men go from table to table having five-
| minute conversations. After everything was said and done,
| everyone would write the names of people they wanted to see again
| on a form and hand them to me.
|
| I would manually go through each form and send emails to matches
| after the event was over. I also had a 24-hour soft SLO and a
| hard 72-hour SLO. This usually took me a whole 2-3 hours to do
| per event. I also mismatched people several times because humans
| gonna human.
|
| I was very fluent in PowerShell at the time, so upon realizing
| that this can be automated with a matrix solver, I wrote a script
| that took the names of everyone that submitted a form, then, name
| by name, asked for everyone's matches, and sent everyone their
| match emails from a template I wrote. It took me about six hours
| to write and run through manual tests. (I know better now and use
| TDD for everything!)
|
| My 2-3 hour error prone process went down to five minutes, tops,
| with no errors. It was beautiful. Towards the end of my stint
| doing this job, I was able to run this script _as people gave me
| back their forms_ and have emails queued up to send out once
| everyone was gone. I spent the remaining 2.95 hours I got back
| walking to my favorite izakaya and eating their amazing pork
| belly rice bowl.
|
| Thanks, Julia, for making me miss my twenties for the first time
| in a while!
|
| (I've written several small utility apps over the ages. It's a
| shame when I hear people say that they actively don't program
| outside of work; the ability to write code to bend the world to
| your will is an amazing superpower!)
| dbrgn wrote:
| I can relate to the document scanning issue. In my case, I
| digitize all documents I get on paper. For this, I've written
| this wrapper around scanimage and ocrmypdf:
| https://github.com/dbrgn/pydigitize
|
| It does the following steps:
|
| 1. Scan a document with any scanner that supports SANE (ADF
| supported), 2. straightening and cleaning of scanned documents,
| 3. run OCR on PDF so that it becomes searchable, 4. generate
| PDF/A file for archival, 5. add keywords to the PDF file
|
| I've probably saved many hours with this script, even when taking
| into account the time it took me to write it.
|
| Tiny projects don't always save time, but they sure are
| gratifying when they work as intended!
| BeetleB wrote:
| I'll try your version out.
|
| I went through this pain when I bought a document scanner some
| years ago - there was no good solution on Linux that would let
| me from the command line scan, clean, OCR, and output a PDF. I
| found lots of scripts like yours, but none that was complete. I
| finally took an existing Perl script and hacked it to my needs.
|
| Features one should have:
|
| 1. Output to PDF.
|
| 2. Option to OCR (optional)
|
| 3. Clean up (e.g. skip blank pages, straighten pages, etc)
|
| 4. Allow one to specify quality/dpi
|
| 5. Select grayscale vs color
|
| 6. Duplex vs single page
|
| 7. Dynamically recognize the size of the page.
|
| The last one is the one I'm missing - if I scan something long,
| it trims it to fit a Letter size page.
| mindslight wrote:
| I wrote a keypress-driven graphical utility that's basically a
| wrapper around scanadf, that allows me to call scanadf
| repeatedly, preview, delete pages, etc. For instance if a page
| misfeeds, I pull the remaining stack out, delete the bad scan,
| and restart from where it went wrong. When finished, the
| graphical window disappears, and it writes all the current
| pages out as an archive - the masters are checksummed,
| compressed with FLIF, converted to some low quality JPGs, and
| the whole thing is stuck in a ZIP archive with extension .cbz
| (viewable with evince).
|
| The eventual goal is to transcode all these masters into nicer
| OCRed PDFs, but I've been making do with the low quality JPGs
| just fine. Your script seems like a great starting point to
| actually get this done!
| chrisweekly wrote:
| Cool project!
|
| Related tangent: I haven't looked into OCR, but for a simple
| "iPhone camera to 'scanned' PDF", the Dropbox iOS app has a
| surprisingly good implementation.
| jwong_ wrote:
| I use the "Files" application from Apple, and it works pretty
| well too.
|
| I was surprised, and have largely made it my ingress for
| receipts/paperwork.
| dbrgn wrote:
| I prefer not to upload all my potentially private documents
| into a cloud service :)
|
| OCRmyPDF (https://ocrmypdf.readthedocs.io/) actually does a
| pretty good job! It also handles deskewing and all other
| stuff that's necessary for good OCR results.
| zem wrote:
| her script reminded me that i never did get my scansnap working
| properly under linux :( will have to give it another go
| sometime.
| Nouser76 wrote:
| I have a local media collection that I like to have as background
| noise/entertainment while I work. One thing I didn't like about
| self-managed libraries vs radio/television/etc. is that I still
| had the cognitive load of choosing what to watch, specifically.
| So I wrote a small program to take a list of shows and shuffle
| them[0] then interleave episodes. Depending on when you start
| this channel, it has a time offset so you're dropped in the
| middle of an episode (just like channel surfing!), and has
| support for showing a certain show only in sequential order[1],
| and even adding commercials between episodes.
|
| [0] Native shuffle in my media player didn't feel random enough,
| with a poor play count distribution. Switching to
| programmatically shuffling means I can also weight things so that
| a specific show is more/less likely to show back-to-back.
|
| [1] I actually only consider the smallest continuous run of
| unwatched episodes, starting from the end of the series, and
| interleave vs shuffling the episodes.
| somishere wrote:
| Love this stuff. I use regular mini side programs/projects as
| motivation-boosting procrastination tools. Oxygen to a tired
| mind. Just yesterday I saw a front page post on hn that I didn't
| love the solution for and so took 3hrs to byo (3hrs from another,
| only slightly less-tiny, project). Often tiny programs form the
| seed of much bigger efforts. My last two major projects, both now
| well-funded scientific programs, can be found buried in tiny-
| program / MIT form on my codepen. In fact looking at it again now
| I have a codepen littered with tiny personal programs, most of
| which are utility-driven, I'd completely forgotten about, and
| would make no sense to anyone else.
| vorvac wrote:
| Back in high school I would try to play CS 1.6 on the library
| computers. The librarians had access to screen viewing software
| on all computers in the library and quickly caught me every time.
|
| I played around with visual studio C# and created an application
| that would continuously monitor running applications (every X
| ms), detect when a specified .exe was found, and either (1)
| constantly kill it, (2) display a message, or (3) run a different
| .exe.
|
| Never quite got to s1mple's level, but I did play a good amount
| of CS after that!
| sanderjd wrote:
| Here's mine: Back in like 2006 when I was in college and they
| first released games on facebook, there was a game my friends
| liked that was multiple choice, matching song lyrics to artists
| (if I remember correctly). It was always four choices, you would
| get points for a correct answer and not lose any for an incorrect
| answer, then there was a leaderboard amongst your friends. So I
| thought clearly the right way to win this game is to write a
| program that just chooses randomly (actually I think it just
| always chose the first choice), but as quickly as the server will
| allow. My poor friends woke up the next morning to find I had
| about 1000x their points. A fun hack, but I also regret it
| because it ruined a fun game for me and my friends; I couldn't
| figure out how to reset my score.
| jgrahamc wrote:
| I wrote a bunch of Lotus 1-2-3 code for a small business in 1991.
| Got paid cash which paid for an entire six week Amtrak adventure
| round the US.
___________________________________________________________________
(page generated 2022-03-09 23:00 UTC)