My first customer facing project at Adobe went live!
Back in March'18 I switched teams and left IT behind for a new initiative within Experience Cloud called Experience League. The portion I created is found at guided.adobe.com.

Origami Around

Andulka
TVSTRANGERTHINGS

pixel skylines
Stranger Things
Monterey Bay Aquarium
Cosimo Galluzzi
I'd rather be in outer space 🛸
noise dept.
art blog(derogatory)

Three Goblin Art
taylor price
Misplaced Lens Cap
Show & Tell
One Nice Bug Per Day

blake kathryn
hello vonnie
Claire Keane

seen from Türkiye
seen from United Kingdom
seen from United States
seen from United States

seen from Canada
seen from Germany
seen from France

seen from United States

seen from Malaysia
seen from United States
seen from Estonia
seen from South Africa

seen from United States
seen from United States
seen from United States
seen from United States

seen from United States
seen from United States
seen from United States
seen from India
@attackio
My first customer facing project at Adobe went live!
Back in March'18 I switched teams and left IT behind for a new initiative within Experience Cloud called Experience League. The portion I created is found at guided.adobe.com.

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch • No registration required • HD streaming
Promise.finally() ... why do we need it?
I'm a huge fan of JavaScript, and I love how it's been evolving over the years, however some new features are questionable from my point of view.
Changing the Promise spec to add a method which is already possible by the design of Promise is borderline insane.
Promise.finally() will allow you to do try/catch/finally with async functions, which sounds awesome and if you never use higher order functions it is awesome; however it's not an problem if you don't intend to use async functions!
Let me demonstrate:
Promise.reject(new Error('omgad')).catch(e => console.warn(e.message)).then(() => console.log('finally?'));
Considering you can't pass async functions around like normal functions for all styles of coding, this is a rabbit hole that you have to commit to. Good luck with that :D
tiny-httptest simplifies API testing in node.js
I made this module after noticing bugs in my stack due to a lack of coverage afforded by every test framework I looked at. It handles the annoying things like capturing & reusing cookies, headers & etags (special case).
https://www.npmjs.com/package/tiny-httptest
Released a boilerplate API for tenso
I released a sample tenso API on github as a starting point for new API gateways that are powered by node.js & want to be OWASP compliant with minimal developer effort.
https://github.com/avoidwork/tenso-sample
Watch Dogs 2 is the open world game I was looking for
It plays like a campy Mr. Robot, doesn't really rely on guns, and has neat gadgets. It also brings my GTX 1080 to it's knees, so, more please.

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch • No registration required • HD streaming
Goodbye
It's hard when you have to say goodbye to beloved "pet", which is a poor word to describe the type of bond & companionship you can have. Halo, my "therapy" cat of 18+ years was put to sleep last night. I can't describe the type of loss and pain this has inflicted my family with; however, I can gladly say that those 18 years started near the lowest point, the death of my father, and continued well into the highest point, my marriage. It was one hell of a ride with much love and laughter. Goodbye my mostly silent friend, you will be greatly missed.
https://www.flickr.com/photos/deviation/albums/72057594096631844
Launching a product feels good
Today my latest work project at Adobe went live. It's a great feeling to see the hard work & effort of a team come together.
Tor with a Raspberry Pi 3
Do it, it's worth having the anonymizing access point for casual browsing.
Getting a good score from SSL Labs!
https://www.ssllabs.com/ssltest/analyze.html?d=api.ottawa.ski
This was as simple as generating a 4096 bit key, i.e. openssl dhparam -out dhparam.pem 4096 and running the following config for nginx:
ssl_dhparam /opt/ssl/dhparam.pem; ssl on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ssl_stapling on; ssl_stapling_verify on;
Ottawa.ski API beta is live!
I'm glad to say this API has finally gone pseudo 'live', with weather data provided from the OpenData initiative of the Canadian Government & my nodejs module canada-weather.
The API gateway is very simple in design. It's running tenso 4.0 which I released earlier this week, which is based on an effort to clean up the underlying turtle.io server.
Behind the API is a cron job which executes every 30 minutes to scrape weather data, and write to specific files on disk. This allows me to have the API gateway map requests to data without adding complexity; a file watcher is registered on startup, which updates the in RAM representation after a change is detected; if the file is erased the current representation is served until the server is stopped. The data sits in a Map>Map>Object structure for quick validation/retrieval/serialization.
I plan to use a similar method for the other API collections, but with a shorter polling interval.
The tenso server is kept alive with systemd, and the stdout & stderr are routed to syslog for me.
https://api.ottawa.ski

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch • No registration required • HD streaming
VMMDLXIX
7569 days.
Sentiment analysis of Tool’s AEnima
Done with AFINN sentiment analysis:
stinkfist: 4, 0.02 comparative
eulogy: -15, -0.06 comparative
h: -33, -0.13 comparative
useful idiot: N/A
forty-six & 2: -18, -0.07 comparative
message to harry manback: -56, -0.32 comparative
hooker with a penis: -36, -0.15 comparative
intermission: N/A
jimmy: -14, -0.07 comparative
die eier von satan (english): -9, -0.08 comparative
pushit: -4, -0.02 comparative
cesaro summability: N/A
ænema: -83, -0.21 comparative
(-)ions: N/A
third eye: 13, 0.05 comparative
Sentiment analysis of Tool’s Undertow
Done with AFINN sentiment analysis.
intolerance: 2, 0.12 comparative
prison sex: 1, 0.00 comparative
sober: -7, -0.05 comparative
bottom: -51, -0.28 comparative
crawl away: 3, 0.03 comparative
swamp song: -15, -0.16 comparative
undertow: -3, -0.01 comparative
4 degrees: 6, 0.03 comparative
flood: 0, 0.00 comparative
disgustipated: -21, -0.05 comparative
Sentiment analysis of Tool’s Opiate
Done with AFINN sentiment analysis.
sweat: 14, 0.10 comparative
hush: -19, -0.37 comparative
part of me: 10, 0.11 comparative
cold & ugly: -18, -0.3 comparative
jerk off: -22, -0.18 comparative
opiate: 3, 0.22 comparative
the gaping lotus experience (hidden): -2, -0.02 comparative
(via https://www.youtube.com/watch?v=0dX6LL7b8Y0)

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch • No registration required • HD streaming
Canada Weather Scraper
I released canada-weather yesterday under the OttawaSki organization on GitHub for my Ottawa.ski project. It's a node.js app designed to run from a crontab (scheduler) to scrape data for a city, or cities, by name. In my case, I have an API gateway watching the outputs for changes & hot swapping the data in real time. The app retrieves the 'site list' for the weather sites, and loads it into a haro datastore which indexes the english names, and runs the user input against as a search. The first match is used, the others are displayed via stdout, and the data is retrieved, transformed & written to disk asynchronously.
@DrScienceCat on twitter