Compare commits
9 Commits
zanneth/in
...
zanneth/st
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e075834f98 | ||
|
|
a17d821b0e | ||
| 1cc464fa9b | |||
| 4c4e79e384 | |||
| ae57353e8f | |||
| fdb4840912 | |||
| 6f4ae177da | |||
| 9b9648d033 | |||
| 4ffc138909 |
55
.gitea/workflows/build-pdf.yml
Normal file
@@ -0,0 +1,55 @@
|
||||
name: Build PDF
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main, master ]
|
||||
pull_request:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
pdf:
|
||||
name: make pdf
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Go (from go.mod)
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version-file: go.mod
|
||||
check-latest: true
|
||||
cache: true
|
||||
|
||||
- name: Install Chrome and tools (no snap)
|
||||
run: |
|
||||
set -euxo pipefail
|
||||
if command -v sudo >/dev/null 2>&1; then SUDO=sudo; else SUDO=; fi
|
||||
$SUDO apt-get update
|
||||
# Base tools and fonts
|
||||
DEBIAN_FRONTEND=noninteractive $SUDO apt-get install -y --no-install-recommends \
|
||||
ca-certificates gnupg make fonts-liberation
|
||||
|
||||
# Add Google's official Chrome APT repo (avoids Ubuntu's snap-only chromium)
|
||||
$SUDO install -d -m 0755 /etc/apt/keyrings
|
||||
curl -fsSL https://dl.google.com/linux/linux_signing_key.pub | $SUDO gpg --dearmor -o /etc/apt/keyrings/google-linux-signing-keyring.gpg
|
||||
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/google-linux-signing-keyring.gpg] https://dl.google.com/linux/chrome/deb/ stable main" | \
|
||||
$SUDO tee /etc/apt/sources.list.d/google-chrome.list >/dev/null
|
||||
$SUDO apt-get update
|
||||
DEBIAN_FRONTEND=noninteractive $SUDO apt-get install -y --no-install-recommends google-chrome-stable
|
||||
|
||||
# Clean up apt lists to keep image lean
|
||||
$SUDO rm -rf /var/lib/apt/lists/*
|
||||
|
||||
- name: Build PDF
|
||||
env:
|
||||
# Ensure our tools pick Chrome first if multiple are present
|
||||
CHROME_PATH: /usr/bin/google-chrome-stable
|
||||
run: make pdf
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: output-pdf
|
||||
path: _dist/output.pdf
|
||||
if-no-files-found: error
|
||||
BIN
assets/font/aerosoldier.otf
Normal file
BIN
assets/img/circuit-board.jpg
Normal file
|
After Width: | Height: | Size: 5.9 MiB |
BIN
assets/img/computer_2_cool-3.png
Normal file
|
After Width: | Height: | Size: 687 B |
BIN
assets/img/crashman/crashman-1.png
Normal file
|
After Width: | Height: | Size: 247 KiB |
BIN
assets/img/crashman/crashman-2.png
Normal file
|
After Width: | Height: | Size: 227 KiB |
BIN
assets/img/crashman/crashman-3.png
Normal file
|
After Width: | Height: | Size: 227 KiB |
BIN
assets/img/crashman/crashman-bg.png
Normal file
|
After Width: | Height: | Size: 3.0 MiB |
BIN
assets/img/fashion.jpg
Normal file
|
After Width: | Height: | Size: 1.3 MiB |
BIN
assets/img/streetgeek-dogtags.jpeg
Normal file
|
After Width: | Height: | Size: 5.9 MiB |
BIN
assets/img/streetgeek-evangelion.png
Normal file
|
After Width: | Height: | Size: 1.9 MiB |
BIN
assets/img/streetgeek-java.png
Normal file
|
After Width: | Height: | Size: 2.0 MiB |
@@ -3,7 +3,9 @@
|
||||
- cover.html
|
||||
- hack-the-planet.html
|
||||
- wtf.html
|
||||
- ai-disclosure.html
|
||||
- drivingmissmuni.html
|
||||
- crashman.html
|
||||
- vranklevictim.html
|
||||
- pearlstreetcafe.html
|
||||
- gtkapplang-1.html
|
||||
@@ -11,6 +13,9 @@
|
||||
- gtkapplang-3.html
|
||||
- gtkapplang-4.html
|
||||
- broken-screen.html
|
||||
- fashion.html
|
||||
- streetgeek-1.html
|
||||
- streetgeek-2.html
|
||||
- windows-shirt.html
|
||||
- free-dirt.html
|
||||
- mr-nickel.html
|
||||
|
||||
129
pages/ai-disclosure.html
Normal file
@@ -0,0 +1,129 @@
|
||||
<style>
|
||||
#ai-disclosure-page {
|
||||
background: url("assets/img/circuit-board.jpg") no-repeat center center;
|
||||
background-size: cover;
|
||||
|
||||
font: 8.75pt/1.40 Tahoma, sans-serif;
|
||||
padding: 10px;
|
||||
hyphens: auto;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-family: "Heading Now";
|
||||
font-size: 23px;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-family: "Heading Now";
|
||||
font-size: 24px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
p {
|
||||
font-family: Helvetica, sans-serif;
|
||||
font-size: 12.75pt;
|
||||
}
|
||||
|
||||
/* Windows 98 styles — green/teal variant */
|
||||
div#overlay-window {
|
||||
background: #d4d0c8;
|
||||
|
||||
/* Vertically center the window in the page */
|
||||
position: relative;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
|
||||
h1#titlebar {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin: 0;
|
||||
padding: 4px 8px;
|
||||
min-height: 22px;
|
||||
font-weight: bold;
|
||||
color: #ffffff;
|
||||
background: linear-gradient(90deg, #004000 0%, #10a050 50%, #004000 100%);
|
||||
}
|
||||
|
||||
h1#titlebar img {
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
image-rendering: pixelated;
|
||||
}
|
||||
|
||||
h1#titlebar span {
|
||||
margin: 0 8px;
|
||||
}
|
||||
|
||||
div#content {
|
||||
background: #f0f0e8c0;
|
||||
padding: 10px;
|
||||
color: #000000;
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
span#dumb {
|
||||
font-family: "Heading Now";
|
||||
font-size: large;
|
||||
font-stretch: condensed;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
span.stuff {
|
||||
font-weight: bold;
|
||||
font-style: italic;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="ai-disclosure-page" class="page-base">
|
||||
<div id="overlay-window">
|
||||
<h1 id="titlebar">
|
||||
<img src="assets/img/computer_2_cool-3.png" alt="">
|
||||
<span>AI Disclosure</span>
|
||||
<img src="assets/img/computer_2_cool-3.png" alt="">
|
||||
</h1>
|
||||
<div id="content">
|
||||
<h2>A DISCLOSURE ABOUT AI USAGE</h2>
|
||||
|
||||
<p>
|
||||
Seems like everything is slop now days. And I'm not just talking about stuff
|
||||
generated by the <span class="stuff">"Large Language Models."</span>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
You, dear reader, deserve better than slop. Therefore, we are proud to declare that
|
||||
nothing in this issue of <strong>SMART BAR</strong> is generated by A.I. We're
|
||||
talking 100% pure homegrown human creativity, the best this side of the Bay Area has
|
||||
to offer.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
That's not to say that we didn't try. Writing good quality content is hard, which is
|
||||
why we tasked our <strong>Tech Wizard</strong> <em>P. Michael Cho</em> with employing the
|
||||
newest, hottest transformers to create hard-hitting philosophical pieces for this
|
||||
issue.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Unfortunately, <span id="dumb">WE COULDN'T FIGURE IT OUT</span>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Despite paying a hundred bucks for <span class="stuff">G.P.T. Pro Max
|
||||
Extreme</span>, getting <span class="stuff">"API Keys,"</span> and doodling a
|
||||
couple of <span class="stuff">shell scripts</span>, we kept getting back <span
|
||||
class="stuff">MUFFIN RECIPES</span> and <span class="stuff">PYTHON
|
||||
PROGRAMS</span>. Needless to say, this is not content that you spent your hard
|
||||
earned cash on to read.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
In any case, we hope you enjoy these words and ideas from a couple of baseline
|
||||
humans.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
89
pages/crashman.html
Normal file
@@ -0,0 +1,89 @@
|
||||
<style>
|
||||
#crashman-page {
|
||||
position: relative;
|
||||
background: url("assets/img/crashman/crashman-bg.png") no-repeat center center;
|
||||
background-size: cover;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#snips {
|
||||
height: 120px;
|
||||
width: 620px;
|
||||
background-color: rgb(209, 1, 209);
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 5px;
|
||||
|
||||
position: absolute;
|
||||
bottom: 30px;
|
||||
left: -50px;
|
||||
transform: rotate(-5deg);
|
||||
}
|
||||
|
||||
#snips img {
|
||||
flex: 1 1 0;
|
||||
width: auto;
|
||||
object-fit: contain;
|
||||
max-height: 100%;
|
||||
}
|
||||
|
||||
#title {
|
||||
position: absolute;
|
||||
top: 350px;
|
||||
right: 8px;
|
||||
|
||||
font-family: "Heading Now";
|
||||
font-size: 48px;
|
||||
|
||||
color: #fff;
|
||||
text-shadow:
|
||||
0px 10px 0 rgb(209, 1, 209),
|
||||
0px 20px 0 black;
|
||||
}
|
||||
|
||||
#text {
|
||||
position: absolute;
|
||||
top: 390px;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
background-color: rgba(62, 6, 62, 0.704);
|
||||
font: 11.75pt/1.40 Tahoma, sans-serif;
|
||||
padding: 24px;
|
||||
color: #fff;
|
||||
line-height: 1.9em;
|
||||
}
|
||||
|
||||
.stretch {
|
||||
font-weight: 800;
|
||||
transform: scaleX(2.1);
|
||||
transform-origin: left;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<div id="crashman-page" class="page-base">
|
||||
|
||||
<div id="text">
|
||||
<p>
|
||||
<b>Rusty Haight</b> is the human crash-test dummy. As director of the San Diego-based Collision Safety Institute,
|
||||
Rusty has experienced more than 950 violent vehicle crash tests at speeds of up to 54 mph,
|
||||
and taken <span class="stretch">140 air bags to the face.</span>
|
||||
</p>
|
||||
<p>
|
||||
Haight has contributed several publications on the topic of automobile safety
|
||||
in <b>Collision Magazine</b> such as <em>Hyundai and Kia Crash Data: the Indispensable Compendium.</em>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="snips">
|
||||
<img src="assets/img/crashman/crashman-1.png" />
|
||||
<img src="assets/img/crashman/crashman-2.png" />
|
||||
<img src="assets/img/crashman/crashman-3.png" />
|
||||
</div>
|
||||
|
||||
<div id="title" class="ytmnd-1">crash man</div>
|
||||
|
||||
</div>
|
||||
9
pages/fashion.html
Normal file
@@ -0,0 +1,9 @@
|
||||
<style>
|
||||
#fashion {
|
||||
background-image: url("assets/img/fashion.jpg");
|
||||
background-size: contain;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="fashion" class="page-base">
|
||||
</div>
|
||||
194
pages/streetgeek-1.html
Normal file
@@ -0,0 +1,194 @@
|
||||
<style>
|
||||
|
||||
@font-face {
|
||||
font-family: "Aerosoldier";
|
||||
src: url("assets/font/aerosoldier.otf");
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "COMPUTER Robot";
|
||||
src: url("assets/font/computer-robot.ttf");
|
||||
}
|
||||
|
||||
span.computer {
|
||||
font-family: "COMPUTER Robot", monospace;
|
||||
}
|
||||
|
||||
#streetgeek1-page {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 0.4in 0.42in;
|
||||
background-color: white;
|
||||
color: black;
|
||||
font: 8.6pt/1.42 'Times New Roman', serif;
|
||||
}
|
||||
|
||||
#sg1-kicker {
|
||||
font-family: Helvetica, Arial, sans-serif;
|
||||
font-size: 7pt;
|
||||
font-weight: bold;
|
||||
letter-spacing: 0.22em;
|
||||
text-transform: uppercase;
|
||||
color: rgb(209, 1, 209);
|
||||
margin-bottom: 3pt;
|
||||
}
|
||||
|
||||
#streetgeek1-page h1 {
|
||||
font-family: Aerosoldier, Helvetica, sans-serif;
|
||||
font-size: 38pt;
|
||||
line-height: 0.85;
|
||||
color: black;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#sg1-deck {
|
||||
font-family: Georgia, 'Times New Roman', serif;
|
||||
font-style: italic;
|
||||
font-size: 10pt;
|
||||
color: #222;
|
||||
margin: 5pt 0 3pt 0;
|
||||
}
|
||||
|
||||
#sg1-byline {
|
||||
font-size: 8pt;
|
||||
font-style: italic;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#sg1-rule {
|
||||
border: none;
|
||||
border-top: 1.4pt solid black;
|
||||
margin: 6pt 0 9pt 0;
|
||||
}
|
||||
|
||||
#sg1-body {
|
||||
flex: 1;
|
||||
columns: 2;
|
||||
column-gap: 0.28in;
|
||||
}
|
||||
|
||||
#sg1-body p {
|
||||
color: black;
|
||||
text-indent: 2em;
|
||||
text-align: justify;
|
||||
text-justify: inter-word;
|
||||
hyphens: auto;
|
||||
overflow-wrap: break-word;
|
||||
margin: 0 0 7pt 0;
|
||||
}
|
||||
|
||||
.drop-cap::first-letter {
|
||||
float: left;
|
||||
font-size: 4em;
|
||||
line-height: 0.8;
|
||||
padding-right: 8px;
|
||||
padding-top: 0px;
|
||||
font-weight: bold;
|
||||
font-family: Georgia, serif;
|
||||
}
|
||||
|
||||
.drop-cap {
|
||||
text-indent: 0 !important;
|
||||
}
|
||||
|
||||
#sg1-pullquote {
|
||||
break-inside: avoid;
|
||||
-webkit-column-break-inside: avoid;
|
||||
font-family: Georgia, 'Times New Roman', serif;
|
||||
font-style: italic;
|
||||
font-size: 13.5pt;
|
||||
line-height: 1.25;
|
||||
color: #111;
|
||||
text-indent: 0;
|
||||
border-left: 3pt solid rgb(209, 1, 209);
|
||||
padding: 2pt 0 2pt 10pt;
|
||||
margin: 4pt 0 9pt 0;
|
||||
}
|
||||
|
||||
#sg1-footer {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
border-top: 0.75pt solid black;
|
||||
margin-top: 6pt;
|
||||
padding-top: 4pt;
|
||||
font-family: Helvetica, Arial, sans-serif;
|
||||
font-size: 6.5pt;
|
||||
letter-spacing: 0.1em;
|
||||
text-transform: uppercase;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<div id="streetgeek1-page" class="page-base">
|
||||
|
||||
<div id="sg1-header">
|
||||
<h1>Street Geek</h1>
|
||||
<p id="sg1-deck">Notes from the front lines of hacker haute couture.</p>
|
||||
<p id="sg1-byline">By <strong>Bram Noidz</strong></p>
|
||||
</div>
|
||||
|
||||
<hr id="sg1-rule" />
|
||||
|
||||
<div id="sg1-body">
|
||||
|
||||
<p class="drop-cap">
|
||||
My day in meatspace wasn't going well. I woke up in the late morning and acquired the day's
|
||||
outfit using my usual clothing drawer LIFO mechanism. This week's permutation of clothing in the
|
||||
drawer left me with a depressingly common combination: black t-shirt with black jeans. I thought
|
||||
for a brief second that I should break out of the LIFO ordering and make a daring attempt at a
|
||||
more arbitrarily stylish outfit. Brief panic attack. Ultimately I decided against it. <i>The
|
||||
purpose of a system is what it does.</i> If I decide for even one day to ignore my LIFO
|
||||
clothing system, then it really is no system at all.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
I hobbled downstairs in my algorithmically chosen outfit and made a cup of coffee. Double
|
||||
espresso with a bit of hot water mixed in. While reading something on my computer, I
|
||||
accidentally spilled about half of the coffee onto my shirt. Luckily for me, the stains were
|
||||
practically invisible on the black t-shirt, and very little ended up on my pants. The only
|
||||
evidence that I had spilled something on myself that morning was the faint coffee smell that
|
||||
lingered after I mopped it up. But who doesn't love the smell of coffee? I actually wouldn't
|
||||
mind a cologne with the scent of the glorious roasted bean imbued into it. Similar to the
|
||||
clickety-clack sound of the mechanical keyboard, the coffee cologne might have the Pavlovian
|
||||
effect of stimulating the electronic productivity of the people around you. Free idea for any of
|
||||
our young entrepreneurial readers out there.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
You might be wondering why I spent more time than usual at this time of the morning thinking
|
||||
about what I'm wearing. Today, I am meeting my friend <span class="computer">ByteLord</span> for lunch at the vegan
|
||||
restaurant <i>Cha-Ya</i> on Valencia. <span class="computer">ByteLord</span> is a one-of-a-kind genius level programmer
|
||||
that I met on an IRC channel one evening. This guy slings code so neat and clean, he puts Linus
|
||||
Torvalds and that guy who made the <i>McMaster-Carr</i> catalog website to shame. I had never
|
||||
met <span class="computer">ByteLord</span> A.F.K. before. Therefore, needless to say, I felt intimidated and eager to
|
||||
please.
|
||||
</p>
|
||||
|
||||
<div id="sg1-pullquote">“The purpose of a system is what it does.”</div>
|
||||
|
||||
<p>
|
||||
I got to <i>Cha-Ya</i> a little bit early and ordered a green tea while waiting for
|
||||
<span class="computer">ByteLord</span> to arrive. I spilled a little bit of this on my shirt as well. Unfortunately
|
||||
now, mixed with the coffee stain from earlier, the combination gave off a toilet smell that was
|
||||
quite unpleasant. I started praying that <span class="computer">ByteLord</span> had a cold and wouldn't be able to
|
||||
smell anything. Luckily the stains were still mostly invisible on my black t-shirt.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
When <span class="computer">ByteLord</span> walked in the front door, I almost mistook him for one of those cool
|
||||
hip-hopper guys. He was decked out from head to toe and looked <i>on fleek</i>.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
<div id="sg1-footer">
|
||||
<span>Smart Bar</span>
|
||||
<span>Continued on page 02 →</span>
|
||||
<span>01</span>
|
||||
</div>
|
||||
-->
|
||||
|
||||
</div>
|
||||
241
pages/streetgeek-2.html
Normal file
@@ -0,0 +1,241 @@
|
||||
<style>
|
||||
|
||||
@font-face {
|
||||
font-family: "Aerosoldier";
|
||||
src: url("assets/font/aerosoldier.otf");
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "COMPUTER Robot";
|
||||
src: url("assets/font/computer-robot.ttf");
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "TS Block Bold";
|
||||
src: url("assets/font/ts-block-bold.ttf");
|
||||
}
|
||||
|
||||
span.computer {
|
||||
font-family: "COMPUTER Robot", monospace;
|
||||
}
|
||||
|
||||
span.cyberwheel {
|
||||
font-family: "TS Block Bold";
|
||||
}
|
||||
|
||||
#streetgeek2-page {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 0.3in 0.4in;
|
||||
background-color: white;
|
||||
color: black;
|
||||
font: 8.6pt/1.42 'Times New Roman', serif;
|
||||
}
|
||||
|
||||
#sg2-topbar {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
font-family: Helvetica, Arial, sans-serif;
|
||||
font-size: 6.5pt;
|
||||
font-weight: bold;
|
||||
letter-spacing: 0.16em;
|
||||
text-transform: uppercase;
|
||||
color: #333;
|
||||
border-bottom: 0.75pt solid black;
|
||||
padding-bottom: 4pt;
|
||||
margin-bottom: 8pt;
|
||||
}
|
||||
|
||||
#sg2-topbar span:first-child {
|
||||
color: rgb(209, 1, 209);
|
||||
}
|
||||
|
||||
#sg2-headline {
|
||||
font-family: Aerosoldier, Helvetica, sans-serif;
|
||||
font-size: 24pt;
|
||||
line-height: 0.9;
|
||||
margin: 0 0 3pt 0;
|
||||
}
|
||||
|
||||
#sg2-subhead {
|
||||
font-family: Georgia, 'Times New Roman', serif;
|
||||
font-style: italic;
|
||||
font-size: 9.5pt;
|
||||
color: #222;
|
||||
margin: 0 0 10pt 0;
|
||||
}
|
||||
|
||||
#sg2-gallery {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: flex-start;
|
||||
gap: 0.2in;
|
||||
margin: 3pt 0 8pt 0;
|
||||
}
|
||||
|
||||
.sg2-frame {
|
||||
background: white;
|
||||
padding: 6px 6px 5px 6px;
|
||||
border: 1px solid #ddd;
|
||||
box-shadow: 0 3px 10px rgba(0,0,0,0.28);
|
||||
break-inside: avoid;
|
||||
-webkit-column-break-inside: avoid;
|
||||
}
|
||||
|
||||
.sg2-frame.left, .sg2-frame.right {
|
||||
width: 1.95in;
|
||||
}
|
||||
|
||||
.sg2-frame.left { transform: rotate(-2.4deg); }
|
||||
.sg2-frame.right { transform: rotate(2.2deg); }
|
||||
|
||||
.sg2-frame.solo {
|
||||
float: right;
|
||||
width: 46%;
|
||||
margin: 2pt 0 4pt 10px;
|
||||
transform: rotate(-1.6deg);
|
||||
}
|
||||
|
||||
.sg2-frame img {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.sg2-caption {
|
||||
font-family: Helvetica, Arial, sans-serif;
|
||||
font-size: 6.5pt;
|
||||
letter-spacing: 0.1em;
|
||||
text-transform: uppercase;
|
||||
text-align: center;
|
||||
color: #333;
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
#sg2-text {
|
||||
flex: 1;
|
||||
columns: 2;
|
||||
column-gap: 0.26in;
|
||||
}
|
||||
|
||||
#sg2-text p {
|
||||
text-indent: 2em;
|
||||
text-align: justify;
|
||||
text-justify: inter-word;
|
||||
hyphens: auto;
|
||||
overflow-wrap: break-word;
|
||||
margin: 0 0 4pt 0;
|
||||
}
|
||||
|
||||
#sg2-text p:first-child {
|
||||
text-indent: 0;
|
||||
}
|
||||
|
||||
#sg2-text p:first-child::first-letter {
|
||||
float: left;
|
||||
font-size: 3em;
|
||||
line-height: 0.78;
|
||||
padding-right: 6px;
|
||||
font-weight: bold;
|
||||
font-family: Georgia, serif;
|
||||
}
|
||||
|
||||
#sg2-footer {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
border-top: 0.75pt solid black;
|
||||
margin-top: 6pt;
|
||||
padding-top: 4pt;
|
||||
font-family: Helvetica, Arial, sans-serif;
|
||||
font-size: 6.5pt;
|
||||
letter-spacing: 0.1em;
|
||||
text-transform: uppercase;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<div id="streetgeek2-page" class="page-base">
|
||||
|
||||
<!--
|
||||
<div id="sg2-topbar">
|
||||
<span>Street Geek</span>
|
||||
<span>Field Report</span>
|
||||
<span>Page 02</span>
|
||||
</div>
|
||||
-->
|
||||
|
||||
<!--
|
||||
<div id="sg2-header">
|
||||
<h2 id="sg2-headline">The Look</h2>
|
||||
<p id="sg2-subhead">ByteLord, spotted in the wild at Cha-Ya on Valencia.</p>
|
||||
</div>
|
||||
-->
|
||||
|
||||
<div id="sg2-gallery">
|
||||
<div class="sg2-frame left">
|
||||
<img src="assets/img/streetgeek-java.png" alt="ByteLord wearing a Java t-shirt under a gray plaid overshirt" />
|
||||
<div class="sg2-caption">"Java"</div>
|
||||
</div>
|
||||
<div class="sg2-frame right">
|
||||
<img src="assets/img/streetgeek-evangelion.png" alt="ByteLord wearing an Evangelion t-shirt under a black overshirt" />
|
||||
<div class="sg2-caption">"Evangelion"</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="sg2-text">
|
||||
|
||||
<p>
|
||||
A typically chilly San Francisco summer afternoon, he was dressed for warmth. A beanie with an
|
||||
off-white color, reminiscent of the Windows XP start menu background. A comfy gray overshirt
|
||||
with a clean geometric pattern. Some kind of smart watch whose battery was obviously dead. Most
|
||||
tellingly, a <i>Java</i> t-shirt underneath the overshirt which, in the context of the rest of
|
||||
the outfit, gave the programming language an undeserved level of coolness.
|
||||
</p>
|
||||
|
||||
<div class="sg2-frame solo">
|
||||
<img src="assets/img/streetgeek-dogtags.jpeg" alt="ByteLord's necklace: a Mac OS X Panther dog tag on a ball chain" />
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Besides the comfortable textiles, I was impressed with <span class="computer">ByteLord</span>'s choice of accessories.
|
||||
A wallet chain, which I hadn't seen anyone wear since the mid 2000's, added a metallic balance
|
||||
to the lower half of his appearance. His neck was adorned with a necklace that didn't appear to
|
||||
serve any functional purpose, but matched the wallet chain quite nicely. Finally, he was wearing
|
||||
rather large, television-sized eyeglass frames. Frankly, I had never given much thought to
|
||||
accessories in an outfit, unless they have some kind of microchip in them. But <span class="computer">ByteLord</span>
|
||||
had arranged them in such a way to make the outfit look effortless, yet stylish.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
We ordered <i>zaru soba</i> with <i>vegetable tempura</i> and spoke about various topics from
|
||||
cyberspace. After we finished talking about the guy that supposedly defaced fellow editor P. M.
|
||||
Cho's website, we started talking about fashion. I was surprised to hear that <span class="computer">ByteLord</span>
|
||||
was quite into fashion on a deeply philosophical level. He explained to me that what you wear in
|
||||
meatspace is like the <i>graphical shell</i> for a person. A hacker should present himself to
|
||||
others in the same elegant way that a computer program presents itself to users. You wouldn't
|
||||
want to walk away from an interaction with someone having the same feeling as using the
|
||||
<i>git</i> command line interface.
|
||||
</p>
|
||||
|
||||
<p> I paid for the <i>zaru soba</i> and <span class="computer">ByteLord</span> sent me some <span class="cyberwheel">SMARTCOIN</span> for his
|
||||
portion. We parted ways, each walking opposite directions on Valencia street. After our meeting,
|
||||
I couldn't help but notice and observe all of the outfits people were wearing that day in the
|
||||
Mission. Thousands of distinct <i>graphical shells</i> all populating the virtual desktop that
|
||||
is our city. I smiled, and started thinking about a new ordering system for my wardrobe.
|
||||
<span class="endmark">■</span>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
<div id="sg2-footer">
|
||||
<span>Smart Bar</span>
|
||||
<span>■</span>
|
||||
<span>02</span>
|
||||
</div>
|
||||
-->
|
||||
|
||||
</div>
|
||||