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;
|
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 monitors on desk */
|
||||||
/* Secondary CRT monitors - positioned relative to main monitor */
|
/* Secondary CRT monitors - positioned relative to main monitor */
|
||||||
.secondary-screen {
|
.secondary-screen {
|
||||||
|
|
@ -833,11 +811,6 @@ body {
|
||||||
text-decoration: none !important;
|
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-mounted CRT - on desk left side */
|
||||||
.desk-monitor {
|
.desk-monitor {
|
||||||
|
|
@ -896,54 +869,6 @@ body {
|
||||||
animation: pulse 2s ease-in-out infinite;
|
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 {
|
.monitor-stand-small {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: -20px;
|
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 {
|
@keyframes blink-fast {
|
||||||
0%,
|
0%,
|
||||||
100% {
|
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 {
|
@keyframes pulse-slow {
|
||||||
0%,
|
0%,
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,21 @@ draft: false
|
||||||
|
|
||||||
## Links I Found Interesting
|
## 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
|
## 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