Given that your key has expired.
$ gpg --list-keys
$ gpg --edit-key KEYID
Use the expire command to set a new expire date:
/* | |
I was looking to try a non-kindle e-reader, but my library kept weighing me down. While I had calibre and the de-drm plugin, I found the downloaded books on my kindle were in kfx format and weren't playing well with calibre, even with the kfx input plugin. | |
Further, I found downloading books directly from web (Amazon > content library) did give me an azw3 file, which works well with de-drm. | |
To automate part of the process, I wrote a short js script. It doesn't walk through all the pages in content library, but it does download all the books currently visible on the list. Amazon lets us view 25 books per page, so I just had to switch pages, run script, repeat. | |
The meat of this script is constructing the url used to start a download. Device type, serial number, customer id etc. will be different for everyone, so it's best to download one book manually and check the network inspector for the request details. Apart from the book's `key`, all other details remain same for all the books (at least they did for me |
import logging | |
from http.client import HTTPConnection | |
log = logging.getLogger('urllib3') | |
log.setLevel(logging.DEBUG) | |
# logging from urllib3 to console | |
ch = logging.StreamHandler() | |
ch.setLevel(logging.DEBUG) | |
log.addHandler(ch) |
NOTE: Do not use self signed certificates in PRODUCTION, for that use a certificate signed by some CA (Certification Authority), and then avoid man-in-the-middle attack.
#!/bin/sh | |
# | |
# Inspects branch name and checks if it contains a Jira ticket number (i.e. ABC-123). | |
# If yes, commit message will be automatically prepended with [ABC-123]. | |
# | |
# Useful for looking through git history and relating a commit or group of commits | |
# back to a user story. | |
# Thanks to https://medium.com/bytelimes/automate-issue-numbers-in-git-commit-messages-2790ae6fe071 |
(defun divisible (a b) | |
(equal 0 (% a b))) | |
(defun to_s (item) (format "%s" item)) | |
(defun fizzbuzz (num) | |
(let* ((fizz (if (divisible num 3) "fizz" "")) | |
(buzz (if (divisible num 5) "buzz" "")) | |
(combi (concat fizz buzz)) | |
(result (if (length> combi 0) combi (to_s num)))) |
-- ███████╗███╗░░░███╗░█████╗░░█████╗░░██████╗ | |
-- ██╔════╝████╗░████║██╔══██╗██╔══██╗██╔════╝ | |
-- █████╗░░██╔████╔██║███████║██║░░╚═╝╚█████╗░ | |
-- ██╔══╝░░██║╚██╔╝██║██╔══██║██║░░██╗░╚═══██╗ | |
-- ███████╗██║░╚═╝░██║██║░░██║╚█████╔╝██████╔╝ | |
-- ╚══════╝╚═╝░░░░░╚═╝╚═╝░░╚═╝░╚════╝░╚═════╝░ | |
-- | |
-- Open this script with 'Script Editor' on MacOS, then save it | |
-- inside /Applications as an 'Application', not 'Script'. |
# Just a copy of https://stackoverflow.com/a/30724359/1825727 | |
def from_hashstring(value) | |
json_string = value | |
.gsub(/([{,]\s*):([^>\s]+)\s*=>/, '\1"\2"=>') # Handle ruby symbols as keys | |
.gsub(/([{,]\s*)([0-9]+\.?[0-9]*)\s*=>/, '\1"\2"=>') # Handle numbers as keys | |
.gsub(/([{,]\s*)(".+?"|[0-9]+\.?[0-9]*)\s*=>\s*:([^,}\s]+\s*)/, '\1\2=>"\3"') # Handle symbols as values | |
.gsub(/([\[,]\s*):([^,\]\s]+)/, '\1"\2"') # Handle symbols in arrays | |
.gsub(/([{,]\s*)(".+?"|[0-9]+\.?[0-9]*)\s*=>/, '\1\2:') # Finally, convert => to : | |
JSON.parse(json_string) |
I hereby claim:
To claim this, I am signing this object:
# To get the resolution, multiply 118 by cm. For example, 7 cm image at 300ppi will be 7 * 118 = 826 px | |
RESOLUTION=826 | |
convert $1 -resize ${RESOLUTION}x${RESOLUTION}^ -gravity center -crop ${RESOLUTION}x${RESOLUTION}+0+0 +repage -blur 0x8 temp.jpg | |
convert temp.jpg $1 -resize ${RESOLUTION}x -gravity center -composite -matte "./output/$1-out.jpg" |