Updating weekly post
This commit is contained in:
parent
ac9033c958
commit
f1460861b9
3 changed files with 60 additions and 146 deletions
|
|
@ -801,28 +801,6 @@ body {
|
|||
pointer-events: none;
|
||||
}
|
||||
|
||||
/* Cables on desk - now using SVG for curves */
|
||||
.desk-cables {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
pointer-events: none;
|
||||
z-index: 7;
|
||||
}
|
||||
|
||||
.cable-svg {
|
||||
position: absolute;
|
||||
bottom: 20%;
|
||||
z-index: 4;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.cable-svg svg {
|
||||
filter: drop-shadow(1px 1px 2px rgba(0, 0, 0, 0.5));
|
||||
}
|
||||
|
||||
/* Secondary monitors on desk */
|
||||
/* Secondary CRT monitors - positioned relative to main monitor */
|
||||
.secondary-screen {
|
||||
|
|
@ -833,11 +811,6 @@ body {
|
|||
text-decoration: none !important;
|
||||
}
|
||||
|
||||
/* Wall-mounted CRT 1 - upper left relative to main */
|
||||
|
||||
/* Wall-mounted CRT 2 - upper right, larger, closely stacked */
|
||||
|
||||
/* Wall-mounted CRT 4 - lower left relative to main */
|
||||
|
||||
/* Desk-mounted CRT - on desk left side */
|
||||
.desk-monitor {
|
||||
|
|
@ -896,54 +869,6 @@ body {
|
|||
animation: pulse 2s ease-in-out infinite;
|
||||
}
|
||||
|
||||
/* Small equipment on desk */
|
||||
.desk-equipment {
|
||||
position: absolute;
|
||||
bottom: 10%;
|
||||
background: linear-gradient(145deg, #4a4a4a 0%, #2a2a2a 100%);
|
||||
box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.6);
|
||||
z-index: 8;
|
||||
}
|
||||
|
||||
.modem {
|
||||
right: 25%;
|
||||
width: 35px;
|
||||
height: 12px;
|
||||
}
|
||||
|
||||
.modem::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
right: 5px;
|
||||
transform: translateY(-50%);
|
||||
width: 2px;
|
||||
height: 2px;
|
||||
background: #0f0;
|
||||
border-radius: 50%;
|
||||
box-shadow: 0 0 4px #0f0;
|
||||
animation: pulse 1s ease-in-out infinite;
|
||||
}
|
||||
|
||||
.power-strip {
|
||||
left: 35%;
|
||||
width: 50px;
|
||||
height: 8px;
|
||||
background: linear-gradient(145deg, #1a1a1a 0%, #0a0a0a 100%);
|
||||
}
|
||||
|
||||
.power-strip::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 10px;
|
||||
transform: translateY(-50%);
|
||||
width: 3px;
|
||||
height: 3px;
|
||||
background: #f00;
|
||||
border-radius: 50%;
|
||||
box-shadow: 0 0 4px #f00;
|
||||
}
|
||||
.monitor-stand-small {
|
||||
position: absolute;
|
||||
bottom: -20px;
|
||||
|
|
@ -1099,53 +1024,6 @@ body {
|
|||
}
|
||||
}
|
||||
|
||||
/* Widgets and gadgets */
|
||||
.widget {
|
||||
position: absolute;
|
||||
bottom: 8%;
|
||||
border-radius: 2px;
|
||||
z-index: 6;
|
||||
}
|
||||
|
||||
.router {
|
||||
left: 25%;
|
||||
width: 170px;
|
||||
height: 50px;
|
||||
background: linear-gradient(180deg, #2a2a2a 0%, #1a1a1a 100%);
|
||||
border: 1px solid #333;
|
||||
box-shadow:
|
||||
0 2px 8px rgba(0, 0, 0, 0.5),
|
||||
inset 0 1px 2px rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
.router::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 10px;
|
||||
transform: translateY(-50%);
|
||||
width: 4px;
|
||||
height: 4px;
|
||||
background: #0f0;
|
||||
border-radius: 50%;
|
||||
box-shadow: 0 0 5px #0f0;
|
||||
animation: blink-fast 1s infinite;
|
||||
}
|
||||
|
||||
.router::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 20px;
|
||||
transform: translateY(-50%);
|
||||
width: 4px;
|
||||
height: 4px;
|
||||
background: #ff0;
|
||||
border-radius: 50%;
|
||||
box-shadow: 0 0 5px #ff0;
|
||||
animation: blink-fast 1.5s infinite;
|
||||
}
|
||||
|
||||
@keyframes blink-fast {
|
||||
0%,
|
||||
100% {
|
||||
|
|
@ -1156,30 +1034,7 @@ body {
|
|||
}
|
||||
}
|
||||
|
||||
.hard-drive {
|
||||
left: 30%;
|
||||
bottom: 20%;
|
||||
width: 55px;
|
||||
height: 35px;
|
||||
background: linear-gradient(180deg, #3a3a3a 0%, #2a2a2a 100%);
|
||||
border: 1px solid #444;
|
||||
box-shadow:
|
||||
0 2px 8px rgba(0, 0, 0, 0.5),
|
||||
inset 0 1px 2px rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
.hard-drive::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 8px;
|
||||
right: 8px;
|
||||
width: 3px;
|
||||
height: 3px;
|
||||
background: #f00;
|
||||
border-radius: 50%;
|
||||
box-shadow: 0 0 5px #f00;
|
||||
animation: pulse-slow 2s infinite;
|
||||
}
|
||||
|
||||
@keyframes pulse-slow {
|
||||
0%,
|
||||
|
|
|
|||
|
|
@ -15,7 +15,21 @@ draft: false
|
|||
|
||||
## Links I Found Interesting
|
||||
|
||||
- [name](https://url) - desc
|
||||
- [POSSE](https://indieweb.org/POSSE) - I have killed off pretty much all social media, but I might look into posting more on Bluesky or setting up a Mastodon again, and this would be something to keep in mind.
|
||||
|
||||
## Weekly Listening Stats
|
||||
|
||||
**Total Tracks:** 231
|
||||
|
||||
**Top 5 Artists:**
|
||||
|
||||
- [Lazerhawk](https://www.last.fm/music/Lazerhawk) - 14 plays
|
||||
- [System of a Down](https://www.last.fm/music/System+of+a+Down) - 14 plays
|
||||
- [Mystery Skulls](https://www.last.fm/music/Mystery+Skulls) - 8 plays
|
||||
- [Carpenter Brut](https://www.last.fm/music/Carpenter+Brut) - 7 plays
|
||||
- [Gunship](https://www.last.fm/music/Gunship) - 7 plays
|
||||
|
||||
_Note: Not all my devices scrobble, so this is just what I have listened to at a computer._
|
||||
|
||||
## Next Week
|
||||
|
||||
|
|
|
|||
45
lastfm-week.sh
Executable file
45
lastfm-week.sh
Executable file
|
|
@ -0,0 +1,45 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Last.fm Weekly Stats Script
|
||||
# Usage: ./lastfm-weekly.sh
|
||||
|
||||
# Load environment variables from .env file
|
||||
if [ -f .env ]; then
|
||||
export $(cat .env | grep -v '^#' | xargs)
|
||||
else
|
||||
echo "Error: .env file not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check required variables
|
||||
if [ -z "$LASTFM_API_KEY" ] || [ -z "$LASTFM_USERNAME" ]; then
|
||||
echo "Error: LASTFM_API_KEY and LASTFM_USERNAME must be set in .env file"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
API_BASE="http://ws.audioscrobbler.com/2.0/"
|
||||
|
||||
# Get current Unix timestamp
|
||||
NOW=$(date +%s)
|
||||
# Get timestamp from 7 days ago
|
||||
WEEK_AGO=$((NOW - 604800))
|
||||
|
||||
# Fetch top artists for the week
|
||||
TOP_ARTISTS=$(curl -s "${API_BASE}?method=user.gettopartists&user=${LASTFM_USERNAME}&api_key=${LASTFM_API_KEY}&format=json&period=7day&limit=5")
|
||||
|
||||
# Fetch recent tracks to count this week's scrobbles
|
||||
RECENT_TRACKS=$(curl -s "${API_BASE}?method=user.getrecenttracks&user=${LASTFM_USERNAME}&api_key=${LASTFM_API_KEY}&format=json&from=${WEEK_AGO}&to=${NOW}&limit=1")
|
||||
|
||||
# Get total track count
|
||||
TOTAL_TRACKS=$(echo "$RECENT_TRACKS" | jq -r '.recenttracks["@attr"].total')
|
||||
|
||||
# Output in markdown format
|
||||
echo "## Last.fm Weekly Stats"
|
||||
echo ""
|
||||
echo "**Total Tracks:** ${TOTAL_TRACKS}"
|
||||
echo ""
|
||||
echo "**Top 5 Artists:**"
|
||||
echo ""
|
||||
|
||||
# Parse and display top 5 artists as markdown links
|
||||
echo "$TOP_ARTISTS" | jq -r '.topartists.artist[] | "- [\(.name)](\(.url)) - \(.playcount) plays"'
|
||||
Loading…
Add table
Add a link
Reference in a new issue