diff --git a/.gitignore b/.gitignore index b637e55..de8f7a4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ /ignore /.sass-cache .DS_Store -.jekyll-cache -_site/* \ No newline at end of file +# .jekyll-cache +# _site/* \ No newline at end of file diff --git a/_site/CNAME b/_site/CNAME new file mode 100644 index 0000000..3887080 --- /dev/null +++ b/_site/CNAME @@ -0,0 +1 @@ +ednunez.me \ No newline at end of file diff --git a/_site/adventures/2015/08/30/JMT.html b/_site/adventures/2015/08/30/JMT.html new file mode 100644 index 0000000..6bbda15 --- /dev/null +++ b/_site/adventures/2015/08/30/JMT.html @@ -0,0 +1,484 @@ + + + + + + + + + + John Muir Trail + + + + + + + + + + + + + + + + + + +
+ +
+
Ed Nunez
+
+
+
software developer by day . runner by night . amateur musician whatever time is left
+
+
+ +
+ + +
+
+
+ +
+

John Muir Trail

+
+
+
+ +
+
+2 dudes
+170 miles
+14 days
+
+ +
+ +

+ +

+ +

+ +

+ +

+ +

+ +

+ +

+ +
+View full album here. +

+ +
+ +

The John Muir Trail was my very first thru hike. Prior to the trip I thought I had no idea what I was doing and planned the trip excessively: I picked out a camp site for every night, typed up all my meals typed up in a spreadsheet, and studied weather patterns across the Sierras. I’m happy I overprepared for this hike, because I learned a lot about what it takes to plan for a backcountry trip, but the moment I stepped my foot on trail I instantly became aware of the simplicity of the thru hiking life. I experienced what it was like living simply: just walking, eating, walking some more, and sleeping.

+ +

Choosing the John Muir Trail as my first long hike has spoiled me a lot. I don’t think you could easily find a well established route that is this remote and so dense with beautiful mountains. Every single day on the Sierras was epic to say the least. For a friendly hike for all experience levels, I think this one’s hard to top.

+ + +
+ + + + +
+ +
+
+
+
+ + + + + + + diff --git a/_site/adventures/2016/05/31/GR20.html b/_site/adventures/2016/05/31/GR20.html new file mode 100644 index 0000000..fc3a519 --- /dev/null +++ b/_site/adventures/2016/05/31/GR20.html @@ -0,0 +1,488 @@ + + + + + + + + + + Corsica GR20 (northern half) + + + + + + + + + + + + + + + + + + +
+ +
+
Ed Nunez
+
+
+
software developer by day . runner by night . amateur musician whatever time is left
+
+
+ +
+ + +
+
+
+ +
+

Corsica GR20 (northern half)

+
+
+
+ +
+

During the early summer of 2016, I headed to Europe to visit an old friend and set to hike the northern half of the GR20 route in 7 days.

+ +
+

“GR 20 is a long distance trail that traverses Corsica diagonally from north to south. It is considered to be the most difficult of all the GR routes and one of the most beautiful mountain trail in Europe […] The northern part starts in Calenzana and stops in Vizzavona. It is the most difficult part, because of the steep and rocky paths, but it is also considered more beautiful.” – http://corsica.forhikers.com/gr20

+
+ +
+65 miles
+7 days
+
+ +
+ +View full album here. +

+ +

+ +

+ +

+ +

+ +

+ +

+ + + +

+ + +
+ +
+ + + + +
+ +
+
+
+
+ + + + + + + diff --git a/_site/adventures/2016/05/31/Iceland.html b/_site/adventures/2016/05/31/Iceland.html new file mode 100644 index 0000000..54adebc --- /dev/null +++ b/_site/adventures/2016/05/31/Iceland.html @@ -0,0 +1,469 @@ + + + + + + + + + + Meandering in Iceland + + + + + + + + + + + + + + + + + + +
+ +
+
Ed Nunez
+
+
+
software developer by day . runner by night . amateur musician whatever time is left
+
+
+ +
+ + +
+
+ + +
+
+
+
+ + + + + + + diff --git a/_site/adventures/2016/11/29/GrandCanyon.html b/_site/adventures/2016/11/29/GrandCanyon.html new file mode 100644 index 0000000..6e80217 --- /dev/null +++ b/_site/adventures/2016/11/29/GrandCanyon.html @@ -0,0 +1,469 @@ + + + + + + + + + + Grand Canyon: Boucher-Tonto-Bright Angel loop + + + + + + + + + + + + + + + + + + +
+ +
+
Ed Nunez
+
+
+
software developer by day . runner by night . amateur musician whatever time is left
+
+
+ +
+ + +
+
+
+ +
+

Grand Canyon: Boucher-Tonto-Bright Angel loop

+
+
+
+ +
+

With a 5 day window open during Thanksgiving break, I set out to hike a little loop in the Grand Canyon. All of the campsites were booked for the Rim to Rim trail, so instead I opted for an alternative.

+ +

The thirty-something mile loop I did started out in Hermit’s rest, went down the canyon via the Boucher trail, traversed the canyon parallel to the Colorado River via the Tonto trail, and came back up via the Bright Angel trail. Highly recommend this as an alternative to R2R: very few people, amazing campsite at Yuma point, and beautiful side trips near the Colorado River.

+ +


+ +
+ +

+ +

+ +

+ +
+ +
+ + + + +
+ +
+
+
+
+ + + + + + + diff --git a/_site/adventures/2017/03/23/SkyeTrail.html b/_site/adventures/2017/03/23/SkyeTrail.html new file mode 100644 index 0000000..e427590 --- /dev/null +++ b/_site/adventures/2017/03/23/SkyeTrail.html @@ -0,0 +1,463 @@ + + + + + + + + + + Scotland's Skye Trail: Portree to Duntulm + + + + + + + + + + + + + + + + + + +
+ +
+
Ed Nunez
+
+
+
software developer by day . runner by night . amateur musician whatever time is left
+
+
+ +
+ + +
+
+
+ +
+

Scotland's Skye Trail: Portree to Duntulm

+
+
+
+ +
+
+ +


+ +

Kelsey is living in London this year so I decided to visit her during Spring Break. We made a trip out to Scotland for a 4 days and the Skye Trail seemed like the most scenic, yet accesible option for a quick backpacking trip.

+ +

This island had some scenery straight out of a fantasy dragon-land, but the weather was pretty brutal. The winds were so strong we had to bail out after coming up a mountain pass near the Storr ¯\_(ツ)_/¯.

+ +

With no chance for us to survive the storm in a tent, we sought shelter in a castle dungeon. The storms calmed down and we made our escape out of Skye, with the hopes of coming back someday.

+ +
+ + + + +
+ +
+
+
+
+ + + + + + + diff --git a/_site/adventures/2017/07/24/ColoradoTrail.html b/_site/adventures/2017/07/24/ColoradoTrail.html new file mode 100644 index 0000000..8a2e131 --- /dev/null +++ b/_site/adventures/2017/07/24/ColoradoTrail.html @@ -0,0 +1,480 @@ + + + + + + + + + + Colorado Trail thru hike + + + + + + + + + + + + + + + + + + +
+ +
+
Ed Nunez
+
+
+
software developer by day . runner by night . amateur musician whatever time is left
+
+
+ +
+ + +
+
+
+ +
+

Colorado Trail thru hike

+
+
+
+ +
+
+ +


+ +
+408 miles
+15 days
+8 lb base weight
+4000 cals/day
+3 toe blisters
+Countless jaw drops in the San Juans
+
+ +


+ +

Having a summer off in between my last two semesters in college seemed like a perfect opportunity to venture on a thru hike. This being my first long solo hike, my main focus for this trip was to maximize the amount of time walking and hitting big daily miles.

+ +

My original plan was to make it all the way to Durango. I was going up to pace hitting about 32 miles a day for the first six days, but accidentally going off trail and hitting snowy passes at the Collegiate West section led to me losing a considerable amount of time and made me reconsider my goals. I managed to make it to Silverton by hitting around 26 miles a day for the rest of the trip.

+ +

This has been one of the most rewarding thru hikes I’ve done and it was great meeting like-minded thru-hikers along the way. Hiking in the Sierras in 2015 gave me some big aspirations to come back there for a PCT thru hike, and now doing the Colorado Trail makes me want to do the CDT and experience the San Juans again.

+ +


+
+ +


+My Gear List : https://lighterpack.com/r/7ibnj3

+ +
+ + + + +
+ +
+
+
+
+ + + + + + + diff --git a/_site/adventures/2024/09/08/PCT.html b/_site/adventures/2024/09/08/PCT.html new file mode 100644 index 0000000..0fb038f --- /dev/null +++ b/_site/adventures/2024/09/08/PCT.html @@ -0,0 +1,493 @@ + + + + + + + + + + Pacific Crest Trail Thru-Hike + + + + + + + + + + + + + + + + + + +
+ +
+
Ed Nunez
+
+
+
software developer by day . runner by night . amateur musician whatever time is left
+
+
+ +
+ + +
+
+
+ +
+

Pacific Crest Trail Thru-Hike

+
+
+
+ +
+

Continuous footpath from Mexico to Canada on the Pacific Crest Trail from May 4 2024 - September 5 2024.

+ +

That was so unbelievably vivid and high-intensity, the ending has brought me to tears. Trip of a lifetime worth waiting and dreaming multiple years for this to materialize.

+ +

2658 total miles of walking over 110 days (excluding time off spent with family). ~180 of these miles were dedicated to road walking around numerous wildfires that presented an added challenge to getting this done without skips.

+ +

It’s been a 4 month stretch of time that has made me feel it all - hunger, fatigue, borderline heat exhaustion, extreme cold, sleep deprivation, euphoria over watching a sunset, high adrenaline on a technical climb, and a wave of love from so many cool people, All accented by beauty in every step.

+ +

This trail has stolen my heart forever. Extra grateful to the many people I met on trail that helped me navigate around wildfire detours, and the many beastmode thruhikers that pushed me to put out some monster mileages every day. You’re the real ones and I love you all so much.

+ +


+ +
+ +

Youtube Video Doc

+ +
+ +
+ +

Highlight Pictures

+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+ + + + +
+ +
+
+
+
+ + + + + + + diff --git a/_site/assets/icon_strava.png b/_site/assets/icon_strava.png new file mode 100644 index 0000000..c5dd2ac Binary files /dev/null and b/_site/assets/icon_strava.png differ diff --git a/_site/assets/nature-cover-highres.jpg b/_site/assets/nature-cover-highres.jpg new file mode 100644 index 0000000..4903eac Binary files /dev/null and b/_site/assets/nature-cover-highres.jpg differ diff --git a/_site/assets/nature-cover.jpg b/_site/assets/nature-cover.jpg new file mode 100644 index 0000000..e6c3e23 Binary files /dev/null and b/_site/assets/nature-cover.jpg differ diff --git a/_site/assets/picture-profile-elipse.png b/_site/assets/picture-profile-elipse.png new file mode 100644 index 0000000..dc754e5 Binary files /dev/null and b/_site/assets/picture-profile-elipse.png differ diff --git a/_site/assets/picture-profile.jpg b/_site/assets/picture-profile.jpg new file mode 100644 index 0000000..4a48812 Binary files /dev/null and b/_site/assets/picture-profile.jpg differ diff --git a/_site/assets/projects/algotrading.png b/_site/assets/projects/algotrading.png new file mode 100644 index 0000000..b3c5c82 Binary files /dev/null and b/_site/assets/projects/algotrading.png differ diff --git a/_site/assets/projects/chat.jpg b/_site/assets/projects/chat.jpg new file mode 100644 index 0000000..27ad2a7 Binary files /dev/null and b/_site/assets/projects/chat.jpg differ diff --git a/_site/assets/projects/cnc-alternative.jpg b/_site/assets/projects/cnc-alternative.jpg new file mode 100644 index 0000000..f27cce7 Binary files /dev/null and b/_site/assets/projects/cnc-alternative.jpg differ diff --git a/_site/assets/projects/csom-printer.png b/_site/assets/projects/csom-printer.png new file mode 100644 index 0000000..3ea276f Binary files /dev/null and b/_site/assets/projects/csom-printer.png differ diff --git a/_site/assets/projects/ewb.jpg b/_site/assets/projects/ewb.jpg new file mode 100644 index 0000000..abef117 Binary files /dev/null and b/_site/assets/projects/ewb.jpg differ diff --git a/_site/assets/projects/gd.png b/_site/assets/projects/gd.png new file mode 100644 index 0000000..ba0818c Binary files /dev/null and b/_site/assets/projects/gd.png differ diff --git a/_site/assets/projects/glimpsecard.png b/_site/assets/projects/glimpsecard.png new file mode 100644 index 0000000..6dd8bd4 Binary files /dev/null and b/_site/assets/projects/glimpsecard.png differ diff --git a/_site/assets/projects/os161.png b/_site/assets/projects/os161.png new file mode 100644 index 0000000..b8d88d4 Binary files /dev/null and b/_site/assets/projects/os161.png differ diff --git a/_site/assets/projects/speechanalytics.png b/_site/assets/projects/speechanalytics.png new file mode 100644 index 0000000..7859be0 Binary files /dev/null and b/_site/assets/projects/speechanalytics.png differ diff --git a/_site/assets/projects/strava.png b/_site/assets/projects/strava.png new file mode 100644 index 0000000..f18f622 Binary files /dev/null and b/_site/assets/projects/strava.png differ diff --git a/_site/assets/projects/strava.ps b/_site/assets/projects/strava.ps new file mode 100644 index 0000000..173fe6f Binary files /dev/null and b/_site/assets/projects/strava.ps differ diff --git a/_site/assets/projects/todo.png b/_site/assets/projects/todo.png new file mode 100644 index 0000000..12e24a8 Binary files /dev/null and b/_site/assets/projects/todo.png differ diff --git a/_site/assets/projects/vanlife.png b/_site/assets/projects/vanlife.png new file mode 100644 index 0000000..c7d257b Binary files /dev/null and b/_site/assets/projects/vanlife.png differ diff --git a/_site/blog/index.html b/_site/blog/index.html new file mode 100644 index 0000000..433b08f --- /dev/null +++ b/_site/blog/index.html @@ -0,0 +1,975 @@ + + + + + + + + + + Blog + + + + + + + + + + + + + + + + + + +
+ +
+
Ed Nunez
+
+
+
software developer by day . runner by night . amateur musician whatever time is left
+
+
+ +
+ + +
+
+
+ + + + +
+ Blog learn about my outdoor adventures, running, and techy stuff +
+ + +
+
+ + + +
+ +
+

[ All Posts ]

+ +
+ + +
+ +
+ Continuous footpath from Mexico to Canada on the Pacific Crest Trail from May 4 2024 - September 5 2024. + +That was so unbelievably vivid and high-intensity, the ending has brought me to tears. Trip of a lifetime worth waiting and dreaming multiple years for this to materialize. + +2658 total miles ... +
+
+ +
+ + +
+ +
+ Between November of 2020 and May 2021, I dedicated most of my time to building my dream home of wheels. It has been a labor of love and patience putting this together from CAD modeling every structure to materializing the build with carpentry work. Although my background is more aligned to softwa... +
+
+ +
+ + +
+ +
+ During the period between September 2019 and March 2020, I helped built the AR product GLIMPSE cards. GLIMPSE cards are business cards that can present digital content to the card’s receiver with the aid of Augmented Reality. + + + +The GLIMPSE card owner can use the web app to (1) customize business... +
+
+ +
+ + +
+ +
+ About + +Day trading involves a competition with a large crowd of investors to react to market conditions that you can predict and react with speed. In theory, trading in an automated fashion can allow you to generate profits with a speed and frequency that is impossible for a human to execute. Oth... +
+
+ +
+ + +
+ +
+ + + + + +408 miles +15 days +8 lb base weight +4000 cals/day +3 toe blisters +Countless jaw drops in the San Juans + + + + +Having a summer off in between my last two semesters in college seemed like a perfect opportunity to venture on a thru hike. This being my first long solo hike, my main focus for th... +
+
+ +
+ + +
+ +
+ + + + +Kelsey is living in London this year so I decided to visit her during Spring Break. We made a trip out to Scotland for a 4 days and the Skye Trail seemed like the most scenic, yet accesible option for a quick backpacking trip. + +This island had some scenery straight out of a fantasy dragon-lan... +
+
+ +
+ + +
+ +
+ With a 5 day window open during Thanksgiving break, I set out to hike a little loop in the Grand Canyon. All of the campsites were booked for the Rim to Rim trail, so instead I opted for an alternative. + +The thirty-something mile loop I did started out in Hermit’s rest, went down the canyon via t... +
+
+ +
+ + +
+ +
+ + + + + + + + + + + + + + + + +
+
+ +
+ + +
+ +
+ During the early summer of 2016, I headed to Europe to visit an old friend and set to hike the northern half of the GR20 route in 7 days. + + + “GR 20 is a long distance trail that traverses Corsica diagonally from north to south. It is considered to be the most difficult of all the GR routes and o... +
+
+ +
+ + +
+ +
+ +2 dudes +170 miles +14 days + + + + + + + + + + + + + + + + + + + + + +View full album here. + + + + +The John Muir Trail was my very first thru hike. Prior to the trip I thought I had no idea what I was doing and planned the trip excessively: I picked out a camp site for every night, typed up all my meals typed up in a ... +
+
+ +
+ + +
+

[ Adventures ]

+ + + + + + + +
+ + +
+ +
+ Continuous footpath from Mexico to Canada on the Pacific Crest Trail from May 4 2024 - September 5 2024. + +That was so unbelievably vivid and high-intensity, the ending has brought me to tears. Trip of a lifetime worth waiting and dreaming multiple years for this to materialize. + +2658 total miles ... +
+
+ + + +
+ + +
+ +
+ + + + + +408 miles +15 days +8 lb base weight +4000 cals/day +3 toe blisters +Countless jaw drops in the San Juans + + + + +Having a summer off in between my last two semesters in college seemed like a perfect opportunity to venture on a thru hike. This being my first long solo hike, my main focus for th... +
+
+ + + +
+ + +
+ +
+ + + + +Kelsey is living in London this year so I decided to visit her during Spring Break. We made a trip out to Scotland for a 4 days and the Skye Trail seemed like the most scenic, yet accesible option for a quick backpacking trip. + +This island had some scenery straight out of a fantasy dragon-lan... +
+
+ + + +
+ + +
+ +
+ With a 5 day window open during Thanksgiving break, I set out to hike a little loop in the Grand Canyon. All of the campsites were booked for the Rim to Rim trail, so instead I opted for an alternative. + +The thirty-something mile loop I did started out in Hermit’s rest, went down the canyon via t... +
+
+ + + +
+ + +
+ +
+ + + + + + + + + + + + + + + + +
+
+ + + +
+ + +
+ +
+ During the early summer of 2016, I headed to Europe to visit an old friend and set to hike the northern half of the GR20 route in 7 days. + + + “GR 20 is a long distance trail that traverses Corsica diagonally from north to south. It is considered to be the most difficult of all the GR routes and o... +
+
+ + + +
+ + +
+ +
+ +2 dudes +170 miles +14 days + + + + + + + + + + + + + + + + + + + + + +View full album here. + + + + +The John Muir Trail was my very first thru hike. Prior to the trip I thought I had no idea what I was doing and planned the trip excessively: I picked out a camp site for every night, typed up all my meals typed up in a ... +
+
+ + + +
+ +
+

[ Tech ]

+ + + + + + + +
+ + +
+ +
+ Between November of 2020 and May 2021, I dedicated most of my time to building my dream home of wheels. It has been a labor of love and patience putting this together from CAD modeling every structure to materializing the build with carpentry work. Although my background is more aligned to softwa... +
+
+ + + +
+ + +
+ +
+ During the period between September 2019 and March 2020, I helped built the AR product GLIMPSE cards. GLIMPSE cards are business cards that can present digital content to the card’s receiver with the aid of Augmented Reality. + + + +The GLIMPSE card owner can use the web app to (1) customize business... +
+
+ + + +
+ + +
+ +
+ About + +Day trading involves a competition with a large crowd of investors to react to market conditions that you can predict and react with speed. In theory, trading in an automated fashion can allow you to generate profits with a speed and frequency that is impossible for a human to execute. Oth... +
+
+ + + +
+ + + + + +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/_site/css/style.css b/_site/css/style.css new file mode 100644 index 0000000..ba2e7ca --- /dev/null +++ b/_site/css/style.css @@ -0,0 +1,1002 @@ +@charset "UTF-8"; +/* Changed from light gray */ +/** + * Reset some basic elements + */ +body, h1, h2, h3, h4, h5, h6, +p, blockquote, pre, hr, +dl, dd, ol, ul, figure { + margin: 0; + padding: 0; +} + +/** + * Basic styling + */ +body { + font: 400 16px / 1.5 "Source Sans Pro", Helvetica, Arial, sans-serif; + color: #000; + background-color: #ffffff; + -webkit-text-size-adjust: 100%; + -webkit-font-feature-settings: "kern" 1; + -moz-font-feature-settings: "kern" 1; + -o-font-feature-settings: "kern" 1; + font-feature-settings: "kern" 1; + font-kerning: normal; +} + +/** + * Set `margin-bottom` to maintain vertical rhythm + */ +h1, h2, h3, h4, h5, h6, +p, blockquote, pre, +ul, ol, dl, figure, +.highlight { + margin-bottom: 15px; +} + +/** + * Images + */ +img { + max-width: 100%; + vertical-align: middle; +} + +/** + * Figures + */ +figure > img { + display: block; +} + +figcaption { + font-size: 14px; +} + +/** + * Lists + */ +ul, ol { + margin-left: 30px; +} + +li > ul, +li > ol { + margin-bottom: 0; +} + +/** + * Headings + */ +h1, h2, h3, h4, h5, h6 { + font-weight: 400; +} + +/** + * Links + */ +a { + color: #000 !important; + text-decoration: none; +} +a:visited { + color: rgb(22.9483471074, 86.2541322314, 168.5516528926); +} +a:hover { + color: black !important; + border-bottom: 1px dotted black; +} +a.page-link:hover { + color: #000; + border-bottom: 1px dotted black; +} +a.postLink { + color: black !important; +} +a.postLink:hover { + border-bottom: 1px dotted black; +} +a.postLink:visited { + color: "crimson" !important; +} +a.post-title-link { + color: black !important; +} +a.post-title-link:hover { + border-bottom: 1px dotted black !important; +} +a.post-title-link:visited { + color: "crimson" !important; +} + +/** + * Blockquotes + */ +blockquote { + color: #828282; + border-left: 4px solid #e8e8e8; + padding-left: 15px; + font-size: 18px; + letter-spacing: -1px; + font-style: italic; +} +blockquote > :last-child { + margin-bottom: 0; +} + +/** + * Code formatting + */ +pre, +code { + font-size: 15px; + border: 1px solid #e8e8e8; + border-radius: 3px; + background-color: #eef; +} + +code { + padding: 1px 5px; +} + +pre { + padding: 8px 12px; + overflow-x: auto; +} +pre > code { + border: 0; + padding-right: 0; + padding-left: 0; +} + +/** + * Wrapper + */ +.wrapper { + max-width: -webkit-calc(800px - (30px * 2)); + max-width: calc(800px - 30px * 2); + margin-right: auto; + margin-left: auto; + padding-right: 30px; + padding-left: 30px; +} +@media screen and (max-width: 800px) { + .wrapper { + max-width: -webkit-calc(800px - (30px)); + max-width: calc(800px - (30px)); + padding-right: 15px; + padding-left: 15px; + } +} + +/** + * Clearfix + */ +.wrapper:after { + content: ""; + display: table; + clear: both; +} + +/** + * Icons + */ +.post { + font-family: "Source Sans Pro"; + font-size: 18px; + font-weight: 300; + padding-top: 0; +} + +.home { + padding-bottom: 2em; +} + +.download { + padding: 10px; +} + +.authorKeyword { + text-transform: uppercase; + font-size: 16px; + letter-spacing: 2px; + text-indent: 2px; + padding-top: 0.5em; +} + +.writtenBy { + letter-spacing: 0; + text-indent: 0; + text-transform: uppercase; +} + +.about-me { + text-align: justify; + padding-left: 1em; + padding-right: 1em; + font-size: 20px; + font-family: "Source Sans Pro"; + font-weight: 300; + line-height: 150%; +} +.about-me .how-i-can-provide { + background-color: #f5f5f5; + padding: 16px; + border-radius: 20px; + margin-bottom: 26px; + border: 1px solid black; +} +.about-me a { + font-weight: 500; +} +.about-me b { + font-weight: 500; +} +.about-me ul { + list-style-type: "- "; + line-height: normal; + margin-left: 16px; +} +.about-me ul b { + color: blue; +} +.about-me li { + margin-top: 16px; +} +.about-me p { + padding-bottom: 0.5em; +} + +.archiveIntro { + text-align: center; +} + +.hint { + text-transform: uppercase; + font-size: 11px; + letter-spacing: 2px; + text-indent: 2px; +} + +.example { + font-family: "Menlo"; + padding: 10px; +} + +.manual { + text-transform: uppercase; + font-size: 16px; + letter-spacing: 2px; + text-indent: 2px; +} + +.postContent { + padding-bottom: 3em; + text-align: left; +} + +.postDate { + float: left; + text-transform: uppercase; + font-family: "Source Sans Pro"; + font-size: 16px; + font-weight: 300; + letter-spacing: 2px; + text-indent: 2px; +} + +.postTag { + float: right; +} + +.postTitle { + font-family: "Helvetica Neue", Helvetica; + font-weight: 400; + text-align: left; + text-transform: uppercase; + letter-spacing: 3px; + text-indent: 3px; +} + +/** + * Site header + */ +.site-header { + border-top: 5px solid rgb(66.25, 66.25, 66.25); + border-bottom: 1px solid #e8e8e8; + min-height: 56px; + position: relative; +} + +.site-title { + font-size: 64px; + font-weight: 100; + font-family: "Helvetica Neue", Helvetica; + text-transform: capitalize; + font-weight: 300; + margin-top: 10px; /* Changed */ +} +.site-title, .site-title:visited { + color: rgb(66.25, 66.25, 66.25); +} + +.site-description { + color: rgb(66.25, 66.25, 66.25); + font-size: 12px; + letter-spacing: 2px; + text-indent: 6px; + font-family: "Josefin Sans"; +} + +.exclamationMark { + padding-left: 2em; + padding-right: 2em; +} + +.site-navigation { + color: #000; + text-transform: uppercase; + font-size: 14px; + letter-spacing: 2px; + text-indent: 8px; + font-family: "Helvetica Neue", Helvetica; + font-weight: 300; + padding-top: 2em; + padding-bottom: 2em; +} +@media screen and (max-width: 600px) { + .site-navigation { /* ADDED: allows elements to be displayed better on mobile */ + font-size: 12px; + } +} + +.page-title { + text-transform: uppercase; + letter-spacing: 2px; + text-indent: 2px; + font-family: "Helvetica Neue", Helvetica; + font-size: 18px; + text-align: center; +} + +.page-tagline { + font-size: 18px; + font-family: "PT Sans"; + color: rgb(170, 170, 170); + text-align: center; + text-transform: lowercase; +} + +.page-link { + color: rgb(170, 170, 170); +} + +.site-nav .page-link { + color: #000; + line-height: 1.5; +} +.site-nav .page-link:not(:last-child) { + margin-right: 20px; +} +@media screen and (max-width: 600px) { + .site-nav { + position: absolute; + top: 9px; + right: 15px; + background-color: #ffffff; + border: 1px solid #e8e8e8; + border-radius: 5px; + text-align: right; + } + .site-nav .menu-icon { + display: block; + float: right; + width: 36px; + height: 26px; + line-height: 0; + padding-top: 10px; + text-align: center; + } + .site-nav .menu-icon > svg { + width: 18px; + height: 15px; + } + .site-nav .menu-icon > svg path { + fill: rgb(66.25, 66.25, 66.25); + } + .site-nav .trigger { + clear: both; + display: none; + } + .site-nav:hover .trigger { + display: block; + padding-bottom: 5px; + } + .site-nav .page-link { + display: block; + padding: 5px 10px; + margin-left: 20px; + } + .site-nav .page-link:not(:last-child) { + margin-right: 0; + } +} + +/** + * Site footer + */ +.container { + min-height: calc(100vh - 36px); + margin-bottom: -36px; +} + +.push { + height: 36px; + margin-bottom: -37px; +} + +.site-footer { + position: relative; + left: 0; + bottom: 0; + height: 36px; + border-top: 2px dashed #e8e8e8; + padding: 15px; + text-align: center; +} + +.footer-icon { + margin-left: 6px; + margin-right: 6px; +} +.footer-icon svg { + display: inline-block; + width: 30px; + height: 30px; + vertical-align: middle; +} +.footer-icon svg path { + fill: rgb(66.25, 66.25, 66.25); +} +.footer-icon a:hover { + border-bottom: 0px; +} +.footer-icon a:hover path { + fill: #1B3FAE; +} + +@media screen and (max-width: 600px) { + .footer-icon svg { + width: 24px; + height: 24px; + } +} +/** + * Page content + */ +.page-content { + padding: 0; +} + +.page-heading { + font-size: 20px; +} + +.post-list { + margin-left: 0; + list-style: none; +} +.post-list > li { + margin-bottom: 30px; +} + +.post-meta { + font-size: 14px; + color: #828282; + text-transform: uppercase; + font-size: 16px; +} + +.post-link { + display: block; + font-size: 24px; +} + +/** + * Posts + */ +.post-header { + margin-bottom: 30px; +} + +.post-title { + font-size: 36px; + text-align: center; + font-family: "Source Sans Pro"; + font-weight: 400; +} +@media screen and (max-width: 800px) { + .post-title { + font-size: 36px; + } +} + +.post-content { + margin-bottom: 30px; + padding-bottom: 1em !important; +} +.post-content p { + font-size: 1.2rem; +} +.post-content h2 { + font-size: 32px; +} +@media screen and (max-width: 800px) { + .post-content h2 { + font-size: 28px; + } +} +.post-content h3 { + font-size: 26px; +} +@media screen and (max-width: 800px) { + .post-content h3 { + font-size: 22px; + } +} +.post-content h4 { + font-size: 20px; +} +@media screen and (max-width: 800px) { + .post-content h4 { + font-size: 18px; + } +} + +/** + * Pagination + */ +.pagination { + padding-top: 3.5em; + text-align: center; +} + +.paginationLink { + border: 0; + display: inline-block; + padding: 5px; + text-decoration: none; + transition: color 200ms ease-out; +} +.paginationLink:hover, .paginationLink:active, .paginationLink:focus { + border: 0; +} + +.paginationLinkCurrent { + font-style: normal; +} + +.postNavigation { + align-items: center; + display: flex; + justify-content: space-between; + padding-bottom: 3em; +} +.postNavigation a:only-child { + width: 100%; +} + +.postPrev, +.postNext { + display: inline-block; + width: 49%; +} +.postPrev:hover, .postPrev:active, .postPrev:focus, +.postNext:hover, +.postNext:active, +.postNext:focus { + border: 0; +} + +.postNext { + text-align: right; +} + +/* + * ADDED: for blog categories; + */ +.catbloc:not(:target) { + display: none; +} + +/* + * ADDED: for project stuff + */ +.projects { + padding-top: 1em; +} +.projects p { + font-size: 1rem; +} +.projects strong { + font-weight: 400; + font-family: Arial; +} + +.project { + width: 720px; + border: 1px solid #c9c9c9; + overflow: auto; + transition: background 0.8s linear; + -webkit-transition: background 0.8s linear; + -moz-transition: background 0.8s linear; +} +@media screen and (max-width: 800px) { + .project { + margin: auto; + width: 500px; + } +} +@media screen and (max-width: 600px) { + .project { + margin: auto; + width: 320px; + } +} + +.project-title { + padding-bottom: 5px; +} +.project-title h2 { + font-size: 22px; + display: inline; +} +@media screen and (max-width: 800px) { + .project-title h2 { + font-size: 18px; + } +} +.project-title h2::after { + content: "  "; +} +.project-title .date { + font-size: 18px; + color: #999999; + display: inline; + position: relative; +} +@media screen and (max-width: 800px) { + .project-title .date { + font-size: 18px; + } +} + +.project-image { + width: 32%; + float: left; + padding: 10px; + border: 0px solid red; + box-sizing: border-box; +} + +.project-body { + width: 68%; + float: left; + padding: 5px; + padding-right: 1rem; + border: 0px solid red; + box-sizing: border-box; +} + +.project-links { + float: left; + font-size: 1rem; + font-style: bold; +} +.project-links .a:hover { + color: #1B3FAE; + border-bottom: 1px dotted black; +} + +.project-tags { + float: right; + list-style: none; + padding-top: 0.2rem; + margin-left: 15px; +} +.project-tags .project-tag { + /* For mobile */ + display: inline-block; + /* Tag rounded edges */ + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + /* Tag box properties */ + border: 1px solid black; + background: #ffffff; + padding: 6px; + font-size: 0.9rem; + font-family: "Open Sans", sans-serif; + /* Space between tags */ + margin-left: 3px; + margin-bottom: 5px; +} +@media screen and (max-width: 800px) { + .project-tags .project-tag { + font-size: 0.8rem; + padding: 4px; + } +} +@media screen and (max-width: 600px) { + .project-tags .project-tag { + font-size: 0.7rem; + padding: 3px; + } +} + +.projects-bottom { + text-align: center; +} + +.fa { + font-size: 1.3rem; +} + +.project:hover { + background: #efefef; +} + +.miniproject:hover { + background: #efefef; +} + +/* + * ADDED: for OUTSIDE page + */ +.outside { + padding-top: 1rem; + font-size: 18px; +} +.outside h3 { + font-family: "Helvetica Neue", Helvetica; + text-transform: uppercase; + letter-spacing: 4px; + text-indent: 2px; + font-weight: 300; +} +.outside h4 { + font-weight: 300; + display: inline-block; + text-decoration: none; + border-bottom: 1px dashed black; + margin-bottom: 1em; +} +.outside h5 { + font-size: 18px; + font-weight: 100; +} +.outside p { + text-align: justify; + font-size: 18px; +} +.outside ul { + padding-left: 1rem; + list-style-type: none; +} +.outside li { + margin: 0 0 10px 0; +} +.outside a { + font-weight: 400; +} +.outside .a:hover { + border-bottom: 1px dotted black; +} +.outside .showpast:hover { + border-bottom: 1px dotted #777; +} + +/** + * Syntax highlighting styles + */ +.highlight { + background: #fff; +} +.highlighter-rouge .highlight { + background: #eef; +} +.highlight .c { + color: #998; + font-style: italic; +} +.highlight .err { + color: #a61717; + background-color: #e3d2d2; +} +.highlight .k { + font-weight: bold; +} +.highlight .o { + font-weight: bold; +} +.highlight .cm { + color: #998; + font-style: italic; +} +.highlight .cp { + color: #999; + font-weight: bold; +} +.highlight .c1 { + color: #998; + font-style: italic; +} +.highlight .cs { + color: #999; + font-weight: bold; + font-style: italic; +} +.highlight .gd { + color: #000; + background-color: #fdd; +} +.highlight .gd .x { + color: #000; + background-color: #faa; +} +.highlight .ge { + font-style: italic; +} +.highlight .gr { + color: #a00; +} +.highlight .gh { + color: #999; +} +.highlight .gi { + color: #000; + background-color: #dfd; +} +.highlight .gi .x { + color: #000; + background-color: #afa; +} +.highlight .go { + color: #888; +} +.highlight .gp { + color: #555; +} +.highlight .gs { + font-weight: bold; +} +.highlight .gu { + color: #aaa; +} +.highlight .gt { + color: #a00; +} +.highlight .kc { + font-weight: bold; +} +.highlight .kd { + font-weight: bold; +} +.highlight .kp { + font-weight: bold; +} +.highlight .kr { + font-weight: bold; +} +.highlight .kt { + color: #458; + font-weight: bold; +} +.highlight .m { + color: #099; +} +.highlight .s { + color: #d14; +} +.highlight .na { + color: #008080; +} +.highlight .nb { + color: #0086B3; +} +.highlight .nc { + color: #458; + font-weight: bold; +} +.highlight .no { + color: #008080; +} +.highlight .ni { + color: #800080; +} +.highlight .ne { + color: #900; + font-weight: bold; +} +.highlight .nf { + color: #900; + font-weight: bold; +} +.highlight .nn { + color: #555; +} +.highlight .nt { + color: #000080; +} +.highlight .nv { + color: #008080; +} +.highlight .ow { + font-weight: bold; +} +.highlight .w { + color: #bbb; +} +.highlight .mf { + color: #099; +} +.highlight .mh { + color: #099; +} +.highlight .mi { + color: #099; +} +.highlight .mo { + color: #099; +} +.highlight .sb { + color: #d14; +} +.highlight .sc { + color: #d14; +} +.highlight .sd { + color: #d14; +} +.highlight .s2 { + color: #d14; +} +.highlight .se { + color: #d14; +} +.highlight .sh { + color: #d14; +} +.highlight .si { + color: #d14; +} +.highlight .sx { + color: #d14; +} +.highlight .sr { + color: #009926; +} +.highlight .s1 { + color: #d14; +} +.highlight .ss { + color: #990073; +} +.highlight .bp { + color: #999; +} +.highlight .vc { + color: #008080; +} +.highlight .vg { + color: #008080; +} +.highlight .vi { + color: #008080; +} +.highlight .il { + color: #099; +} + +/*# sourceMappingURL=style.css.map */ \ No newline at end of file diff --git a/_site/css/style.css.map b/_site/css/style.css.map new file mode 100644 index 0000000..e855918 --- /dev/null +++ b/_site/css/style.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["style.scss"],"names":[],"mappings":";AAgB4B;AAuC5B;AAAA;AAAA;AAGA;AAAA;AAAA;EAGI;EACA;;;AAKJ;AAAA;AAAA;AAGA;EACI;EACA,OAzDe;EA0Df,kBAzDe;EA0Df;EACA;EACA;EACA;EACA;EACA;;;AAKJ;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;EAII;;;AAKJ;AAAA;AAAA;AAGA;EACI;EACA;;;AAKJ;AAAA;AAAA;AAGA;EACI;;;AAGJ;EACI,WAxGe;;;AA6GnB;AAAA;AAAA;AAGA;EACI,aA9Ge;;;AAkHf;AAAA;EAEK;;;AAMT;AAAA;AAAA;AAGA;EACI,aAlIe;;;AAuInB;AAAA;AAAA;AAGA;EACI;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;;AAIF;EACI,OAnJS;EAoJT;;AAGN;EACE;;AACA;EAEI;;AAGJ;EACI;;AAGN;EACE;;AACA;EAEI;;AAGJ;EACI;;;AAOV;AAAA;AAAA;AAGA;EACI,OAhLe;EAiLf;EACA;EACA;EACA;EACA;;AAEA;EACI;;;AAMR;AAAA;AAAA;AAGA;AAAA;EAEI;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;;AAEA;EACI;EACA;EACA;;;AAMR;AAAA;AAAA;AAGA;EACI;EACA;EACA;EACA;EACA,eAzOe;EA0Of,cA1Oe;;AA2Bf;EAyMJ;IAUQ;IACA;IACA;IACA;;;;AAMR;AAAA;AAAA;AAKI;EACI;EACA;EACA;;;AAMR;AAAA;AAAA;AAiBA;EACE;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EAEA;EACA;EA8BA;;AA5BA;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAEF;EACE;;AAEF;EACE;EACA;EACA;;AACA;EACE;;AAGJ;EACE;;AAEF;EACE;;;AAKJ;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;AAAA;AAAA;AAGA;EACE;EACA;EACA;EAEA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AACA;EAEE,OA3Ye;;;AA8YnB;EACE,OA/YiB;EAgZjB;EACA;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAhZE;EAuYJ,mBAYmC;IAC/B;;;;AAGJ;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAGA;EACE,OApce;EAqcf,aAzce;;AA2cf;EACE;;AA/aF;EAyaJ;IAUI;IACA;IACA;IACA,kBA9ce;IA+cf;IACA;IACA;;EACA;IACE;IACA;IACA;IACA;IACA;IACA;IACA;;EACA;IACE;IACA;;EACA;IACE,MAxdS;;EA4df;IACE;IACA;;EAEF;IACE;IACA;;EAEF;IACE;IACA;IAIA;;EAHA;IACE;;;;AAMR;AAAA;AAAA;AAIA;EACE;EACA;;;AAGD;EACC;EACA;;;AAGF;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA;;AACA;EAAO,MAhhBQ;;AAmhBjB;EACE;;AACA;EAAO,MAxhBO;;;AAqBd;EAghBA;IACI;IACA;;;AAIR;AAAA;AAAA;AAGA;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;;AACA;EACE,eA9jBe;;;AAikBnB;EACE,WArkBiB;EAskBjB,OA5jBiB;EA6jBjB;EACA;;;AAEF;EACE;EACA;;;AAEF;AAAA;AAAA;AAGA;EACE,eA/kBiB;;;AAilBnB;EACE;EACA;EACA;EACA;;AA1jBE;EAsjBJ;IAMI;;;;AAGJ;EACE,eA3lBiB;EA4lBjB;;AACA;EACE;;AAEF;EACE;;AAtkBA;EAqkBF;IAGI;;;AAGJ;EACE;;AA5kBA;EA2kBF;IAGI;;;AAGJ;EACE;;AAllBA;EAilBF;IAGI;;;;AAKN;AAAA;AAAA;AAGC;EACI;EACA;;;AAEJ;EACI;EACA;EACA;EACA;EACA;;AAEA;EAGI;;;AAGR;EACI;;;AAGL;EACI;EACA;EACA;EACA;;AAEA;EACI;;;AAGR;AAAA;EAEI;EACA;;AACA;AAAA;AAAA;AAAA;EAGI;;;AAGR;EACI;;;AAGJ;AAAA;AAAA;AAIA;EACI;;;AAGJ;AAAA;AAAA;AAIA;EAYE;;AATA;EACE;;AAGF;EACE;EACA;;;AAOJ;EACE;EACA;EACA;EAGC;EACA;EACA;;AA7qBC;EAqqBJ;IAYQ;IACA;;;AAlrBJ;EAqqBJ;IAiBM;IACA;;;;AAQN;EAEE;;AAEA;EACE;EAIA;;AAxsBA;EAmsBF;IAGI;;;AAKJ;EACE;;AAIF;EAEE;EACA;EAIA;EAEE;;AAztBF;EAgtBF;IAKI;;;;AAWN;EACI;EACA;EACA;EACA;EACA;;;AAEJ;EACI;EACA;EACA;EACA;EAEA;EACA;;;AAGJ;EACI;EACA;EACA;;AACA;EACI,OA3wBU;EA4wBV;;;AAIR;EACI;EACA;EACA;EACA;;AAGA;AACE;EACA;AAEA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;;AApxBF;EAkwBA;IAsBI;IACA;;;AAzxBJ;EAkwBA;IA2BE;IACA;;;;AASN;EAEE;;;AAGF;EACE;;;AAGF;EACI;;;AAGJ;EACI;;;AAGJ;AAAA;AAAA;AAIA;EAEE;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAGJ;EACE;EACA;;AAIF;EACE;EACA;;AAIF;EACK;;AAGL;EACE;;AAGF;EACI;;AAGJ;EACE;;;AAUJ;AAAA;AAAA;AAGA;EACI;;AAGA;EACE;;AAGF;EAAS;EAAa;;AACtB;EAAS;EAAgB;;AACzB;EAAS;;AACT;EAAS;;AACT;EAAS;EAAa;;AACtB;EAAS;EAAa;;AACtB;EAAS;EAAa;;AACtB;EAAS;EAAa;EAAmB;;AACzC;EAAS;EAAa;;AACtB;EAAS;EAAa;;AACtB;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;EAAa;;AACtB;EAAS;EAAa;;AACtB;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;EAAa;;AACtB;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;EAAa;;AACtB;EAAS;;AACT;EAAS;;AACT;EAAS;EAAa;;AACtB;EAAS;EAAa;;AACtB;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS","sourcesContent":["// @import \"main\";\n\n@charset \"utf-8\";\n\n// Our variables\n@use \"sass:list\";\n\n$base-font-family: \"Source Sans Pro\", Helvetica, Arial, sans-serif;\n$base-font-size: 16px;\n$base-font-weight: 400;\n$small-font-size: $base-font-size * 0.875;\n$base-line-height: 1.5;\n\n$spacing-unit: 30px;\n\n$text-color: #000;\n$background-color: #ffffff; /* Changed from light gray */\n$brand-color: #2a7ae2;\n\n$blue-color: #1B3FAE;\n$grey-color: #828282;\n$grey-color-light: lighten($grey-color, 40%);\n$grey-color-dark: darken($grey-color, 25%);\n\n// Width of the content area\n$content-width: 800px;\n\n$on-palm: 600px;\n$on-laptop: 800px;\n\n\n\n// Use media queries like this:\n// @include media-query($on-palm) {\n// .wrapper {\n// padding-right: $spacing-unit / 2;\n// padding-left: $spacing-unit / 2;\n// }\n// }\n@mixin media-query($device) {\n @media screen and (max-width: $device) {\n @content;\n }\n}\n\n\n\n// Import partials from `sass_dir` (defaults to `_sass`)\n@import\n \"base\",\n \"layout\",\n \"syntax-highlighting\"\n;\n\n\n/**\n * Reset some basic elements\n */\nbody, h1, h2, h3, h4, h5, h6,\np, blockquote, pre, hr,\ndl, dd, ol, ul, figure {\n margin: 0;\n padding: 0;\n}\n\n\n\n/**\n * Basic styling\n */\nbody {\n font: $base-font-weight list.slash($base-font-size, $base-line-height) $base-font-family;\n color: $text-color;\n background-color: $background-color;\n -webkit-text-size-adjust: 100%;\n -webkit-font-feature-settings: \"kern\" 1;\n -moz-font-feature-settings: \"kern\" 1;\n -o-font-feature-settings: \"kern\" 1;\n font-feature-settings: \"kern\" 1;\n font-kerning: normal;\n}\n\n\n\n/**\n * Set `margin-bottom` to maintain vertical rhythm\n */\nh1, h2, h3, h4, h5, h6,\np, blockquote, pre,\nul, ol, dl, figure,\n%vertical-rhythm {\n margin-bottom: $spacing-unit * 0.5;\n}\n\n\n\n/**\n * Images\n */\nimg {\n max-width: 100%;\n vertical-align: middle;\n}\n\n\n\n/**\n * Figures\n */\nfigure > img {\n display: block;\n}\n\nfigcaption {\n font-size: $small-font-size;\n}\n\n\n\n/**\n * Lists\n */\nul, ol {\n margin-left: $spacing-unit;\n}\n\nli {\n > ul,\n > ol {\n margin-bottom: 0;\n }\n}\n\n\n\n/**\n * Headings\n */\nh1, h2, h3, h4, h5, h6 {\n font-weight: $base-font-weight;\n}\n\n\n\n/**\n * Links\n */\na {\n color: #000 !important;\n text-decoration: none;\n\n &:visited {\n color: darken($brand-color, 15%);\n }\n\n &:hover {\n color: black !important;\n border-bottom: 1px dotted black ;\n }\n\n &.page-link{\n &:hover {\n color: $text-color;\n border-bottom: 1px dotted black ;\n }\n }\n &.postLink{\n color: black !important;\n &:hover {\n\n border-bottom: 1px dotted black ;\n }\n\n &:visited {\n color: \"crimson\" !important;\n }\n }\n &.post-title-link{\n color: black !important;\n &:hover {\n\n border-bottom: 1px dotted black !important ;\n }\n\n &:visited {\n color: \"crimson\" !important;\n }\n }\n}\n\n\n\n/**\n * Blockquotes\n */\nblockquote {\n color: $grey-color;\n border-left: 4px solid $grey-color-light;\n padding-left: $spacing-unit * 0.5;\n font-size: 18px;\n letter-spacing: -1px;\n font-style: italic;\n\n > :last-child {\n margin-bottom: 0;\n }\n}\n\n\n\n/**\n * Code formatting\n */\npre,\ncode {\n font-size: 15px;\n border: 1px solid $grey-color-light;\n border-radius: 3px;\n background-color: #eef;\n}\n\ncode {\n padding: 1px 5px;\n}\n\npre {\n padding: 8px 12px;\n overflow-x: auto;\n\n > code {\n border: 0;\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n\n\n/**\n * Wrapper\n */\n.wrapper {\n max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit} * 2));\n max-width: calc(#{$content-width} - (#{$spacing-unit} * 2));\n margin-right: auto;\n margin-left: auto;\n padding-right: $spacing-unit;\n padding-left: $spacing-unit;\n @extend %clearfix;\n\n @include media-query($on-laptop) {\n max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit}));\n max-width: calc(#{$content-width} - (#{$spacing-unit}));\n padding-right: $spacing-unit * 0.5;\n padding-left: $spacing-unit * 0.5;\n }\n}\n\n\n\n/**\n * Clearfix\n */\n%clearfix {\n\n &:after {\n content: \"\";\n display: table;\n clear: both;\n }\n}\n\n\n\n/**\n * Icons\n */\n// .icon {\n\n// > svg {\n// display: inline-block;\n// width: 16px;\n// height: 16px;\n// vertical-align: middle;\n\n// path {\n// fill: $grey-color;\n// }\n// }\n// }\n\n.post {\n font-family: \"Source Sans Pro\";\n font-size: 18px;\n font-weight: 300;\n padding-top: 0;\n}\n.home{\n padding-bottom: 2em;\n}\n.download {\n padding: 10px;\n}\n.authorKeyword {\n text-transform: uppercase;\n font-size: 16px;\n letter-spacing: 2px;\n text-indent: 2px;\n padding-top:0.5em;\n}\n.writtenBy {\n letter-spacing: 0;\n text-indent: 0;\n text-transform: uppercase;\n}\n.about-me {\n text-align: justify;\n padding-left: 1em;\n padding-right: 1em;\n font-size: 20px;\n\n font-family: \"Source Sans Pro\";\n font-weight: 300;\n\n .how-i-can-provide {\n background-color: #f5f5f5;\n padding: 16px;\n border-radius: 20px;\n margin-bottom: 26px;\n border: 1px solid black;\n }\n\n a {\n font-weight: 500;\n }\n b {\n font-weight: 500\n }\n ul {\n list-style-type: '- ';\n line-height: normal;\n margin-left: 16px;\n b {\n color: blue;\n }\n }\n li {\n margin-top: 16px;\n }\n p{\n padding-bottom:0.5em;\n }\n line-height:150%;\n\n}\n.archiveIntro {\n text-align: center;\n}\n.hint {\n text-transform: uppercase;\n font-size: 11px;\n letter-spacing: 2px;\n text-indent: 2px;\n}\n.example {\n font-family: 'Menlo';\n padding: 10px;\n}\n.manual {\n text-transform: uppercase;\n font-size: 16px;\n letter-spacing: 2px;\n text-indent: 2px;\n}\n.postContent {\n padding-bottom: 3em;\n text-align: left;\n}\n.postDate {\n float: left;\n text-transform: uppercase;\n font-family: \"Source Sans Pro\";\n font-size: 16px;\n font-weight: 300;\n letter-spacing: 2px;\n text-indent: 2px;\n}\n.postTag {\n float: right;\n}\n.postTitle {\n font-family: \"Helvetica Neue\", Helvetica;\n font-weight: 400;\n text-align: left;\n text-transform: uppercase;\n letter-spacing: 3px;\n text-indent: 3px;\n}\n/**\n * Site header\n */\n.site-header {\n border-top: 5px solid $grey-color-dark;\n border-bottom: 1px solid $grey-color-light;\n min-height: 56px;\n // Positioning context for the mobile navigation icon\n position: relative;\n}\n.site-title {\n font-size: 64px;\n font-weight: 100;\n font-family: 'Helvetica Neue', Helvetica;\n text-transform: capitalize;\n font-weight: 300;\n margin-top: 10px; /* Changed */\n &,\n &:visited {\n color: $grey-color-dark;\n }\n}\n.site-description {\n color: $grey-color-dark; \n font-size: 12px;\n letter-spacing: 2px;\n text-indent: 6px;\n font-family: 'Josefin Sans';\n}\n.exclamationMark {\n padding-left: 2em;\n padding-right: 2em;\n}\n.site-navigation {\n color: #000;\n text-transform: uppercase;\n font-size: 14px;\n letter-spacing: 2px;\n text-indent: 8px;\n font-family: 'Helvetica Neue', Helvetica;\n font-weight: 300;\n padding-top: 2em;\n padding-bottom: 2em;\n\n\n @include media-query($on-palm) { /* ADDED: allows elements to be displayed better on mobile */\n font-size: 12px;\n }\n}\n.page-title {\n text-transform: uppercase;\n letter-spacing: 2px;\n text-indent: 2px;\n font-family: \"Helvetica Neue\", Helvetica;\n font-size: 18px;\n text-align:center;\n}\n.page-tagline {\n font-size: 18px;\n font-family: \"PT Sans\";\n color: rgb(170, 170, 170);\n text-align: center;\n text-transform: lowercase;\n}\n.page-link {\n color: rgb(170, 170, 170);\n}\n.site-nav {\n .page-link {\n color: $text-color;\n line-height: $base-line-height;\n // Gaps between nav items, but not on the last one\n &:not(:last-child) {\n margin-right: 20px;\n }\n }\n @include media-query($on-palm) {\n position: absolute;\n top: 9px;\n right: $spacing-unit * 0.5;\n background-color: $background-color;\n border: 1px solid $grey-color-light;\n border-radius: 5px;\n text-align: right;\n .menu-icon {\n display: block;\n float: right;\n width: 36px;\n height: 26px;\n line-height: 0;\n padding-top: 10px;\n text-align: center;\n > svg {\n width: 18px;\n height: 15px;\n path {\n fill: $grey-color-dark;\n }\n }\n }\n .trigger {\n clear: both;\n display: none;\n }\n &:hover .trigger {\n display: block;\n padding-bottom: 5px;\n }\n .page-link {\n display: block;\n padding: 5px 10px;\n &:not(:last-child) {\n margin-right: 0;\n }\n margin-left: 20px;\n }\n }\n}\n/**\n * Site footer\n */\n\n.container {\n min-height: calc(100vh - 36px); \n margin-bottom: -36px; \n}\n\n .push {\n height: 36px;\n margin-bottom: -37px;\n }\n\n.site-footer {\n position: relative;\n left:0;\n bottom: 0;\n height: 36px;\n\n border-top: 2px dashed $grey-color-light;\n padding: $spacing-unit*0.5;\n text-align: center;\n}\n\n.footer-icon {\n margin-left:6px;\n margin-right:6px;\n \n svg {\n display: inline-block;\n width: 30px;\n height: 30px;\n vertical-align: middle;\n path { fill: $grey-color-dark; }\n }\n\n a:hover {\n border-bottom: 0px;\n path { fill: $blue-color; }\n }\n\n}\n\n@include media-query($on-laptop) {\n \n}\n@include media-query($on-palm) { \n // margin-left:5px;\n // margin-right:5px;\n\n .footer-icon { \n svg {\n width: 24px;\n height: 24px;\n }\n }\n}\n/**\n * Page content\n */\n.page-content {\n padding: 0;\n}\n.page-heading {\n font-size: 20px;\n}\n.post-list {\n margin-left: 0;\n list-style: none;\n > li {\n margin-bottom: $spacing-unit;\n }\n}\n.post-meta {\n font-size: $small-font-size;\n color: $grey-color;\n text-transform: uppercase;\n font-size: 16px;\n}\n.post-link {\n display: block;\n font-size: 24px;\n}\n/**\n * Posts\n */\n.post-header {\n margin-bottom: $spacing-unit;\n}\n.post-title {\n font-size: 36px;\n text-align: center;\n font-family: \"Source Sans Pro\";\n font-weight: 400;\n @include media-query($on-laptop) {\n font-size: 36px;\n }\n}\n.post-content {\n margin-bottom: $spacing-unit;\n padding-bottom: 1em !important;\n p {\n font-size: 1.2rem;\n }\n h2 {\n font-size: 32px;\n @include media-query($on-laptop) {\n font-size: 28px;\n }\n }\n h3 {\n font-size: 26px;\n @include media-query($on-laptop) {\n font-size: 22px;\n }\n }\n h4 {\n font-size: 20px;\n @include media-query($on-laptop) {\n font-size: 18px;\n }\n }\n}\n\n/**\n * Pagination\n */\n .pagination {\n padding-top: 3.5em;\n text-align: center;\n }\n .paginationLink {\n border: 0;\n display: inline-block;\n padding: 5px;\n text-decoration: none;\n transition: color 200ms ease-out;\n\n &:hover,\n &:active,\n &:focus {\n border: 0;\n }\n }\n .paginationLinkCurrent {\n font-style: normal;\n }\n\n.postNavigation {\n align-items: center;\n display: flex;\n justify-content: space-between;\n padding-bottom: 3em;\n\n a:only-child {\n width: 100%;\n }\n}\n.postPrev,\n.postNext {\n display: inline-block;\n width: 49%;\n &:hover,\n &:active,\n &:focus {\n border: 0;\n }\n}\n.postNext {\n text-align: right;\n}\n\n/*\n * ADDED: for blog categories;\n */\n\n.catbloc:not(:target) {\n display: none;\n}\n\n/*\n * ADDED: for project stuff\n */\n\n.projects {\n\n \n p {\n font-size: 1rem;\n }\n\n strong {\n font-weight: 400;\n font-family:Arial\n }\n\n padding-top: 1em;\n\n}\n\n.project {\n width:720px;\n border:1px solid #c9c9c9;\n overflow:auto; \n \n\n transition: background 0.8s linear;\n -webkit-transition: background 0.8s linear;\n -moz-transition: background 0.8s linear;\n \n \n @include media-query($on-laptop) {\n margin: auto; \n width:500px;\n }\n\n @include media-query($on-palm) {\n margin: auto; \n width:320px;\n }\n\n}\n\n\n\n\n.project-title{\n\n padding-bottom: 5px;\n\n h2 {\n font-size: 22px;\n @include media-query($on-laptop) {\n font-size: 18px;\n }\n display:inline\n }\n\n h2::after { \n content: \"\\00a0\\00a0\";\n }\n\n\n .date {\n\n font-size: 18px;\n color: #999999;\n @include media-query($on-laptop) {\n font-size: 18px;\n }\n display:inline;\n\n position: relative;\n\n }\n\n}\n\n\n.project-image {\n width: 32%;\n float: left;\n padding: 10px;\n border: 0px solid red;\n box-sizing: border-box;\n}\n.project-body {\n width: 68%;\n float: left;\n padding: 5px;\n padding-right: 1rem;\n\n border: 0px solid red;\n box-sizing: border-box;\n}\n\n.project-links{\n float: left;\n font-size: 1rem;\n font-style: bold;\n .a:hover{\n color: $blue-color;\n border-bottom: 1px dotted black ;\n }\n}\n\n.project-tags{\n float: right;\n list-style: none;\n padding-top: 0.2rem;\n margin-left: 15px;\n\n\n .project-tag{\n /* For mobile */\n display: inline-block;\n\n /* Tag rounded edges */\n -webkit-border-radius: 5px;\n -moz-border-radius: 5px;\n border-radius: 5px;\n\n /* Tag box properties */\n border: 1px solid black;\n background: #ffffff;\n padding: 6px;\n font-size: 0.9rem;\n font-family: 'Open Sans', sans-serif;\n\n /* Space between tags */\n margin-left: 3px;\n margin-bottom: 5px;\n\n\n @include media-query($on-laptop) {\n font-size: 0.8rem;\n padding: 4px; \n }\n \n @include media-query($on-palm) {\n font-size: 0.7rem;\n padding: 3px; \n }\n \n\n }\n\n\n}\n\n.projects-bottom {\n \n text-align: center;\n}\n\n.fa{\n font-size: 1.3rem;\n}\n\n.project:hover {\n background: #efefef;\n}\n\n.miniproject:hover {\n background: #efefef;\n}\n\n/*\n * ADDED: for OUTSIDE page\n */\n\n.outside {\n\n padding-top: 1rem;\n font-size: 18px;\n\n h3 {\n font-family: \"Helvetica Neue\", Helvetica;\n text-transform: uppercase;\n letter-spacing: 4px;\n text-indent: 2px;\n font-weight: 300;\n }\n\n h4 {\n font-weight: 300;\n display: inline-block;\n text-decoration: none;\n border-bottom: 1px dashed black;\n margin-bottom: 1em;\n }\n \n h5 {\n font-size: 18px;\n font-weight:100;\n }\n\n p {\n text-align: justify;\n font-size: 18px;\n }\n\n\n ul {\n padding-left: 1rem;\n list-style-type: none;\n\n }\n\n li {\n margin:0 0 10px 0; \n }\n\n a {\n font-weight: 400;\n }\n \n .a:hover{\n border-bottom: 1px dotted black;\n }\n\n .showpast:hover{\n border-bottom: 1px dotted #777;\n }\n\n\n}\n\n\n\n\n\n/**\n * Syntax highlighting styles\n */\n.highlight {\n background: #fff;\n @extend %vertical-rhythm;\n\n .highlighter-rouge & {\n background: #eef;\n }\n\n .c { color: #998; font-style: italic } // Comment\n .err { color: #a61717; background-color: #e3d2d2 } // Error\n .k { font-weight: bold } // Keyword\n .o { font-weight: bold } // Operator\n .cm { color: #998; font-style: italic } // Comment.Multiline\n .cp { color: #999; font-weight: bold } // Comment.Preproc\n .c1 { color: #998; font-style: italic } // Comment.Single\n .cs { color: #999; font-weight: bold; font-style: italic } // Comment.Special\n .gd { color: #000; background-color: #fdd } // Generic.Deleted\n .gd .x { color: #000; background-color: #faa } // Generic.Deleted.Specific\n .ge { font-style: italic } // Generic.Emph\n .gr { color: #a00 } // Generic.Error\n .gh { color: #999 } // Generic.Heading\n .gi { color: #000; background-color: #dfd } // Generic.Inserted\n .gi .x { color: #000; background-color: #afa } // Generic.Inserted.Specific\n .go { color: #888 } // Generic.Output\n .gp { color: #555 } // Generic.Prompt\n .gs { font-weight: bold } // Generic.Strong\n .gu { color: #aaa } // Generic.Subheading\n .gt { color: #a00 } // Generic.Traceback\n .kc { font-weight: bold } // Keyword.Constant\n .kd { font-weight: bold } // Keyword.Declaration\n .kp { font-weight: bold } // Keyword.Pseudo\n .kr { font-weight: bold } // Keyword.Reserved\n .kt { color: #458; font-weight: bold } // Keyword.Type\n .m { color: #099 } // Literal.Number\n .s { color: #d14 } // Literal.String\n .na { color: #008080 } // Name.Attribute\n .nb { color: #0086B3 } // Name.Builtin\n .nc { color: #458; font-weight: bold } // Name.Class\n .no { color: #008080 } // Name.Constant\n .ni { color: #800080 } // Name.Entity\n .ne { color: #900; font-weight: bold } // Name.Exception\n .nf { color: #900; font-weight: bold } // Name.Function\n .nn { color: #555 } // Name.Namespace\n .nt { color: #000080 } // Name.Tag\n .nv { color: #008080 } // Name.Variable\n .ow { font-weight: bold } // Operator.Word\n .w { color: #bbb } // Text.Whitespace\n .mf { color: #099 } // Literal.Number.Float\n .mh { color: #099 } // Literal.Number.Hex\n .mi { color: #099 } // Literal.Number.Integer\n .mo { color: #099 } // Literal.Number.Oct\n .sb { color: #d14 } // Literal.String.Backtick\n .sc { color: #d14 } // Literal.String.Char\n .sd { color: #d14 } // Literal.String.Doc\n .s2 { color: #d14 } // Literal.String.Double\n .se { color: #d14 } // Literal.String.Escape\n .sh { color: #d14 } // Literal.String.Heredoc\n .si { color: #d14 } // Literal.String.Interpol\n .sx { color: #d14 } // Literal.String.Other\n .sr { color: #009926 } // Literal.String.Regex\n .s1 { color: #d14 } // Literal.String.Single\n .ss { color: #990073 } // Literal.String.Symbol\n .bp { color: #999 } // Name.Builtin.Pseudo\n .vc { color: #008080 } // Name.Variable.Class\n .vg { color: #008080 } // Name.Variable.Global\n .vi { color: #008080 } // Name.Variable.Instance\n .il { color: #099 } // Literal.Number.Integer.Long\n}\n"],"file":"style.css"} \ No newline at end of file diff --git a/_site/favicon.ico b/_site/favicon.ico new file mode 100644 index 0000000..a4daf89 Binary files /dev/null and b/_site/favicon.ico differ diff --git a/_site/feed.xml b/_site/feed.xml new file mode 100644 index 0000000..09a81c6 --- /dev/null +++ b/_site/feed.xml @@ -0,0 +1,628 @@ + + + + Ed Nunez + software developer by day . runner by night . amateur musician whatever time is left + http://localhost:4000/ + + Mon, 23 Sep 2024 15:27:45 -0700 + Mon, 23 Sep 2024 15:27:45 -0700 + Jekyll v4.3.4 + + + Pacific Crest Trail Thru-Hike + <p>Continuous footpath from Mexico to Canada on the Pacific Crest Trail from May 4 2024 - September 5 2024.</p> + +<p>That was so unbelievably vivid and high-intensity, the ending has brought me to tears. Trip of a lifetime worth waiting and dreaming multiple years for this to materialize.</p> + +<p>2658 total miles of walking over 110 days (excluding time off spent with family). ~180 of these miles were dedicated to road walking around numerous wildfires that presented an added challenge to getting this done without skips.</p> + +<p>It’s been a 4 month stretch of time that has made me feel it all - hunger, fatigue, borderline heat exhaustion, extreme cold, sleep deprivation, euphoria over watching a sunset, high adrenaline on a technical climb, and a wave of love from so many cool people, All accented by beauty in every step.</p> + +<p>This trail has stolen my heart forever. Extra grateful to the many people I met on trail that helped me navigate around wildfire detours, and the many beastmode thruhikers that pushed me to put out some monster mileages every day. You’re the real ones and I love you all so much.</p> + +<p><br /></p> + +<div style="text-align: center;"> + +<h4>Youtube Video Doc</h4> + +<div style="text-align: center;"><iframe width="560" height="315" src="https://www.youtube.com/embed/OUtWeBt6rNY" frameborder="0" allowfullscreen=""></iframe></div> + +<br /> + +<h4>Highlight Pictures</h4> + +<img src="/posts-photos/2024-09-08-PCT/1.jpeg" width="80%" style="margin-bottom: 15px;" /> <br /> +<img src="/posts-photos/2024-09-08-PCT/2.jpeg" width="80%" style="margin-bottom: 15px;" /> <br /> +<img src="/posts-photos/2024-09-08-PCT/3.jpeg" width="80%" style="margin-bottom: 15px;" /> <br /> +<img src="/posts-photos/2024-09-08-PCT/4.jpeg" width="80%" style="margin-bottom: 15px;" /> <br /> +<img src="/posts-photos/2024-09-08-PCT/5.jpeg" width="80%" style="margin-bottom: 15px;" /> <br /> +<img src="/posts-photos/2024-09-08-PCT/6.jpeg" width="80%" style="margin-bottom: 15px;" /> <br /> +<img src="/posts-photos/2024-09-08-PCT/7.jpeg" width="80%" style="margin-bottom: 15px;" /> <br /> +<img src="/posts-photos/2024-09-08-PCT/8.jpeg" width="80%" style="margin-bottom: 15px;" /> <br /> +<img src="/posts-photos/2024-09-08-PCT/9.jpeg" width="80%" style="margin-bottom: 15px;" /> <br /> +<img src="/posts-photos/2024-09-08-PCT/10.jpeg" width="80%" style="margin-bottom: 15px;" /> <br /> +<img src="/posts-photos/2024-09-08-PCT/11.jpeg" width="80%" style="margin-bottom: 15px;" /> <br /> +<img src="/posts-photos/2024-09-08-PCT/12.jpeg" width="80%" style="margin-bottom: 15px;" /> <br /> +<img src="/posts-photos/2024-09-08-PCT/13.jpeg" width="80%" style="margin-bottom: 15px;" /> <br /> +<img src="/posts-photos/2024-09-08-PCT/14.jpeg" width="80%" style="margin-bottom: 15px;" /> <br /> +<img src="/posts-photos/2024-09-08-PCT/15.jpeg" width="80%" style="margin-bottom: 15px;" /> <br /> +<img src="/posts-photos/2024-09-08-PCT/16.jpeg" width="80%" style="margin-bottom: 15px;" /> <br /> +<img src="/posts-photos/2024-09-08-PCT/17.jpeg" width="80%" style="margin-bottom: 15px;" /> <br /> +<img src="/posts-photos/2024-09-08-PCT/19.jpeg" width="80%" style="margin-bottom: 15px;" /> <br /> +<img src="/posts-photos/2024-09-08-PCT/18.jpeg" width="80%" style="margin-bottom: 15px;" /> <br /> + +</div> + + Sun, 08 Sep 2024 07:15:31 -0700 + http://localhost:4000/adventures/2024/09/08/PCT.html + http://localhost:4000/adventures/2024/09/08/PCT.html + + + Adventures + + + + + RAM Promaster Van mobile home conversion + <p>Between November of 2020 and May 2021, I dedicated most of my time to building my dream home of wheels. It has been a labor of love and patience putting this together from CAD modeling every structure to materializing the build with carpentry work. Although my background is more aligned to software engineer and I no prior building/carpentry experience, this project is one of the proudest feats I’ve accomplished.</p> + +<p><img src="/posts-photos/VANLIFE/7.jpeg" alt="Van pic" class="img-responsive" style="text-align: center;" /></p> + +<p><img src="/posts-photos/VANLIFE/10.jpeg" alt="Van exterior" class="img-responsive" style="text-align: center;" /></p> + +<p>It’s taught me that anything can be learned and mastered with enough patience and time.</p> + +<p>It’s taught me how to be resourceful with my time, limited set of tools, and how to make things work when all I had at times were awkwardly-shaped scrap piles of materials.</p> + +<p>But probably most importantly, it’s brought me the confidence to build anything I can design and plan for.</p> + +<h2 id="space-design">Space design</h2> + +<p>I designed the space with an open floor layout in mind. I wanted the space to feel spacious and spread out. Despite having seen many conversions on the internet with ample countertop space on both sides on the vehicle, I thought it was worthwhile to dedicate a small space for the countertop to open space for a two-couch seating area and my bed.</p> + +<p><img src="/posts-photos/VANLIFE/CAD_ALL.jpg" alt="CAD models" class="img-responsive" style="text-align: center;" /></p> + +<p>Finding ways to make the space functional and multi-use was also key. I designed my bed to fold up into a couch so I can watch movies projected on the curtains around the cab. A pull-out table was also built for dining and working, and can be stashed away when not in use.</p> + +<p><img src="/posts-photos/VANLIFE/building-wip.jpeg" alt="Table and couch" class="img-responsive" style="text-align: center;" /></p> + +<h2 id="electrical">Electrical</h2> + +<p><b>For my electrical setup I decided to go with the following main components:</b></p> + +<table> + <thead> + <tr> + <th style="text-align: left"> </th> + <th style="text-align: right"> </th> + </tr> + </thead> + <tbody> + <tr> + <td style="text-align: left">Battery</td> + <td style="text-align: right">2X <a href="https://www.amazon.com/ExpertPower-Rechargeable-2500-7000-lifetime-Applications/dp/B07X4Z8FML">Expert Power 100Ah Lithium Batteries</a></td> + </tr> + <tr> + <td style="text-align: left">Solar panels</td> + <td style="text-align: right">3X <a href="https://www.amazon.com/HQST-Monocrystalline-Efficiency-Charging-Applications/dp/B08SVXMK3V">HQST 100 Watt Monocrystalline Solar Panels</a></td> + </tr> + <tr> + <td style="text-align: left">Solar Charge Controller</td> + <td style="text-align: right"><a href="https://www.amazon.com/EPEVER-Controller-Regulator-Backlight-Lead-Acid/dp/B077HHYYHT">EPEVER 40A MPPT unit</a></td> + </tr> + <tr> + <td style="text-align: left">Alternator to House Battery Charger</td> + <td style="text-align: right"><a href="https://www.amazon.com/Sterling-BB1260-12-Volt-60-Amps/dp/B071RKX5W2">Sterling 60A DC DC unit</a></td> + </tr> + <tr> + <td style="text-align: left">Inverter</td> + <td style="text-align: right"><a href="https://www.amazon.com/Ampeak-Inverter-Converter-Outlets-Modified/dp/B071NZ8DSB">Ampeak 1000W Inverter</a></td> + </tr> + </tbody> +</table> + +<p><br /></p> + +<p>All of these components were wired with fuses or breakers within each lines, ultimately allowing me to consume power via my Ampeak inverter (120W AC outlets) or to my regular 12V DC appliances.</p> + +<p><img src="/posts-photos/VANLIFE/circuit.png" alt="Circuit diagram" class="img-responsive" style="text-align: center;" /></p> + +<p>I decided to invest on lithium batteries over AGM for their ~4X total lifecycle count, 2X usable capacity, and 1/4 the weight despite their 4X price tag. I wanted to make sure I can reliably get 200Ah@12V of capacity to fuel me through several days off grid without worrying about cloudy weather making a dip in solar charging power.</p> + +<p>I found 300 Watts of solar appropiate for keeping up with my energy usage, which I estimated to be appropiate by checking my expected daily Watt-Hour consumption against a total amount of Watt-Hours of charge provided by 300W of solar on 8 hours of sunlight. The solar output is modulated to a 14V output to charge the batteries with the EPEVER 40A MPPT unit.</p> + +<p><img src="/posts-photos/VANLIFE/roof.gif" alt="Solar setup" class="img-responsive" style="text-align: center;" /></p> + +<p><b>The main DC appliances I used were:</b></p> + +<table> + <thead> + <tr> + <th style="text-align: left">Part</th> + <th style="text-align: right">Amp draw in normal/average operation</th> + </tr> + </thead> + <tbody> + <tr> + <td style="text-align: left">6X Puck Lights</td> + <td style="text-align: right">1.66A</td> + </tr> + <tr> + <td style="text-align: left">Chinese Diesel Heater</td> + <td style="text-align: right">1.25A</td> + </tr> + <tr> + <td style="text-align: left">Fridge</td> + <td style="text-align: right">1.66A</td> + </tr> + <tr> + <td style="text-align: left">Maxxair Ceiling fan</td> + <td style="text-align: right">0.6A</td> + </tr> + <tr> + <td style="text-align: left">12V cigarette style + USB sockets</td> + <td style="text-align: right">2.4A</td> + </tr> + <tr> + <td style="text-align: left">Electric water pump</td> + <td style="text-align: right">0.7A</td> + </tr> + <tr> + <td style="text-align: left">Toilet vent fan (just a 120mm computer fan)</td> + <td style="text-align: right">0.15A</td> + </tr> + </tbody> +</table> + +<p>As for AC appliances, I will use my <a href="https://www.amazon.com/Portable-Electric-Kettle-Travel-Stainless/dp/B07DMVV475">800W Iron Ren kettle</a> to make boil water for coffee every morning and charge my laptop for a few hours on occasion.</p> + +<h2 id="insulation-and-framing">Insulation and framing</h2> + +<p>All I had was a bare metal chassis when the van was purchased. This meant a need for an insulated foundation prior to laying down walls, floors, and furniture that make up the space.</p> + +<p>I decided to use 3M Thinsulate to insulate the walls and ceiling as this material for its extreme ease of application, doesn’t off gas and it can be easily stuffed on all the hard to reach nooks and crannies.</p> + +<p><img src="/posts-photos/VANLIFE/framing0.jpeg" alt="Picture of insulation" class="img-responsive" style="text-align: center;" /></p> + +<p>The floor however, needed to be insulated with a rigid material in order to install a rigid plywood sublfloor on top. I used some 1/2” thick XPS rigid board on top of the floor’s bare metal, and then laid down 1/2” thick Baltic Birch plywood on top of the XPS as per the <b><a href="https://faroutride.com/floor-installation/">Faroutride Floor Installation Guide</a></b>.</p> + +<p><img src="/posts-photos/VANLIFE/floor_insulation.jpeg" alt="Picture of floor" class="img-responsive" style="text-align: center;" /></p> + +<p>Framing the van came down to bolting down 1/2” thick Baltic Birch plywood pieces cut into 3” wide strips where possible, with cross members simply fastened with Kreg jig holes and screws. The bolted members were fastened into the van chassis by drilling holes + placing rivnuts in the chassis. The only distinct framing member from the rest were two 2x6 studs that were bolted on the wall to serve as the bed base support, as I needed a strong foundation to mount some steel beams that made up the bed base.</p> + +<p><img src="/posts-photos/VANLIFE/framing3.jpeg" alt="Picture of framing" class="img-responsive" style="text-align: center;" /> +<img src="/posts-photos/VANLIFE/furnish3.jpeg" alt="Picture of bed" class="img-responsive" style="text-align: center;" /></p> + +<h2 id="outer-layers-and-furnishings">Outer layers and furnishings</h2> + +<p>For walls, I nailed down 1/2” thick shiplap I purchased from Home Depot into the framing members.</p> + +<p>For the ceiling and back doors, I used 3/4” thick pine tongue and groove panels from Home Depot, staining them with a 1/2 and 1/2 mixture of Minwax Pickled Oak and Minwax Provincial.</p> + +<p>The floor layer consists of 1/2” thick baltic birch plywood pieces laid down flat on top of the XPS insulation layer. Other than adhesion to the XPS, I didn’t use any fastening method and the floor seems to be sturdy and stable. I then used a vinyl sheet layer adhered to the plywood.</p> + +<p>As far as furniture goes, I was a bit intimidated with carpentry work at first but I built up my skills by working on dummy projects prior to the build, like building a garage workbench and a bookshelf. The <b><a href="https://www.youtube.com/channel/UCblE9bB30z5gJi98t4uCXnw">Ankeney Van Builds</a></b> youtube channel was a great resource I followed for designing and building couches, kitchen countertop, and overhead cabinets. The only pre-built piece of furniture I got was a kitchen cabinet I purchased at IKEA, given the dimensions for it worked out to be almost identical to my CAD model.</p> + +<p><img src="/posts-photos/VANLIFE/6.jpeg" alt="Interior pictures" /></p> + +<p><img src="/posts-photos/VANLIFE/2.jpeg" alt="Garage picture" /></p> + +<h2 id="water-system">Water system</h2> + +<p>I followed the water system design laid out on this <b><a href="https://faroutride.com/water-system/">Faroutride guide</a></b>. The setup is simple. No hot water. No showers. Just a <a href="https://www.amazon.com/Class-Customs-T-2000-Gallon-Approved/dp/B07659973Z">20 Gallon tank from Class A Customs</a> routed to my sink using 1/2” thick PEX tubing (with 12V DC pump somewhere on that PEX line). Sink drain is routed to a 7 gallon aquatainer that I dump out twice a week.</p> + +<h2 id="cooking--kitchen">Cooking / Kitchen</h2> + +<p>This one is extra simple. I’m using a portable 2 burner propane stove from <b><a href="https://www.amazon.com/dp/B0863RHXZY">Camplux</a></b> to cook some of my meals. The stove is hooked up to refillable 1 lb propane bottles. I keep three of these bottles around and refill them every ~2 months. This setup works for me because I only cook with the stove once at the end of day, and some days I’ll even skip cooking and eat raw veggies / nuts / fruits. The <a href="https://www.amazon.com/Portable-Electric-Kettle-Travel-Stainless/dp/B07DMVV475">800W Iron Ren kettle</a> gets me through the morning for oatmeal and coffee.</p> + +<p>Cooking once a day means I can stash away the portable stove when not in use to make room for countertop space. I’m also happy with the choice of not going for a big 20 lb propane tank as I don’t have to use up dedicated space for this large tank. The little refillable propane bottles get me through for a long time.</p> + + Thu, 18 Mar 2021 12:58:00 -0700 + http://localhost:4000/tech/2021/03/18/VanBuild.html + http://localhost:4000/tech/2021/03/18/VanBuild.html + + + Tech + + + + + How we built a mobile AR product from the ground up at GLIMPSE + <p>During the period between September 2019 and March 2020, I helped built the AR product <strong>GLIMPSE cards</strong>. GLIMPSE cards are business cards that can present digital content to the card’s receiver with the aid of Augmented Reality.</p> + +<p style="text-align: center;"><img src="/posts-photos/GLIMPSE/detect_demo_trim.gif" alt="AR in action" class="img-responsive" /></p> + +<p>The GLIMPSE card owner can use the web app to (1) customize business card physical design, (2) customize card’s AR content, and finally (3) have a bulk quantity of cards shipped.</p> + +<p>Unfortunately the project was ultimately shut down on April 2020 as we were unable to secure financing to maintain the tech infrastructure.</p> + +<h2 id="goals-for-this-project">Goals for this project</h2> + +<p>The main challenges for this project were -</p> + +<p><strong>1. Building a friction-less onboarding experience for a user to start building their business card.</strong></p> + +<p>We wanted to give all of our incoming users a easy chance of trying out the design tool and the Augmented Reality experience prior to buying a stack of cards. For a user to start their journey, they just needed to start an account in our site. They are then be presented with a design tool where they can get a sense of what the AR product would look like if they purchased from us.</p> + +<p><img src="/posts-photos/GLIMPSE/login.png" alt="AR in action" class="img-responsive" style="text-align: center;" /></p> + +<p><strong>2. Customizable card design</strong></p> + +<p>The design tool could be used to insert text and graphics in the physical card along with the AR content. All design components are inputed by the user on a web form that are then projected over to a web canvas. The QR code on the card maps to the AR page that the card receiver can open on their phone.</p> + +<p style="text-align: center;"><img src="/posts-photos/GLIMPSE/design1.png" alt="Front card design" class="img-responsive" /></p> +<p style="text-align: center;"><img src="/posts-photos/GLIMPSE/design2.png" alt="Back card design" class="img-responsive" /></p> +<p style="text-align: center;"><img src="/posts-photos/GLIMPSE/design3.png" alt="AR content design" class="img-responsive" /></p> + +<p><strong>3. Smooth AR experience for people receiving business cards</strong></p> + +<p>The user receiving the card needs to scan the QR code to be presented with the AR view. We choose the Web AR engine <a href="https://www.8thwall.com/">8th Wall</a> to provide an experience that happens entirely in a mobile browser. The user does not need to download an app. It is as simple as scanning the QR code and giving the mobile browser permission to access the phone’s camera.</p> + +<p float="left"> + <img src="/posts-photos/GLIMPSE/ar1.png" width="200" /> + <span style="margin-left:30px" /> + <img src="/posts-photos/GLIMPSE/rooftop_demo.png" width="200" /> +</p> + +<p><strong>4. Ordering flow and logistics for getting cards shipped efficiently</strong></p> + +<p>We leveraged Stripe for handling order payments and managing the order status. Upon a user ordering a set quantity of cards, we unlocked the QR code in the AR app for unlimited viewing and a Stripe order is created with “created” status. On our end, we are notified when the order is received, prepare the shipment through a third party card printing service, and mark the order as “shipped”.</p> + +<h2 id="technical-architecture">Technical architecture</h2> + +<p style="text-align: center;"><img src="/posts-photos/GLIMPSE/tech_arch.png" alt="Tech architecture" class="img-responsive" /></p> + +<p>The project was built under a Node.JS / ReactJS stack hosted under Google Cloud. We leveraged Google Cloud’s Datastore to store user and card information.</p> + +<p>The main data entities involved were users and cards. User entities were created upon registration and after a card has been design, a card entity containing all info would be mapped 1-1 to the user.</p> + +<p>The web tool for designing cards creates + updates card info, whereas the AR mobile view pulls cards info and presents it with the aid of 8th Wall Engine and AR.js.</p> + +<p>The backend piece of the app also leveraged Stripe.js for creating and managing order entities, as well as processing payments.</p> + +<h2 id="lessons-upon-shutting-down-the-product">Lessons upon shutting down the product</h2> + +<p>We shut down the product as we failed to acquire and retain sufficient users to maintain the costs of cloud hosting and membership to the 8th Wall AR engine. We learned that the AR technology in a product like ours is not reliable enough for mass adoption yet:</p> + +<ol> + <li> + <p>One of the biggest obstacles we faced in retaining users concerned the usability aspect of the AR experience within the card. Perhaps it was obvious to our team how QR codes are scanned, but we learned the hard way that a large percentage of smart phone users are not familiar with QR code scanning. On top of this, we received some reports from people running old versions of Android OS that some phones did not have a QR code scanner built in, which led to some friction in people having to download a seperate QR scanner app.</p> + </li> + <li> + <p>Some users living in regions with slow mobile connectivity were not satisfied with the long delay times in video content appearing on the AR app.</p> + </li> + <li> + <p>There were a few instances of people using the AR app on smartphones without a built in accelerometer, which made the AR experience un-usable.</p> + </li> +</ol> + +<p>On the sales side, there are some aspects we could have definitely improved on to improve user acquisition and retention, including the use of marketing channels like Web Ads, SEO optimization, and directly contacting businesses.</p> + +<p>Given the option to start the project again from zero, I would use these key learnings to better focus on getting more users to pre-order prior to building the product, invest in sales channels, and get a sense of the defect rate for the product prior to a production release.``</p> + + Thu, 18 Mar 2021 12:58:00 -0700 + http://localhost:4000/tech/2021/03/18/Glimpse.html + http://localhost:4000/tech/2021/03/18/Glimpse.html + + + Tech + + + + + Building a reliable and testable day trading bot on python + <h2 id="about">About</h2> + +<p>Day trading involves a competition with a large crowd of investors to react to market conditions that you can predict and react with speed. In theory, trading in an automated fashion can allow you to generate profits with a speed and frequency that is impossible for a human to execute. Other added benefits include:</p> + +<ul> + <li>You can detach yourself psychologically and emotionally from your trading decisions once you cement a trust in your strategy</li> + <li>Your strategy is testable against historical price data. This also means you optimize algorithm parameter by permutating these on multiple backtests</li> + <li>Low risk of manual error while placing orders</li> +</ul> + +<p>However, by doing this you are subject to the major risk of possible system failures. If you build this system, it is important that you have a fail safe methods to cover for losses caused by these failures. In this post, I will show you how I covered some of these cases.</p> + +<p>A succesful strategy is one where you make judgements based on indicators you collect that can give you an edge on the market. In my experience, the process of selecting and tuning a succesful strategy is based more on how fast you can iterate and test different strategy parameters more than understanding the “why” of how your strategy might work. With no formal finance background, I managed to leverage my programming knowledge to create a system by which I can easily and quickly test my strategy on thousands of strategy permulations, and then decide if I should run my strategy that day based on my confidence level of historical results. In this post, I will walk through some of the decisions behind my trading strategy and the tech stack behind the bot+backtesting framework.</p> + +<h2 id="my-bots-strategy">My bot’s strategy</h2> + +<p>My trading bot strategy falls into the category of low-frequency day trading with each trade consiting of a large quantity of stocks ($10k - $100k worth). The trades are low-frequency because the trades are contingent on a trendline being found on a candlestick chart once every few minutes. This is perhaps different from high-frequency day trading strategies where a trader might be sending hundreds or thousands of orders a day, and making profits on quick price movements.</p> + +<p>For my strategy, I found it appropiate to use a STP and LMT OCO order type for placing orders. In an OCO order (one-cancels-the-other), your broker takes care of listening for an activation price by which you will enter a position. After this activation, the broker listens to two new price thresholds for which the position will close on a profit or loss.</p> + +<p><img src="/posts-photos/ALGOTRADING/oco.png" alt="OCO order" class="img-responsive" style="text-align: center;" /></p> + +<p>This order type made it easy for me to build a backtesting framework, makes interpreting results straight forward, and removes the burden of having your software listen for the appropiate moment to close positions. If your software crashes and you have pending orders that have not closed the position, the OCO instructions implicit on the order puts the responsibility of closing positions on your broker.</p> + +<p>I wouldn’t reccomend this order type if you need to have control of better granularity (e.g. you want to exit your position 50% at some price point and 50% at another). This is also not recommended if your strategy is contingent on time if say, you want to force a position to close X minutes after you enter. in this case, entering and exiting positions with MARKET trigger orders would be more appropiate.</p> + +<h2 id="indicators-leveraged-for-my-bots-strategy">Indicators leveraged for my bot’s strategy</h2> + +<p>The bot has to go through the iterative process of</p> + +<p>(1) Fetching price data and additional data useful for your indicators</p> + +<p>(2) Calculating indicators</p> + +<p>(3) Check if indicators results satisfy order placement criteria</p> + +<p>(4) Place OCO order</p> + +<p>(5) Idle wait for next time interval</p> + +<p>My strategy relied on trendline detection as the key indicator for deciding whether to execute trades. This was achieved with the use of my python library <b><a href="https://github.com/ednunezg/pytrendline">pytrendline</a></b> which you can use for detecting trendlines formed at the support or resistance level of candlesticks.</p> + +<p>Another indicators I leveraged were news sentiments based on keywords matched against a stock’s news feed. SMA curves, EMA curves, and number of price inflection points were also computed and analyzed against a set of criteria to decide if the trade is worth doing.</p> +<h2 id="what-do-you-need-to-build-reliable-and-back-testable-trading-bot">What do you need to build reliable and back-testable trading bot?</h2> + +<p>A succesful testable bot should be one that can be made with an offline and online mode of operation. If these two modes can be provided as an input, you can leverage the offline mode for performing historical tests using a backtesting framework that wraps around the program, and the online mode for a production use case.</p> + +<p>I designed my program with the following inputs:</p> +<ul> + <li>List of symbols to trade with (my strategy at the moment does require I filter through stocks manually at the beginning of the day)</li> + <li>Online or offline mode</li> + <li>If offline mode provided, specify the date to simulate</li> +</ul> + +<p>The online mode for my bot pulls realtime prices and places OCO orders via the Ameritrade API whereas the offline mode pulls historical prices and saves order placement information in a file.</p> + +<p style="text-align: center;"><img src="/posts-photos/ALGOTRADING/tech-arch.png" alt="Bot operation" class="img-responsive" /></p> + +<p>The backtesting software was created to wrap around the offline version of the bot, and calculate statistics for what profit/losses would have been like on specified dates. One of the key features of my backtesting software was also providing an input file containing values to permutate for different configuraiton values. This way I can compare profits amongst different set of configurations.</p> + +<p style="text-align: center;"><img src="/posts-photos/ALGOTRADING/backtesting.png" alt="Bcktesting" class="img-responsive" /></p> + +<h4 id="i-leveraged-the-following-dependencies">I leveraged the following dependencies:</h4> + +<ul> + <li>Core program: Python language and Pandas lib for plenty of matrix operations</li> + <li>Placing orders: <b><a href="https://developer.tdameritrade.com/apis">Ameritrade API order placement endpoint</a> </b></li> + <li>Fetching OHLC price information: <b><a href="https://developer.tdameritrade.com/apis">Ameritrade API price history endpoint</a>.</b></li> + <li>Fetching news: <b><a href="https://iexcloud.io/docs/api/#news">IEX Cloud news endpoint</a></b>. Handy API gives a feed of latest news from many sources just providing stock symbol as an input</li> + <li>Log output and alerting: <b><a href="https://logz.io/">Logz.io</a></b>. Logz.io is a useful ELK-as-a-service platform in which I pushed all of my online mode logs for the purposes of long term retention, debugging, and alerting.</li> + <li>Visualization of candlestick chart, EMA/SMA curves, trendlines: <b><a href="https://bokeh.org/">Bokeh</a></b>. All of my trades generated also create an output HTML file with a visualization snapshot of the stock’s candlesticks, trendlines, curves and other indicators at that point in time. Really useful for debugging</li> +</ul> + +<p style="text-align: center;"><img src="/posts-photos/ALGOTRADING/tech-dependencies.png" alt="Tech infra" class="img-responsive" /></p> + +<h2 id="hosting-and-ensuring-reliability">Hosting and ensuring reliability</h2> + +<p>One of the things I learned along the way is that it is not enough to trust the broker will handle your order exactly as you expect and it is worthwhile to have some sort of a redundancy check to ensure proper integrity of your orders. Maybe you commit a change to your code that messes up the request to the order placement API and causes unexpected results. Or maybe there’s an edge case you forgot about, such as the market closing with your positions still open and the broker isn’t doing this for you.</p> + +<p>I strongly suggest building a seperate program that runs periodically to check for such cases. I did this because if my main bot were ever to crash, I can have some trust in the seperate program to cover any lingering problems. Another option would be to integrate this periodic routine as a seperate thread in the main program, but you would need to properly handle the program rebooting upon crashing.</p> + +<p>This made my choice for cloud hosting easy: I use an Amazon EC2 instance that is scheduled to run the trading bot on NYSE market open time each day. Then, a server-less AWS Lambda operation takes care of running a routine every minute to check for the edge cases.</p> + +<h2 id="lessons-learned-and-a-word-of-caution">Lessons learned and a word of caution</h2> + +<p>Taking on this project as both a challenging feat and the pursuit of an extra source of income turned out being extremely rewarding and fruitful in learning how to best design reliable+complex backend systems.</p> + +<p>The two main challenging pieces of solving this puzzle involved proper order lifecycle management and building the backtesting software.</p> + +<p>I found that there were a LOT of edge cases to handle when placing orders: What if I don’t have sufficient account balance and I need to adjust stock unit quantity? What happens if the broker doesn’t place the order as expected? How do I handle timeouts with the broker API? All of this led to a thorough examination of edge cases and proper fail-safe methods where appropiate.</p> + +<p>Building the backtesting software required a complex set of features that warranted extreme code modularity and organization. Upon calling the bot in offline mode I had to determine price levels for which the order entered and exit, compute profit/loss statistics, compute aggregate statistics, etc. It was additionally challenging to make the entire backtesting run as fast as possible in order to test multiple configurations, and there was plenty of opportunities to leverage multiprocessing to get the job efficiently.</p> + +<p>One thing I will say in advance to those hoping to take on algo-trading: don’t take any historical results for granted. Although I made it an effort to find configurations that lead to consistently profitable results for the last 3+ years, I learned that none of it should be proof of your strategy working indefinitely in the future. A change in market conditions can render your strategy useless at any point in time and that’s something you might have to accept and deal with.</p> + +<p>Additionally, I would be aware of conditions that could be causing a mismatch between stocks tested and future orders placed for a stock. In my case, I didn’t consider that some stocks couldn’t be shorted by my broker when it came to running the bot in a production use case, but I had been calculating my profits and losses assuming that all stocks could be shorted. This has caused me a significant mismatch between backtesting results and expected results which has made it a challenge to correctly make sense of my tests.</p> + + Thu, 18 Mar 2021 12:58:00 -0700 + http://localhost:4000/tech/2021/03/18/Algotrading.html + http://localhost:4000/tech/2021/03/18/Algotrading.html + + + Tech + + + + + Colorado Trail thru hike + <div style="text-align: center;"><iframe width="560" height="315" src="https://www.youtube.com/embed/C_9Xz_r9EkI" frameborder="0" allowfullscreen=""></iframe></div> + +<p><br /></p> + +<center> +408 miles <br /> +15 days <br /> +8 lb base weight <br /> +4000 cals/day <br /> +3 toe blisters <br /> +Countless jaw drops in the San Juans <br /> +</center> + +<p><br /></p> + +<p>Having a summer off in between my last two semesters in college seemed like a perfect opportunity to venture on a thru hike. This being my first long solo hike, my main focus for this trip was to maximize the amount of time walking and hitting big daily miles.</p> + +<p>My original plan was to make it all the way to Durango. I was going up to pace hitting about 32 miles a day for the first six days, but accidentally going off trail and hitting snowy passes at the Collegiate West section led to me losing a considerable amount of time and made me reconsider my goals. I managed to make it to Silverton by hitting around 26 miles a day for the rest of the trip.</p> + +<p>This has been one of the most rewarding thru hikes I’ve done and it was great meeting like-minded thru-hikers along the way. Hiking in the Sierras in 2015 gave me some big aspirations to come back there for a PCT thru hike, and now doing the Colorado Trail makes me want to do the CDT and experience the San Juans again.</p> + +<p><br /></p> +<hr /> + +<p><br /> +My Gear List : <a href="https://lighterpack.com/r/7ibnj3"> https://lighterpack.com/r/7ibnj3 </a></p> + + Mon, 24 Jul 2017 19:45:31 -0700 + http://localhost:4000/adventures/2017/07/24/ColoradoTrail.html + http://localhost:4000/adventures/2017/07/24/ColoradoTrail.html + + + Adventures + + + + + Scotland's Skye Trail: Portree to Duntulm + <div style="text-align: center;"><iframe width="560" height="315" src="https://www.youtube.com/embed/mjk3KmEUm8I" frameborder="0" allowfullscreen=""></iframe></div> + +<p><br /></p> + +<p>Kelsey is living in London this year so I decided to visit her during Spring Break. We made a trip out to Scotland for a 4 days and the Skye Trail seemed like the most scenic, yet accesible option for a quick backpacking trip.</p> + +<p>This island had some scenery straight out of a fantasy dragon-land, but the weather was pretty brutal. The winds were so strong we had to bail out after coming up a mountain pass near the Storr ¯\_(ツ)_/¯.</p> + +<p>With no chance for us to survive the storm in a tent, we sought shelter in a castle dungeon. The storms calmed down and we made our escape out of Skye, with the hopes of coming back someday.</p> + + Thu, 23 Mar 2017 07:15:31 -0700 + http://localhost:4000/adventures/2017/03/23/SkyeTrail.html + http://localhost:4000/adventures/2017/03/23/SkyeTrail.html + + + Adventures + + + + + Grand Canyon: Boucher-Tonto-Bright Angel loop + <p>With a 5 day window open during Thanksgiving break, I set out to hike a little loop in the Grand Canyon. All of the campsites were booked for the Rim to Rim trail, so instead I opted for an alternative.</p> + +<p>The thirty-something mile loop I did started out in Hermit’s rest, went down the canyon via the Boucher trail, traversed the canyon parallel to the Colorado River via the Tonto trail, and came back up via the Bright Angel trail. Highly recommend this as an alternative to R2R: very few people, amazing campsite at Yuma point, and beautiful side trips near the Colorado River.</p> + +<p><br /></p> + +<div style="text-align: center;"> +<img src="/posts-photos/2016-11-29-BoucherTontoBright/1.jpg" /> +<br /><br /> +<img src="/posts-photos/2016-11-29-BoucherTontoBright/2.jpg" /> +<br /><br /> +<img src="/posts-photos/2016-11-29-BoucherTontoBright/3.jpg" /> +<br /><br /> +<img src="/posts-photos/2016-11-29-BoucherTontoBright/4.jpg" /> +</div> + + Tue, 29 Nov 2016 06:15:31 -0800 + http://localhost:4000/adventures/2016/11/29/GrandCanyon.html + http://localhost:4000/adventures/2016/11/29/GrandCanyon.html + + + Adventures + + + + + Meandering in Iceland + <div style="text-align: center;"> +<img src="/posts-photos/2016-05-31-Iceland/1.jpg" /> +<br /><br /> +<img src="/posts-photos/2016-05-31-Iceland/2.jpg" /> +<br /><br /> +<img src="/posts-photos/2016-05-31-Iceland/3.jpg" /> +<br /><br /> +<img src="/posts-photos/2016-05-31-Iceland/4.jpg" /> +<br /><br /> +<img src="/posts-photos/2016-05-31-Iceland/5.jpg" /> +<br /><br /> +<img src="/posts-photos/2016-05-31-Iceland/6.jpg" /> +<br /><br /> +<img src="/posts-photos/2016-05-31-Iceland/7.jpg" /> +</div> + + Tue, 31 May 2016 07:25:31 -0700 + http://localhost:4000/adventures/2016/05/31/Iceland.html + http://localhost:4000/adventures/2016/05/31/Iceland.html + + + Adventures + + + + + Corsica GR20 (northern half) + <p>During the early summer of 2016, I headed to Europe to visit an old friend and set to hike the northern half of the GR20 route in 7 days.</p> + +<blockquote> + <p>“GR 20 is a long distance trail that traverses Corsica diagonally from north to south. It is considered to be the most difficult of all the GR routes and one of the most beautiful mountain trail in Europe […] The northern part starts in Calenzana and stops in Vizzavona. It is the most difficult part, because of the steep and rocky paths, but it is also considered more beautiful.” – http://corsica.forhikers.com/gr20</p> +</blockquote> + +<center> +65 miles <br /> +7 days <br /> +</center> + +<div style="text-align: center;"> + +View full album <strong><a href="https://goo.gl/photos/9BqCHGkRWnNKMwXE9">here.</a></strong> +<br /><br /> +<a href="https://photos.google.com/share/AF1QipPcgYjAMUjjtlOt6O3-y69JcfxvSUTlnVMiT9d_blSBqD270N9QjeJ7QmQNbPLaXA?key=WDlLV2FCWld1ZzlpWGgwVnU3cFlVbnJXUnp1WWF3&amp;source=ctrlq.org"><img src="https://lh3.googleusercontent.com/5ovUJmfTZ1qqP9LNpxQyUTrIrGpYoZySAcK7rq0kY79GVemU5sn7MpYzBUIvAhggzcfs-CDTdBf136Nn6MVhk7wtiK587RdndhNy2RLq7PMA9XT7RQxZwQmHWGGAFLkXFY-98w" /></a> +<br /><br /> +<a href="https://photos.google.com/share/AF1QipPjM6rc2nkCg9WCuQRzS5DRmKLtAgK2HhUIFefR1X3JktijruOLx_ZNrsXVxuJH-A?key=d19xSlJ4SVpXcXBVeFU5cWZvUkYyazBoTjNqaURn&amp;source=ctrlq.org"><img src="https://lh3.googleusercontent.com/zfEK_vm01GQ0wHpomANGBGYdyqCr9FKDhrHVpELSXCR8boMgBO97YE4CgLJyRwhA1GnmM2T-JoG6Gk2ZuTKwbF5sFcdTtoeRi_e6-_82Hs73JalVIePLLnKr7uIld4t7gVM6UQ" /></a> +<br /><br /> +<a href="https://photos.google.com/share/AF1QipMB8n5NuTnaV9l6tYhOf47C4uzPp5OCrFul3ED_L0A-IxfdOp58U_Ee88q8Ps5lSg?key=Vk02dDdDUDB6ODVRMm5pN0ZYMnVVS3lJaVNTbEdn&amp;source=ctrlq.org"><img src="https://lh3.googleusercontent.com/nzfvLalaA_y5XZ0NPRSF3fLKzH9LVSEtjYCnKq21tZlhPpW10t2r8gxNcUX2ezEYiWm3JajJRBQY8r95OHtOWIJvQhh1nB4EkX3Z1Wifevyl0EJQvCPnX74gD30mucU3gH2MJA" /></a> +<br /><br /> +<a href="https://photos.google.com/share/AF1QipMIX2_MJKhAfVKHJUIiLM3-yguLi0PnpdyIfVycoDVark_UHHxKAwChkoun15FSlA?key=MGxoRURjQm8waElsTjBRVVNYaHQxQ2ZER196X2ZR&amp;source=ctrlq.org"><img src="https://lh3.googleusercontent.com/HlAfTiQzIm5exl4pIGqKwsZ5EXrzYy6A63n3G3S5d6hJGmuRdxMRBdNFSpBwwpBo-aITc3a2YhbHi2XPtBTwGfLVqWX749MyZ6P4m6A3OTez28LgrXbA_ybd5PvdKoTRCKsltg" /></a> +<br /><br /> +<a href="https://photos.google.com/share/AF1QipOE-TE9boXmY9lbZfmsSgNX0HU5Go4Ij75vLq5-Y69K1bT2wwEwnvZKNqtZD-vQPQ?key=dV9yVmJYaE9NTE9XVEZTTDg0ei1SLVdidVlHM0d3&amp;source=ctrlq.org"><img src="https://lh3.googleusercontent.com/olZezgnPU40Tea-BIK8x_DWjijqABcBd60SM_8kStGOog_RoUNQHs-QtZuAyGYxWO6kaTSqHPYx4RTRa0XOnSIDnouUEUyRWsHv8AZJhN8lKVUyrvoPx_WVNuhbgPKenQeN4ow" /></a> +<br /><br /> +<a href="https://photos.google.com/share/AF1QipMNnu92X8pDjX6HLmh51YAlaQPzAiNaVWi0zwwAO3GVYKHKaciYfa0XAHpG3Cr9qQ?key=LTBiOTBRNGJvaWw0VGp3SXhobkpiVWxLRGxEbmRR&amp;source=ctrlq.org"><img src="https://lh3.googleusercontent.com/O4J1rYD3Gg0CnjQ-sqL3BCDtG8FX0KlkFlEYEN_O1bFBd47P_0sJC8luhTufKJsWfpK2dkxrpELDi-1Kx1XsSqGdlGBYsjGuNwzeUa5JUUpQO5E6lk2F0_p58PBCFD-xCIKgHw" /></a> +<br /><br /> + +<a href="https://photos.google.com/share/AF1QipNRpGUCw6XmTYojat1piK_DJR61n_bvLASxR_2O6I4V2nSEB4yk8ZAf9b8BYUrBgw?key=VnIwUmVhdVpSTUQ5VTlKVk5HalNpaUF3ZFVjS1Z3&amp;source=ctrlq.org"><img src="https://lh3.googleusercontent.com/wtuCbNbbHKLdy5Dyyk7jTy7gfxEU1jg-I-SxoWCdNtop3k__AqZArhPd_aPSaS4LukA5eICeDxy9xu6pBmhXHFgFoXUptpoYiLoaC8Q6BJNPwGO2FVSYtOA4pLTeT-deQjNqhA" /></a> + +<br /><br /> +<a href="https://photos.google.com/share/AF1QipMDP1IVN3JbAXHK-9E-16zkBs1zsKMfKzAMSsSgoMCtUnjNzjIJVIlbJdz8KFGt7Q?key=YUNLbzJwYjVEb0JBaGFmLVd1Q2prWnUzZEdDLUJ3&amp;source=ctrlq.org"><img src="https://lh3.googleusercontent.com/JFNdWWHJh_KGjFf6cO69RvD5UKhTGfPeIHvM4nuozJBkcRaPWB3aozJ6qjQbKNvc6dHR-e7KEGQjvjFgCQDUL58Slsss9bTFXZbKsDFc-I-Q6eu77JtuGyoN6CDPpM8fezR1_A" /></a> + +</div> + + Tue, 31 May 2016 07:15:31 -0700 + http://localhost:4000/adventures/2016/05/31/GR20.html + http://localhost:4000/adventures/2016/05/31/GR20.html + + + Adventures + + + + + John Muir Trail + <center> +2 dudes <br /> +170 miles <br /> +14 days <br /> +</center> + +<div style="text-align: center;"> + +<br /><br /> +<a href="https://photos.google.com/share/AF1QipNKVO0DK07JnCox5i7SNapRY2HOYI0q8L0q6fWVRosq8oKfb9Tq_qNJwiM1OLeTjQ?key=TjJaV2JYYkxfRzhMcUQtb0g3T2FNdVNjVndoWmh3&amp;source=ctrlq.org"><img src="https://lh3.googleusercontent.com/l9RNI6MsArWDN18Shdl0n-JQAdWtin9QcvN1iWYhm_89k26LUvl7MEUAYkeOgaFmUJzpywoDUbsHr3g60QLfYMbOiHQiytbYi7gIR19qDqyPhk1DMBY0ji6teWHQ8j6gOoXq3ZFnHw" /></a> +<br /><br /> +<a href="https://photos.google.com/share/AF1QipNQO0cPFKIvIRPnn1_9DEWu6HhsTo_WuugvkLr8jaz7TCDLQbwvxSKZfPNyAo5xww?key=LXJLUjVTRUp6cEpnalhhMXZzUlpCMEJNc0RONmt3&amp;source=ctrlq.org"><img src="https://lh3.googleusercontent.com/iKOOJ-XEUMvwfH4eBf3PfSLaroPEHKMjWjMYSSYEurJkRoTwzsZek0cAhiD16VcV1M6cWmGqDv-PxorX76LvsMHJF0D7c9uumSG_R13ldGr1SpOsPLskujo9Rrf63r8TADE15jLnDw" /></a> +<br /><br /> +<a href="https://photos.google.com/share/AF1QipOA_3QXDfby8j77FltF7tG-p1X85r0UeMX5RxU9kfpdARXbUWCWgudkM6YDquai_g?key=Q1huV2RPZTJXV2V2ZThxMTdlQk9yT3pocnhZTFdR&amp;source=ctrlq.org"><img src="https://lh3.googleusercontent.com/XXj_xKb_xN-jO86lg373buNDpyB2yJqQTl2a8W_re_Zg4NlZHlCKkF7e4KI7XQgOfESIB3ufDn-7z06k9YW5FcGsRC7WUOf1ggJ1zbh7H-c5klU27EtNZXr8f3GwMnW5tudMgl-URQ" /></a> +<br /><br /> +<a href="https://photos.google.com/share/AF1QipOnzRayK-bJkw_x-q9odFCP_Qe9gxXe51cyowPPgfEK0n9JwskjgsE1gPV_yacS1A?key=YkhESEFoem4wR2d2cm9EZXhmbHh3bTdkSVVIQVdR&amp;source=ctrlq.org"><img src="https://lh3.googleusercontent.com/eI0BQGbXKONHMuQ-o1mPfz75N7RuA9FC9AMQvGWGJkWnnfYuxZLiV35JWsrqnDRRZnwquQ5ALeOYLBr-FwhmvVLpDedOO5fzhtiv5L2v2BC906TkL4Ib7v-RyThvZA7i92dQCPEUMQ" /></a> +<br /><br /> +<a href="https://photos.google.com/share/AF1QipM6iGYrdPO5E-fVc8TBG_-EapW0R-kQ5mm3KnY3tFOpTqkRfDNLUzS6xEOzPc9vJw?key=SXZoZ2dpcm1NYnpwTmpSS2dPWVh6WXB0aGVwWTBR&amp;source=ctrlq.org"><img src="https://lh3.googleusercontent.com/DqhJSsRa5EkZPQ_E1Cmm58DNgsOlvOBE-keElcnKD6eNve1Wu6Wqq9tuaoYCEXFjHXx35hPG6xWm8Xx6B5f8hBhDpd_t-m6XtnmNTJZ-cL6fdCCrfIDXKMIK4IOIXXhXOKkHaSRPVQ" /></a> +<br /><br /> +<a href="https://photos.google.com/share/AF1QipPjyt5T7iKOXsqZd7Vmn9khoWNciO1ZA85JH3S1BbhvXJYLHPEONdgSUeJaKPO4eA?key=VW5JOUp1X1FpX1NFajFtQm9iaTRBYzlnYTIyM3pn&amp;source=ctrlq.org"><img src="https://lh3.googleusercontent.com/0pHio73qtd-dzx1Ljrxp5mZl0NvIpqPwplMjtjFNOCNEFZ-7qGKMtl7RqW6mrBv6wUYvRZJWO5Z6ckA_-Ysh1ntzY_ZmkqtuS2F6ZkspyYfGi5SK4XOoMsV0VWqZlrgCKW6QvfMVUQ" /></a> +<br /><br /> +<a href="https://photos.google.com/share/AF1QipNdNdyyLPnBDyDfODDb3btPcgs4bHIi-tPUbNYo0xY7AJRWEeFSyZGcmqLIouFQHw?key=LTFaRkR6MGV0cnFqekdUNzRraGRFbTNhaFVueTN3&amp;source=ctrlq.org"><img src="https://lh3.googleusercontent.com/5dJiGZ4YrLakE3z6jhjrG-iu7l0UHMPkGWuPoa1Fgiamiw5DEnXfV05HPgk_gL8-ZpfoRO00peq_qSIFurmiVMDFzRYzWEeSXNzZ47e0W0RPDWUHSSfLaAf0n2VDBYQzoHC3MFvEGw" /></a> +<br /><br /> +<a href="https://photos.google.com/share/AF1QipNvSw7R7Ez3Ct-dk6nLU1amyqOu3P1JGTOAeYgeMoZmM_SK9XWGu2PyVMlmzvWSYQ?key=bWsxZ0NZeDRSTE5KaWpVM1lSRXUyblg0aUhIMkJR&amp;source=ctrlq.org"><img src="https://lh3.googleusercontent.com/1TevYRUA-kiLOkdfGOFLrqN8carVBuh6HmCqXRZt4l0z0kfqNj2VKuNBfm1ofBdI3laP6oSIx2a7Tq-_hXexcTx7wLKX3gud5MmIlQorLad1M69fEkyaJF8CBZQtfmNy8ndKaEz-rQ" /></a> +<br /> +View full album <strong><a href="https://photos.app.goo.gl/me7NaXLX6dPM1DMB2">here.</a></strong> +<br /><br /> + +</div> + +<p>The John Muir Trail was my very first thru hike. Prior to the trip I thought I had no idea what I was doing and planned the trip excessively: I picked out a camp site for every night, typed up all my meals typed up in a spreadsheet, and studied weather patterns across the Sierras. I’m happy I overprepared for this hike, because I learned a lot about what it takes to plan for a backcountry trip, but the moment I stepped my foot on trail I instantly became aware of the simplicity of the thru hiking life. I experienced what it was like living simply: just walking, eating, walking some more, and sleeping.</p> + +<p>Choosing the John Muir Trail as my first long hike has spoiled me a lot. I don’t think you could easily find a well established route that is this remote and so dense with beautiful mountains. Every single day on the Sierras was epic to say the least. For a friendly hike for all experience levels, I think this one’s hard to top.</p> + + + Sun, 30 Aug 2015 07:15:31 -0700 + http://localhost:4000/adventures/2015/08/30/JMT.html + http://localhost:4000/adventures/2015/08/30/JMT.html + + + Adventures + + + + + diff --git a/_site/index.html b/_site/index.html new file mode 100644 index 0000000..c5f9a66 --- /dev/null +++ b/_site/index.html @@ -0,0 +1,475 @@ + + + + + + + + + + Ed Nunez + + + + + + + + + + + + + + + + + + +
+ +
+
Ed Nunez
+
+
+
software developer by day . runner by night . amateur musician whatever time is left
+
+
+ +
+ + +
+
+
+ + +
+ + + +

+I'm Ed, a full-stack software engineer interested in doing high-impact work with highly-energetic people! Currently looking for my next career move. +

+ +
+

How I can provide value to your org:

+
    +
  • Process-oriented engineer: Always seeking to find common ground to instill order in organizational chaos.
  • +
  • Designing and executing beautiful full-stack web experiences: Fluent in React.JS and integrating it with any backend. I seek to build pixel-perfect experiences for people with their UX in mind.
  • +
  • Finding the 90/10 low hanging fruit for operationally heavy work: Proven track record of automating away hours of people's valuable time so they can do work that matters.
  • +
  • Making your org more data driven: Great data fluency. Data access is important to me - whether you need to build out a data warehouse, or create structured clean data so people can make great decisions + streamline data workflows.
  • +
  • Throw any problem at me: I enjoy figuring things out, even if I've never worked in that domain before.
  • +
+
+ +

+ During my 2.5 year stint at CoinList, I helped scale up a wide set of operational touchpoints for the company: building out data warehousing, data reporting, numerous internal tools, compliance rules & controls for users, and much more. + + I also had a major role on re-designing KYC/KYB onboarding - boosting time to onboard and reducing multiple onboarding friction points. +

+ +

+Prior, have spent my time algorithmic trading, founding an AR product over at Glimpsecard, and working on the UberEats Pricing Team. +

+ +

+I am well versed in Go, Ruby on Rails, HTML, CSS, JavaScript, ReactJS, NodeJS, Python, data pipelines, data reporting (and am constantly adding to this list). Check out my project portfolio! +

+ +

+Sometimes, I'll go outside to run until my toenails fall off or venture on overnight hikes. +

+ +

+Here's my Github and LinkedIn. If you'd like to contact me, feel free to drop me a line at ed@ednunez.me. Look forward to hearing from you! +

+ +
+ + +
+ +
+
+
+
+ + + + + + + diff --git a/_site/js/common.js b/_site/js/common.js new file mode 100644 index 0000000..5873a34 --- /dev/null +++ b/_site/js/common.js @@ -0,0 +1,20 @@ + + +function loadJSON(path, success, error) +{ + var xhr = new XMLHttpRequest(); + xhr.onreadystatechange = function() + { + if (xhr.readyState === XMLHttpRequest.DONE) { + if (xhr.status === 200) { + if (success) + success(JSON.parse(xhr.responseText)); + } else { + if (error) + error(xhr); + } + } + }; + xhr.open("GET", path, true); + xhr.send(); +} \ No newline at end of file diff --git a/_site/outside/index.html b/_site/outside/index.html new file mode 100644 index 0000000..f4a5cba --- /dev/null +++ b/_site/outside/index.html @@ -0,0 +1,576 @@ + + + + + + + + + + Ed Nunez + + + + + + + + + + + + + + + + + + +
+ +
+
Ed Nunez
+
+
+
software developer by day . runner by night . amateur musician whatever time is left
+
+
+ +
+ + +
+
+
+ + + + +
+ putting one foot in front of the other +
+ + +
+
+ +
image

+ + +

Running

+ + +
+ +

+Love grinding and powering out some forward propelling bipedal movement! Seeing some beautiful places with my own two feet and testing my limits brings me a lot of joy :) +

+ +

2019 Race Calendar

+
  • Jan 5 - New Year's One Day
  • +
  • September 21 - The Golden Ultra 120k
  • +
    + +

    Past Races

      [ Show/Hide ] +

    + + + + +
    + +
    +
    + +

    Adventures

    + + +
    +

    I am a super-fan of long distance, self-powered travel. I enjoy the simplicity of carrying everything I need on my pack, and hiking away into the unknown!

    + +

    What's in my pack?

    + +
    + + +

    Past Trips

    + +
    2024
    + + +
    2018-2023
    +
      + +
    • I haven't done a great job of keeping up to date, maybe I will if/when I have time :P
    • +
    + +
    2017
    + + +
    2016
    + + +
    2015
    + + +
    + +
    + +
    + +
    Follow me on Strava
    + +
    + + + + +
    + +
    + +
    +
    +
    +
    + + + + + + + diff --git a/_site/posts-photos/2016-05-31-Iceland/1.jpg b/_site/posts-photos/2016-05-31-Iceland/1.jpg new file mode 100644 index 0000000..f9cad35 Binary files /dev/null and b/_site/posts-photos/2016-05-31-Iceland/1.jpg differ diff --git a/_site/posts-photos/2016-05-31-Iceland/2.jpg b/_site/posts-photos/2016-05-31-Iceland/2.jpg new file mode 100644 index 0000000..d1d32bb Binary files /dev/null and b/_site/posts-photos/2016-05-31-Iceland/2.jpg differ diff --git a/_site/posts-photos/2016-05-31-Iceland/3.jpg b/_site/posts-photos/2016-05-31-Iceland/3.jpg new file mode 100644 index 0000000..4dd2290 Binary files /dev/null and b/_site/posts-photos/2016-05-31-Iceland/3.jpg differ diff --git a/_site/posts-photos/2016-05-31-Iceland/4.jpg b/_site/posts-photos/2016-05-31-Iceland/4.jpg new file mode 100644 index 0000000..934adc7 Binary files /dev/null and b/_site/posts-photos/2016-05-31-Iceland/4.jpg differ diff --git a/_site/posts-photos/2016-05-31-Iceland/5.jpg b/_site/posts-photos/2016-05-31-Iceland/5.jpg new file mode 100644 index 0000000..9c1658c Binary files /dev/null and b/_site/posts-photos/2016-05-31-Iceland/5.jpg differ diff --git a/_site/posts-photos/2016-05-31-Iceland/6.jpg b/_site/posts-photos/2016-05-31-Iceland/6.jpg new file mode 100644 index 0000000..63fb137 Binary files /dev/null and b/_site/posts-photos/2016-05-31-Iceland/6.jpg differ diff --git a/_site/posts-photos/2016-05-31-Iceland/7.jpg b/_site/posts-photos/2016-05-31-Iceland/7.jpg new file mode 100644 index 0000000..3148b64 Binary files /dev/null and b/_site/posts-photos/2016-05-31-Iceland/7.jpg differ diff --git a/_site/posts-photos/2016-05-31-Iceland/8.jpg b/_site/posts-photos/2016-05-31-Iceland/8.jpg new file mode 100644 index 0000000..fc39061 Binary files /dev/null and b/_site/posts-photos/2016-05-31-Iceland/8.jpg differ diff --git a/_site/posts-photos/2016-11-29-BoucherTontoBright/1.jpg b/_site/posts-photos/2016-11-29-BoucherTontoBright/1.jpg new file mode 100644 index 0000000..4eb0ab0 Binary files /dev/null and b/_site/posts-photos/2016-11-29-BoucherTontoBright/1.jpg differ diff --git a/_site/posts-photos/2016-11-29-BoucherTontoBright/2.jpg b/_site/posts-photos/2016-11-29-BoucherTontoBright/2.jpg new file mode 100644 index 0000000..be6e1a1 Binary files /dev/null and b/_site/posts-photos/2016-11-29-BoucherTontoBright/2.jpg differ diff --git a/_site/posts-photos/2016-11-29-BoucherTontoBright/3.jpg b/_site/posts-photos/2016-11-29-BoucherTontoBright/3.jpg new file mode 100644 index 0000000..6998c12 Binary files /dev/null and b/_site/posts-photos/2016-11-29-BoucherTontoBright/3.jpg differ diff --git a/_site/posts-photos/2016-11-29-BoucherTontoBright/4.jpg b/_site/posts-photos/2016-11-29-BoucherTontoBright/4.jpg new file mode 100644 index 0000000..77c48d8 Binary files /dev/null and b/_site/posts-photos/2016-11-29-BoucherTontoBright/4.jpg differ diff --git a/_site/posts-photos/2017-04-10-zumbro50/zumbro1.jpg b/_site/posts-photos/2017-04-10-zumbro50/zumbro1.jpg new file mode 100644 index 0000000..e97b02b Binary files /dev/null and b/_site/posts-photos/2017-04-10-zumbro50/zumbro1.jpg differ diff --git a/_site/posts-photos/2017-04-10-zumbro50/zumbro2.jpg b/_site/posts-photos/2017-04-10-zumbro50/zumbro2.jpg new file mode 100644 index 0000000..574dfe9 Binary files /dev/null and b/_site/posts-photos/2017-04-10-zumbro50/zumbro2.jpg differ diff --git a/_site/posts-photos/2017-04-10-zumbro50/zumbro3.jpg b/_site/posts-photos/2017-04-10-zumbro50/zumbro3.jpg new file mode 100644 index 0000000..efe58d4 Binary files /dev/null and b/_site/posts-photos/2017-04-10-zumbro50/zumbro3.jpg differ diff --git a/_site/posts-photos/2024-09-08-PCT/1.jpeg b/_site/posts-photos/2024-09-08-PCT/1.jpeg new file mode 100644 index 0000000..3fcfe2c Binary files /dev/null and b/_site/posts-photos/2024-09-08-PCT/1.jpeg differ diff --git a/_site/posts-photos/2024-09-08-PCT/10.jpeg b/_site/posts-photos/2024-09-08-PCT/10.jpeg new file mode 100644 index 0000000..252c0e6 Binary files /dev/null and b/_site/posts-photos/2024-09-08-PCT/10.jpeg differ diff --git a/_site/posts-photos/2024-09-08-PCT/11.jpeg b/_site/posts-photos/2024-09-08-PCT/11.jpeg new file mode 100644 index 0000000..fd1dd7a Binary files /dev/null and b/_site/posts-photos/2024-09-08-PCT/11.jpeg differ diff --git a/_site/posts-photos/2024-09-08-PCT/12.jpeg b/_site/posts-photos/2024-09-08-PCT/12.jpeg new file mode 100644 index 0000000..daa62e1 Binary files /dev/null and b/_site/posts-photos/2024-09-08-PCT/12.jpeg differ diff --git a/_site/posts-photos/2024-09-08-PCT/13.jpeg b/_site/posts-photos/2024-09-08-PCT/13.jpeg new file mode 100644 index 0000000..1ea99bf Binary files /dev/null and b/_site/posts-photos/2024-09-08-PCT/13.jpeg differ diff --git a/_site/posts-photos/2024-09-08-PCT/14.jpeg b/_site/posts-photos/2024-09-08-PCT/14.jpeg new file mode 100644 index 0000000..26727d4 Binary files /dev/null and b/_site/posts-photos/2024-09-08-PCT/14.jpeg differ diff --git a/_site/posts-photos/2024-09-08-PCT/15.jpeg b/_site/posts-photos/2024-09-08-PCT/15.jpeg new file mode 100644 index 0000000..0851dd2 Binary files /dev/null and b/_site/posts-photos/2024-09-08-PCT/15.jpeg differ diff --git a/_site/posts-photos/2024-09-08-PCT/16.jpeg b/_site/posts-photos/2024-09-08-PCT/16.jpeg new file mode 100644 index 0000000..f05acd6 Binary files /dev/null and b/_site/posts-photos/2024-09-08-PCT/16.jpeg differ diff --git a/_site/posts-photos/2024-09-08-PCT/17.jpeg b/_site/posts-photos/2024-09-08-PCT/17.jpeg new file mode 100644 index 0000000..bf22270 Binary files /dev/null and b/_site/posts-photos/2024-09-08-PCT/17.jpeg differ diff --git a/_site/posts-photos/2024-09-08-PCT/18.jpeg b/_site/posts-photos/2024-09-08-PCT/18.jpeg new file mode 100644 index 0000000..11b6748 Binary files /dev/null and b/_site/posts-photos/2024-09-08-PCT/18.jpeg differ diff --git a/_site/posts-photos/2024-09-08-PCT/19.jpeg b/_site/posts-photos/2024-09-08-PCT/19.jpeg new file mode 100644 index 0000000..721a3de Binary files /dev/null and b/_site/posts-photos/2024-09-08-PCT/19.jpeg differ diff --git a/_site/posts-photos/2024-09-08-PCT/2.jpeg b/_site/posts-photos/2024-09-08-PCT/2.jpeg new file mode 100644 index 0000000..0b0cdd6 Binary files /dev/null and b/_site/posts-photos/2024-09-08-PCT/2.jpeg differ diff --git a/_site/posts-photos/2024-09-08-PCT/3.jpeg b/_site/posts-photos/2024-09-08-PCT/3.jpeg new file mode 100644 index 0000000..e42d188 Binary files /dev/null and b/_site/posts-photos/2024-09-08-PCT/3.jpeg differ diff --git a/_site/posts-photos/2024-09-08-PCT/4.jpeg b/_site/posts-photos/2024-09-08-PCT/4.jpeg new file mode 100644 index 0000000..0432a3d Binary files /dev/null and b/_site/posts-photos/2024-09-08-PCT/4.jpeg differ diff --git a/_site/posts-photos/2024-09-08-PCT/5.jpeg b/_site/posts-photos/2024-09-08-PCT/5.jpeg new file mode 100644 index 0000000..b0817bf Binary files /dev/null and b/_site/posts-photos/2024-09-08-PCT/5.jpeg differ diff --git a/_site/posts-photos/2024-09-08-PCT/6.jpeg b/_site/posts-photos/2024-09-08-PCT/6.jpeg new file mode 100644 index 0000000..f57f6ca Binary files /dev/null and b/_site/posts-photos/2024-09-08-PCT/6.jpeg differ diff --git a/_site/posts-photos/2024-09-08-PCT/7.jpeg b/_site/posts-photos/2024-09-08-PCT/7.jpeg new file mode 100644 index 0000000..4112a13 Binary files /dev/null and b/_site/posts-photos/2024-09-08-PCT/7.jpeg differ diff --git a/_site/posts-photos/2024-09-08-PCT/8.jpeg b/_site/posts-photos/2024-09-08-PCT/8.jpeg new file mode 100644 index 0000000..dc9b2cb Binary files /dev/null and b/_site/posts-photos/2024-09-08-PCT/8.jpeg differ diff --git a/_site/posts-photos/2024-09-08-PCT/9.jpeg b/_site/posts-photos/2024-09-08-PCT/9.jpeg new file mode 100644 index 0000000..99b9f24 Binary files /dev/null and b/_site/posts-photos/2024-09-08-PCT/9.jpeg differ diff --git a/_site/posts-photos/ALGOTRADING/backtesting.png b/_site/posts-photos/ALGOTRADING/backtesting.png new file mode 100644 index 0000000..e9e3b0a Binary files /dev/null and b/_site/posts-photos/ALGOTRADING/backtesting.png differ diff --git a/_site/posts-photos/ALGOTRADING/oco.png b/_site/posts-photos/ALGOTRADING/oco.png new file mode 100644 index 0000000..2447a1a Binary files /dev/null and b/_site/posts-photos/ALGOTRADING/oco.png differ diff --git a/_site/posts-photos/ALGOTRADING/tech-arch.png b/_site/posts-photos/ALGOTRADING/tech-arch.png new file mode 100644 index 0000000..d0dedc9 Binary files /dev/null and b/_site/posts-photos/ALGOTRADING/tech-arch.png differ diff --git a/_site/posts-photos/ALGOTRADING/tech-dependencies.png b/_site/posts-photos/ALGOTRADING/tech-dependencies.png new file mode 100644 index 0000000..0014b67 Binary files /dev/null and b/_site/posts-photos/ALGOTRADING/tech-dependencies.png differ diff --git a/_site/posts-photos/GLIMPSE/ar1.png b/_site/posts-photos/GLIMPSE/ar1.png new file mode 100644 index 0000000..953d681 Binary files /dev/null and b/_site/posts-photos/GLIMPSE/ar1.png differ diff --git a/_site/posts-photos/GLIMPSE/ar2.png b/_site/posts-photos/GLIMPSE/ar2.png new file mode 100644 index 0000000..29d337d Binary files /dev/null and b/_site/posts-photos/GLIMPSE/ar2.png differ diff --git a/_site/posts-photos/GLIMPSE/design1.png b/_site/posts-photos/GLIMPSE/design1.png new file mode 100644 index 0000000..c0da50d Binary files /dev/null and b/_site/posts-photos/GLIMPSE/design1.png differ diff --git a/_site/posts-photos/GLIMPSE/design2.png b/_site/posts-photos/GLIMPSE/design2.png new file mode 100644 index 0000000..dd2cce8 Binary files /dev/null and b/_site/posts-photos/GLIMPSE/design2.png differ diff --git a/_site/posts-photos/GLIMPSE/design3.png b/_site/posts-photos/GLIMPSE/design3.png new file mode 100644 index 0000000..a053472 Binary files /dev/null and b/_site/posts-photos/GLIMPSE/design3.png differ diff --git a/_site/posts-photos/GLIMPSE/design4.png b/_site/posts-photos/GLIMPSE/design4.png new file mode 100644 index 0000000..5c06642 Binary files /dev/null and b/_site/posts-photos/GLIMPSE/design4.png differ diff --git a/_site/posts-photos/GLIMPSE/detect_demo.gif b/_site/posts-photos/GLIMPSE/detect_demo.gif new file mode 100644 index 0000000..655d13a Binary files /dev/null and b/_site/posts-photos/GLIMPSE/detect_demo.gif differ diff --git a/_site/posts-photos/GLIMPSE/detect_demo.mov b/_site/posts-photos/GLIMPSE/detect_demo.mov new file mode 100644 index 0000000..24133cd Binary files /dev/null and b/_site/posts-photos/GLIMPSE/detect_demo.mov differ diff --git a/_site/posts-photos/GLIMPSE/detect_demo_trim.gif b/_site/posts-photos/GLIMPSE/detect_demo_trim.gif new file mode 100644 index 0000000..d0052e5 Binary files /dev/null and b/_site/posts-photos/GLIMPSE/detect_demo_trim.gif differ diff --git a/_site/posts-photos/GLIMPSE/detect_demo_trim.mov b/_site/posts-photos/GLIMPSE/detect_demo_trim.mov new file mode 100644 index 0000000..2317b5a Binary files /dev/null and b/_site/posts-photos/GLIMPSE/detect_demo_trim.mov differ diff --git a/_site/posts-photos/GLIMPSE/login.png b/_site/posts-photos/GLIMPSE/login.png new file mode 100644 index 0000000..cfbfd1f Binary files /dev/null and b/_site/posts-photos/GLIMPSE/login.png differ diff --git a/_site/posts-photos/GLIMPSE/rooftop_demo.mov b/_site/posts-photos/GLIMPSE/rooftop_demo.mov new file mode 100644 index 0000000..abd24f4 Binary files /dev/null and b/_site/posts-photos/GLIMPSE/rooftop_demo.mov differ diff --git a/_site/posts-photos/GLIMPSE/rooftop_demo.png b/_site/posts-photos/GLIMPSE/rooftop_demo.png new file mode 100644 index 0000000..7b2a68b Binary files /dev/null and b/_site/posts-photos/GLIMPSE/rooftop_demo.png differ diff --git a/_site/posts-photos/GLIMPSE/tech_arch.png b/_site/posts-photos/GLIMPSE/tech_arch.png new file mode 100644 index 0000000..2595d66 Binary files /dev/null and b/_site/posts-photos/GLIMPSE/tech_arch.png differ diff --git a/_site/posts-photos/VANLIFE/1.jpeg b/_site/posts-photos/VANLIFE/1.jpeg new file mode 100644 index 0000000..6ec1d95 Binary files /dev/null and b/_site/posts-photos/VANLIFE/1.jpeg differ diff --git a/_site/posts-photos/VANLIFE/10.jpeg b/_site/posts-photos/VANLIFE/10.jpeg new file mode 100644 index 0000000..ec6cde5 Binary files /dev/null and b/_site/posts-photos/VANLIFE/10.jpeg differ diff --git a/_site/posts-photos/VANLIFE/2.jpeg b/_site/posts-photos/VANLIFE/2.jpeg new file mode 100644 index 0000000..5c9e2af Binary files /dev/null and b/_site/posts-photos/VANLIFE/2.jpeg differ diff --git a/_site/posts-photos/VANLIFE/3.jpeg b/_site/posts-photos/VANLIFE/3.jpeg new file mode 100644 index 0000000..c5e8e4b Binary files /dev/null and b/_site/posts-photos/VANLIFE/3.jpeg differ diff --git a/_site/posts-photos/VANLIFE/4.jpeg b/_site/posts-photos/VANLIFE/4.jpeg new file mode 100644 index 0000000..e311949 Binary files /dev/null and b/_site/posts-photos/VANLIFE/4.jpeg differ diff --git a/_site/posts-photos/VANLIFE/5.jpeg b/_site/posts-photos/VANLIFE/5.jpeg new file mode 100644 index 0000000..65bcdef Binary files /dev/null and b/_site/posts-photos/VANLIFE/5.jpeg differ diff --git a/_site/posts-photos/VANLIFE/6.jpeg b/_site/posts-photos/VANLIFE/6.jpeg new file mode 100644 index 0000000..a9df085 Binary files /dev/null and b/_site/posts-photos/VANLIFE/6.jpeg differ diff --git a/_site/posts-photos/VANLIFE/7.jpeg b/_site/posts-photos/VANLIFE/7.jpeg new file mode 100644 index 0000000..e11f0cd Binary files /dev/null and b/_site/posts-photos/VANLIFE/7.jpeg differ diff --git a/_site/posts-photos/VANLIFE/8.jpeg b/_site/posts-photos/VANLIFE/8.jpeg new file mode 100644 index 0000000..cbd9902 Binary files /dev/null and b/_site/posts-photos/VANLIFE/8.jpeg differ diff --git a/_site/posts-photos/VANLIFE/9.jpeg b/_site/posts-photos/VANLIFE/9.jpeg new file mode 100644 index 0000000..bb7e5ef Binary files /dev/null and b/_site/posts-photos/VANLIFE/9.jpeg differ diff --git a/_site/posts-photos/VANLIFE/CAD_ALL.jpg b/_site/posts-photos/VANLIFE/CAD_ALL.jpg new file mode 100644 index 0000000..fd3d9f5 Binary files /dev/null and b/_site/posts-photos/VANLIFE/CAD_ALL.jpg differ diff --git a/_site/posts-photos/VANLIFE/barebones.jpeg b/_site/posts-photos/VANLIFE/barebones.jpeg new file mode 100644 index 0000000..0f335b4 Binary files /dev/null and b/_site/posts-photos/VANLIFE/barebones.jpeg differ diff --git a/_site/posts-photos/VANLIFE/building-wip.jpeg b/_site/posts-photos/VANLIFE/building-wip.jpeg new file mode 100644 index 0000000..9e1792a Binary files /dev/null and b/_site/posts-photos/VANLIFE/building-wip.jpeg differ diff --git a/_site/posts-photos/VANLIFE/cad1.png b/_site/posts-photos/VANLIFE/cad1.png new file mode 100644 index 0000000..e06cb91 Binary files /dev/null and b/_site/posts-photos/VANLIFE/cad1.png differ diff --git a/_site/posts-photos/VANLIFE/cad2.png b/_site/posts-photos/VANLIFE/cad2.png new file mode 100644 index 0000000..630a2ab Binary files /dev/null and b/_site/posts-photos/VANLIFE/cad2.png differ diff --git a/_site/posts-photos/VANLIFE/cad3.png b/_site/posts-photos/VANLIFE/cad3.png new file mode 100644 index 0000000..0f1e74e Binary files /dev/null and b/_site/posts-photos/VANLIFE/cad3.png differ diff --git a/_site/posts-photos/VANLIFE/cad4.png b/_site/posts-photos/VANLIFE/cad4.png new file mode 100644 index 0000000..2103bd2 Binary files /dev/null and b/_site/posts-photos/VANLIFE/cad4.png differ diff --git a/_site/posts-photos/VANLIFE/circuit.png b/_site/posts-photos/VANLIFE/circuit.png new file mode 100644 index 0000000..7a93c97 Binary files /dev/null and b/_site/posts-photos/VANLIFE/circuit.png differ diff --git a/_site/posts-photos/VANLIFE/floor_insulation.jpeg b/_site/posts-photos/VANLIFE/floor_insulation.jpeg new file mode 100644 index 0000000..defcc6f Binary files /dev/null and b/_site/posts-photos/VANLIFE/floor_insulation.jpeg differ diff --git a/_site/posts-photos/VANLIFE/framing0.jpeg b/_site/posts-photos/VANLIFE/framing0.jpeg new file mode 100644 index 0000000..4b04203 Binary files /dev/null and b/_site/posts-photos/VANLIFE/framing0.jpeg differ diff --git a/_site/posts-photos/VANLIFE/framing1.jpeg b/_site/posts-photos/VANLIFE/framing1.jpeg new file mode 100644 index 0000000..4518593 Binary files /dev/null and b/_site/posts-photos/VANLIFE/framing1.jpeg differ diff --git a/_site/posts-photos/VANLIFE/framing2.jpeg b/_site/posts-photos/VANLIFE/framing2.jpeg new file mode 100644 index 0000000..4789173 Binary files /dev/null and b/_site/posts-photos/VANLIFE/framing2.jpeg differ diff --git a/_site/posts-photos/VANLIFE/framing3.jpeg b/_site/posts-photos/VANLIFE/framing3.jpeg new file mode 100644 index 0000000..2106163 Binary files /dev/null and b/_site/posts-photos/VANLIFE/framing3.jpeg differ diff --git a/_site/posts-photos/VANLIFE/framing4.jpeg b/_site/posts-photos/VANLIFE/framing4.jpeg new file mode 100644 index 0000000..a5b7cf5 Binary files /dev/null and b/_site/posts-photos/VANLIFE/framing4.jpeg differ diff --git a/_site/posts-photos/VANLIFE/furnish1.jpeg b/_site/posts-photos/VANLIFE/furnish1.jpeg new file mode 100644 index 0000000..bf3d0b8 Binary files /dev/null and b/_site/posts-photos/VANLIFE/furnish1.jpeg differ diff --git a/_site/posts-photos/VANLIFE/furnish2.jpeg b/_site/posts-photos/VANLIFE/furnish2.jpeg new file mode 100644 index 0000000..48e0505 Binary files /dev/null and b/_site/posts-photos/VANLIFE/furnish2.jpeg differ diff --git a/_site/posts-photos/VANLIFE/furnish3.jpeg b/_site/posts-photos/VANLIFE/furnish3.jpeg new file mode 100644 index 0000000..78caff7 Binary files /dev/null and b/_site/posts-photos/VANLIFE/furnish3.jpeg differ diff --git a/_site/posts-photos/VANLIFE/roof.gif b/_site/posts-photos/VANLIFE/roof.gif new file mode 100644 index 0000000..e5fc989 Binary files /dev/null and b/_site/posts-photos/VANLIFE/roof.gif differ diff --git a/_site/posts-photos/VANLIFE/rot_floor.JPG b/_site/posts-photos/VANLIFE/rot_floor.JPG new file mode 100644 index 0000000..abc430e Binary files /dev/null and b/_site/posts-photos/VANLIFE/rot_floor.JPG differ diff --git a/_site/posts-photos/VANLIFE/walls1.jpeg b/_site/posts-photos/VANLIFE/walls1.jpeg new file mode 100644 index 0000000..db3720a Binary files /dev/null and b/_site/posts-photos/VANLIFE/walls1.jpeg differ diff --git a/_site/projects.js b/_site/projects.js new file mode 100644 index 0000000..9d2fd63 --- /dev/null +++ b/_site/projects.js @@ -0,0 +1,246 @@ +var projects_json = [ + { + "title":"Grateful Dead Show Archive 🚧 (WIP) 🚧", + + "date":"2024/06", + + "image":"/assets/projects/gd.png", + + "info": "Working on an interactive Grateful Dead show database, visual archive. Meant to be an interactive tool for discovering shows adored by GD fans. If this is interesting to you, reach out !", + + "links":{ + + }, + + "tags":["Elixir", "React"] + }, + { + "title":"RAM Promaster Van Mobile Home", + + "date":"2020/11", + + "image":"/assets/projects/vanlife.png", + + "info":"Built out a mobile home outfitted with furniture, off grid solar electrical system, running water, kitchen, and more.", + + "links":{ + "moreinfo":"http://ednunez.me/tech/2021/03/18/VanBuild.html" + }, + + "tags":["CAD modeling", "Electrical wiring", "Carpentry", "Extreme patience"] + }, + { + "title":"Algorithmic Day Trading Bot", + + "date":"2020/04", + + "image":"/assets/projects/algotrading.png", + + "info":"Created day-trading bot with backtesting framework. Bot makes trading decisions based on support+resistance trendlines, news, and other key market indicators. Published python library for trendline detection component.", + + "links":{ + "moreinfo":"http://ednunez.me/tech/2021/03/18/Algotrading.html", + "source":"https://github.com/ednunezg/pytrendline" + }, + + "tags":["Python", "Pandas", "Ameritrade API", "AWS", "Elastic Stack"] + }, + { + "title":"Glimpsecard - Augmented reality business cards", + + "date":"2019/08", + + "image":"/assets/projects/glimpsecard.png", + + "info":"Create augmented reality enabled business cards, viewable on your smartphone without an app.", + + "links":{ + "moreinfo":"http://ednunez.me/tech/2021/03/18/Glimpse.html", + "landingpage":"https://glimpse-landing-page.herokuapp.com/" + }, + + "tags":["Node.js","React.js","JavaScript", "Shopify", "Stripe"] + }, + { + "title":"To-do list app with user authentication", + + "date":"2017/08", + + "image":"/assets/projects/todo.png", + + "info":"Built this for the purposes of learning React.js and handling authentication with Google and Facebook OAuth APIs. This web app allows a logged in user to add to-dos to his profile. All to-dos are synched with a MongoDB database.", + + "links":{ + "main":"https://todos-reactjs.herokuapp.com", + "moreinfo":null, + "source":"https://github.com/ednunezg/react-todolist" + }, + + "tags":["Node.js","React.js","Flux","JavaScript","MongoDB"] + }, + + { + "hidden":"true", + + "title":"FKT Setter: A GPS logger for iOS", + + "date":"2017/08", + + "image":"/assets/projects/fkt-setter.png", + + "info":"[Insert GPS logger info here]", + + "links":{ + "main":null, + "moreinfo":null, + "source":null + }, + + "tags":["Swift","Node.js","MongoDB","REST API"] + }, + + + { + "title":"Training log viewer for runners and cyclists", + + "date":"2017/06", + + "image":"/assets/projects/strava.png", + + "info":"Simple, but beautiful, single page training log viewer for Strava users, bypassing social media clutter on Strava's website. Imports workouts via Strava's API and presents log with a calendar-like view. Intended to be primarily used as a 'new tab' page.", + + "links":{ + "main":"https://stravalogdemo.herokuapp.com", + "moreinfo":null, + "demo":null, + "source":"https://github.com/ednunezg/StravaLog" + }, + + "tags":["Node.js","JavaScript","jQuery","REST API"] + }, + + { + "title":"Speech Analytics iOS app", + + "date":"2017/04", + + "image":"/assets/projects/speechanalytics.png", + + "info":"iOS application buitl for my college Senior project. Detects speech stutters, monotony, long pauses, and filler words in real-time. It provides speakers with a statistical analysis of their performance to aid in improving their speech skills. Made with four other students for my Senior Design class.", + + "links":{ + "main":null, + "moreinfo":null, + "demo":"https://youtu.be/e7t3LG6ICfA", + "source":"https://github.com/eddypuffs/Speech_Analytics_App" + }, + + "tags":["Swift","AudioKit Framework"] + }, + + + { + "title":"Chatroom Server and Client", + + "date":"2017/02", + + "image":"/assets/projects/chat.jpg", + + "info":"For my computer networks class, I developed a chatroom server and client program in Java. Special features include a user registration system and P2P file sharing between clients.", + + "links":{ + "main":null, + "moreinfo":null, + "source":"https://github.com/eddypuffs/Chat_Client_And_Server" + }, + + "tags":["Java","Sockets Programming"] + }, + + + { + "hidden":"true", + + "title":"OS161", + + "date":"2017/02", + + "image":"/assets/projects/os161.png", + + "info":"For my operating systems course, I extended the functionality of the primitive OS161 operating system written in C. I implemented smarter process schedulers, multi-threading and virtual memory.", + + "links":{ + "main":null, + "moreinfo":null, + "source":"https://github.com/eddypuffs/OS161-Schedulers" + }, + + "tags":["C"] + }, + + { + "title":"Self navigating robot", + + "date":"2015/03", + + "image":"/assets/projects/cnc-alternative.jpg", + + "info":"Created prototype for a robot that autonomously navigates in 2D space to research portable and affordable solutions to CNC Mills. Future prototypes will include mounted drawing device. System relies on Arduino board, Zigbee communication, robot localization methods, and PID control.", + + "links":{ + "main":null, + + "moreinfo":"https://www.slideshare.net/EduardoNunez10/ed-nunez-mobile-robot-cnc-alternative", + + // "source":"https://github.com/ednunezg/CNC_Alternative_Bot" + }, + + "tags":["Arduino","Zigbee"] + + }, + + { + "title":"Printer resources notification app", + + "date":"2014/04", + + "image":"/assets/projects/csom-printer.png", + + "info":"Desktop app I made while working in Carlson IT sophomore year. App parses HTML text from printer servers, interprets whether printers have hit critical levels, and notifies the user via email or text.", + + "links":{ + "main":null, + + "moreinfo":null, + + "source":"https://github.com/eddypuffs/CSOM_Printer_Notifier" + }, + + "tags":["Java","HTML Parsing"] + + }, + + { + "title":"Engineers Without Borders UMN Checkout", + + "date":"2014/02", + + "image":"/assets/projects/ewb.jpg", + + "info":"My first hands-on software project. Made a dynamic website from scratch that allows EWB UMN members to reserve and checkout items from a catalog.", + + "links":{ + "main":"http://checkout.ewb-umn.org", + + "moreinfo":null, + + "source":"https://github.com/eddypuffs/checkout.ewb-umn.org" + }, + + "tags":["PHP","Javascript","mySQL"] + + } + +]; + +window.projects_json = projects_json; diff --git a/_site/projects/index.html b/_site/projects/index.html new file mode 100644 index 0000000..328439b --- /dev/null +++ b/_site/projects/index.html @@ -0,0 +1,554 @@ + + + + + + + + + + Projects + + + + + + + + + + + + + + + + + + +
    + +
    +
    Ed Nunez
    +
    +
    +
    software developer by day . runner by night . amateur musician whatever time is left
    +
    +
    + +
    + + +
    +
    +
    + + + + +
    + Projects a portfolio of stuff I've worked on outside of my main career +
    + + +
    +
    + +
    + +
    +

    More available on my Github page!

    +
    + + + + + + +
    + +
    + +
    +
    +
    +
    + + + + + + + diff --git a/_site/resume.pdf b/_site/resume.pdf new file mode 100644 index 0000000..522c213 Binary files /dev/null and b/_site/resume.pdf differ diff --git a/_site/resume/index.html b/_site/resume/index.html new file mode 100644 index 0000000..9a7c369 --- /dev/null +++ b/_site/resume/index.html @@ -0,0 +1,456 @@ + + + + + + + + + + Resume + + + + + + + + + + + + + + + + + + +
    + +
    +
    Ed Nunez
    +
    +
    +
    software developer by day . runner by night . amateur musician whatever time is left
    +
    +
    + +
    + + +
    +
    +
    + + + + + +
    + + + +
    + + +

    + Link to PDF +

    +
    + +
    + +
    + +
    +
    +
    +
    + + + + + + + diff --git a/_site/tech/2021/03/18/Algotrading.html b/_site/tech/2021/03/18/Algotrading.html new file mode 100644 index 0000000..c73c13e --- /dev/null +++ b/_site/tech/2021/03/18/Algotrading.html @@ -0,0 +1,550 @@ + + + + + + + + + + Building a reliable and testable day trading bot on python + + + + + + + + + + + + + + + + + + +
    + +
    +
    Ed Nunez
    +
    +
    +
    software developer by day . runner by night . amateur musician whatever time is left
    +
    +
    + +
    + + +
    +
    +
    + +
    +

    Building a reliable and testable day trading bot on python

    +
    +
    +
    + +
    +

    About

    + +

    Day trading involves a competition with a large crowd of investors to react to market conditions that you can predict and react with speed. In theory, trading in an automated fashion can allow you to generate profits with a speed and frequency that is impossible for a human to execute. Other added benefits include:

    + +
      +
    • You can detach yourself psychologically and emotionally from your trading decisions once you cement a trust in your strategy
    • +
    • Your strategy is testable against historical price data. This also means you optimize algorithm parameter by permutating these on multiple backtests
    • +
    • Low risk of manual error while placing orders
    • +
    + +

    However, by doing this you are subject to the major risk of possible system failures. If you build this system, it is important that you have a fail safe methods to cover for losses caused by these failures. In this post, I will show you how I covered some of these cases.

    + +

    A succesful strategy is one where you make judgements based on indicators you collect that can give you an edge on the market. In my experience, the process of selecting and tuning a succesful strategy is based more on how fast you can iterate and test different strategy parameters more than understanding the “why” of how your strategy might work. With no formal finance background, I managed to leverage my programming knowledge to create a system by which I can easily and quickly test my strategy on thousands of strategy permulations, and then decide if I should run my strategy that day based on my confidence level of historical results. In this post, I will walk through some of the decisions behind my trading strategy and the tech stack behind the bot+backtesting framework.

    + +

    My bot’s strategy

    + +

    My trading bot strategy falls into the category of low-frequency day trading with each trade consiting of a large quantity of stocks ($10k - $100k worth). The trades are low-frequency because the trades are contingent on a trendline being found on a candlestick chart once every few minutes. This is perhaps different from high-frequency day trading strategies where a trader might be sending hundreds or thousands of orders a day, and making profits on quick price movements.

    + +

    For my strategy, I found it appropiate to use a STP and LMT OCO order type for placing orders. In an OCO order (one-cancels-the-other), your broker takes care of listening for an activation price by which you will enter a position. After this activation, the broker listens to two new price thresholds for which the position will close on a profit or loss.

    + +

    OCO order

    + +

    This order type made it easy for me to build a backtesting framework, makes interpreting results straight forward, and removes the burden of having your software listen for the appropiate moment to close positions. If your software crashes and you have pending orders that have not closed the position, the OCO instructions implicit on the order puts the responsibility of closing positions on your broker.

    + +

    I wouldn’t reccomend this order type if you need to have control of better granularity (e.g. you want to exit your position 50% at some price point and 50% at another). This is also not recommended if your strategy is contingent on time if say, you want to force a position to close X minutes after you enter. in this case, entering and exiting positions with MARKET trigger orders would be more appropiate.

    + +

    Indicators leveraged for my bot’s strategy

    + +

    The bot has to go through the iterative process of

    + +

    (1) Fetching price data and additional data useful for your indicators

    + +

    (2) Calculating indicators

    + +

    (3) Check if indicators results satisfy order placement criteria

    + +

    (4) Place OCO order

    + +

    (5) Idle wait for next time interval

    + +

    My strategy relied on trendline detection as the key indicator for deciding whether to execute trades. This was achieved with the use of my python library pytrendline which you can use for detecting trendlines formed at the support or resistance level of candlesticks.

    + +

    Another indicators I leveraged were news sentiments based on keywords matched against a stock’s news feed. SMA curves, EMA curves, and number of price inflection points were also computed and analyzed against a set of criteria to decide if the trade is worth doing.

    +

    What do you need to build reliable and back-testable trading bot?

    + +

    A succesful testable bot should be one that can be made with an offline and online mode of operation. If these two modes can be provided as an input, you can leverage the offline mode for performing historical tests using a backtesting framework that wraps around the program, and the online mode for a production use case.

    + +

    I designed my program with the following inputs:

    +
      +
    • List of symbols to trade with (my strategy at the moment does require I filter through stocks manually at the beginning of the day)
    • +
    • Online or offline mode
    • +
    • If offline mode provided, specify the date to simulate
    • +
    + +

    The online mode for my bot pulls realtime prices and places OCO orders via the Ameritrade API whereas the offline mode pulls historical prices and saves order placement information in a file.

    + +

    Bot operation

    + +

    The backtesting software was created to wrap around the offline version of the bot, and calculate statistics for what profit/losses would have been like on specified dates. One of the key features of my backtesting software was also providing an input file containing values to permutate for different configuraiton values. This way I can compare profits amongst different set of configurations.

    + +

    Bcktesting

    + +

    I leveraged the following dependencies:

    + +
      +
    • Core program: Python language and Pandas lib for plenty of matrix operations
    • +
    • Placing orders: Ameritrade API order placement endpoint
    • +
    • Fetching OHLC price information: Ameritrade API price history endpoint.
    • +
    • Fetching news: IEX Cloud news endpoint. Handy API gives a feed of latest news from many sources just providing stock symbol as an input
    • +
    • Log output and alerting: Logz.io. Logz.io is a useful ELK-as-a-service platform in which I pushed all of my online mode logs for the purposes of long term retention, debugging, and alerting.
    • +
    • Visualization of candlestick chart, EMA/SMA curves, trendlines: Bokeh. All of my trades generated also create an output HTML file with a visualization snapshot of the stock’s candlesticks, trendlines, curves and other indicators at that point in time. Really useful for debugging
    • +
    + +

    Tech infra

    + +

    Hosting and ensuring reliability

    + +

    One of the things I learned along the way is that it is not enough to trust the broker will handle your order exactly as you expect and it is worthwhile to have some sort of a redundancy check to ensure proper integrity of your orders. Maybe you commit a change to your code that messes up the request to the order placement API and causes unexpected results. Or maybe there’s an edge case you forgot about, such as the market closing with your positions still open and the broker isn’t doing this for you.

    + +

    I strongly suggest building a seperate program that runs periodically to check for such cases. I did this because if my main bot were ever to crash, I can have some trust in the seperate program to cover any lingering problems. Another option would be to integrate this periodic routine as a seperate thread in the main program, but you would need to properly handle the program rebooting upon crashing.

    + +

    This made my choice for cloud hosting easy: I use an Amazon EC2 instance that is scheduled to run the trading bot on NYSE market open time each day. Then, a server-less AWS Lambda operation takes care of running a routine every minute to check for the edge cases.

    + +

    Lessons learned and a word of caution

    + +

    Taking on this project as both a challenging feat and the pursuit of an extra source of income turned out being extremely rewarding and fruitful in learning how to best design reliable+complex backend systems.

    + +

    The two main challenging pieces of solving this puzzle involved proper order lifecycle management and building the backtesting software.

    + +

    I found that there were a LOT of edge cases to handle when placing orders: What if I don’t have sufficient account balance and I need to adjust stock unit quantity? What happens if the broker doesn’t place the order as expected? How do I handle timeouts with the broker API? All of this led to a thorough examination of edge cases and proper fail-safe methods where appropiate.

    + +

    Building the backtesting software required a complex set of features that warranted extreme code modularity and organization. Upon calling the bot in offline mode I had to determine price levels for which the order entered and exit, compute profit/loss statistics, compute aggregate statistics, etc. It was additionally challenging to make the entire backtesting run as fast as possible in order to test multiple configurations, and there was plenty of opportunities to leverage multiprocessing to get the job efficiently.

    + +

    One thing I will say in advance to those hoping to take on algo-trading: don’t take any historical results for granted. Although I made it an effort to find configurations that lead to consistently profitable results for the last 3+ years, I learned that none of it should be proof of your strategy working indefinitely in the future. A change in market conditions can render your strategy useless at any point in time and that’s something you might have to accept and deal with.

    + +

    Additionally, I would be aware of conditions that could be causing a mismatch between stocks tested and future orders placed for a stock. In my case, I didn’t consider that some stocks couldn’t be shorted by my broker when it came to running the bot in a production use case, but I had been calculating my profits and losses assuming that all stocks could be shorted. This has caused me a significant mismatch between backtesting results and expected results which has made it a challenge to correctly make sense of my tests.

    + +
    + + + + +
    + +
    +
    +
    +
    + + + + + + + diff --git a/_site/tech/2021/03/18/Glimpse.html b/_site/tech/2021/03/18/Glimpse.html new file mode 100644 index 0000000..7299cfa --- /dev/null +++ b/_site/tech/2021/03/18/Glimpse.html @@ -0,0 +1,525 @@ + + + + + + + + + + How we built a mobile AR product from the ground up at GLIMPSE + + + + + + + + + + + + + + + + + + +
    + +
    +
    Ed Nunez
    +
    +
    +
    software developer by day . runner by night . amateur musician whatever time is left
    +
    +
    + +
    + + +
    +
    +
    + +
    +

    How we built a mobile AR product from the ground up at GLIMPSE

    +
    +
    +
    + +
    +

    During the period between September 2019 and March 2020, I helped built the AR product GLIMPSE cards. GLIMPSE cards are business cards that can present digital content to the card’s receiver with the aid of Augmented Reality.

    + +

    AR in action

    + +

    The GLIMPSE card owner can use the web app to (1) customize business card physical design, (2) customize card’s AR content, and finally (3) have a bulk quantity of cards shipped.

    + +

    Unfortunately the project was ultimately shut down on April 2020 as we were unable to secure financing to maintain the tech infrastructure.

    + +

    Goals for this project

    + +

    The main challenges for this project were -

    + +

    1. Building a friction-less onboarding experience for a user to start building their business card.

    + +

    We wanted to give all of our incoming users a easy chance of trying out the design tool and the Augmented Reality experience prior to buying a stack of cards. For a user to start their journey, they just needed to start an account in our site. They are then be presented with a design tool where they can get a sense of what the AR product would look like if they purchased from us.

    + +

    AR in action

    + +

    2. Customizable card design

    + +

    The design tool could be used to insert text and graphics in the physical card along with the AR content. All design components are inputed by the user on a web form that are then projected over to a web canvas. The QR code on the card maps to the AR page that the card receiver can open on their phone.

    + +

    Front card design

    +

    Back card design

    +

    AR content design

    + +

    3. Smooth AR experience for people receiving business cards

    + +

    The user receiving the card needs to scan the QR code to be presented with the AR view. We choose the Web AR engine 8th Wall to provide an experience that happens entirely in a mobile browser. The user does not need to download an app. It is as simple as scanning the QR code and giving the mobile browser permission to access the phone’s camera.

    + +

    + + + +

    + +

    4. Ordering flow and logistics for getting cards shipped efficiently

    + +

    We leveraged Stripe for handling order payments and managing the order status. Upon a user ordering a set quantity of cards, we unlocked the QR code in the AR app for unlimited viewing and a Stripe order is created with “created” status. On our end, we are notified when the order is received, prepare the shipment through a third party card printing service, and mark the order as “shipped”.

    + +

    Technical architecture

    + +

    Tech architecture

    + +

    The project was built under a Node.JS / ReactJS stack hosted under Google Cloud. We leveraged Google Cloud’s Datastore to store user and card information.

    + +

    The main data entities involved were users and cards. User entities were created upon registration and after a card has been design, a card entity containing all info would be mapped 1-1 to the user.

    + +

    The web tool for designing cards creates + updates card info, whereas the AR mobile view pulls cards info and presents it with the aid of 8th Wall Engine and AR.js.

    + +

    The backend piece of the app also leveraged Stripe.js for creating and managing order entities, as well as processing payments.

    + +

    Lessons upon shutting down the product

    + +

    We shut down the product as we failed to acquire and retain sufficient users to maintain the costs of cloud hosting and membership to the 8th Wall AR engine. We learned that the AR technology in a product like ours is not reliable enough for mass adoption yet:

    + +
      +
    1. +

      One of the biggest obstacles we faced in retaining users concerned the usability aspect of the AR experience within the card. Perhaps it was obvious to our team how QR codes are scanned, but we learned the hard way that a large percentage of smart phone users are not familiar with QR code scanning. On top of this, we received some reports from people running old versions of Android OS that some phones did not have a QR code scanner built in, which led to some friction in people having to download a seperate QR scanner app.

      +
    2. +
    3. +

      Some users living in regions with slow mobile connectivity were not satisfied with the long delay times in video content appearing on the AR app.

      +
    4. +
    5. +

      There were a few instances of people using the AR app on smartphones without a built in accelerometer, which made the AR experience un-usable.

      +
    6. +
    + +

    On the sales side, there are some aspects we could have definitely improved on to improve user acquisition and retention, including the use of marketing channels like Web Ads, SEO optimization, and directly contacting businesses.

    + +

    Given the option to start the project again from zero, I would use these key learnings to better focus on getting more users to pre-order prior to building the product, invest in sales channels, and get a sense of the defect rate for the product prior to a production release.``

    + +
    + + + + +
    + +
    +
    +
    +
    + + + + + + + diff --git a/_site/tech/2021/03/18/VanBuild.html b/_site/tech/2021/03/18/VanBuild.html new file mode 100644 index 0000000..63c492b --- /dev/null +++ b/_site/tech/2021/03/18/VanBuild.html @@ -0,0 +1,606 @@ + + + + + + + + + + RAM Promaster Van mobile home conversion + + + + + + + + + + + + + + + + + + +
    + +
    +
    Ed Nunez
    +
    +
    +
    software developer by day . runner by night . amateur musician whatever time is left
    +
    +
    + +
    + + +
    +
    +
    + +
    +

    RAM Promaster Van mobile home conversion

    +
    +
    +
    + +
    +

    Between November of 2020 and May 2021, I dedicated most of my time to building my dream home of wheels. It has been a labor of love and patience putting this together from CAD modeling every structure to materializing the build with carpentry work. Although my background is more aligned to software engineer and I no prior building/carpentry experience, this project is one of the proudest feats I’ve accomplished.

    + +

    Van pic

    + +

    Van exterior

    + +

    It’s taught me that anything can be learned and mastered with enough patience and time.

    + +

    It’s taught me how to be resourceful with my time, limited set of tools, and how to make things work when all I had at times were awkwardly-shaped scrap piles of materials.

    + +

    But probably most importantly, it’s brought me the confidence to build anything I can design and plan for.

    + +

    Space design

    + +

    I designed the space with an open floor layout in mind. I wanted the space to feel spacious and spread out. Despite having seen many conversions on the internet with ample countertop space on both sides on the vehicle, I thought it was worthwhile to dedicate a small space for the countertop to open space for a two-couch seating area and my bed.

    + +

    CAD models

    + +

    Finding ways to make the space functional and multi-use was also key. I designed my bed to fold up into a couch so I can watch movies projected on the curtains around the cab. A pull-out table was also built for dining and working, and can be stashed away when not in use.

    + +

    Table and couch

    + +

    Electrical

    + +

    For my electrical setup I decided to go with the following main components:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      
    Battery2X Expert Power 100Ah Lithium Batteries
    Solar panels3X HQST 100 Watt Monocrystalline Solar Panels
    Solar Charge ControllerEPEVER 40A MPPT unit
    Alternator to House Battery ChargerSterling 60A DC DC unit
    InverterAmpeak 1000W Inverter
    + +


    + +

    All of these components were wired with fuses or breakers within each lines, ultimately allowing me to consume power via my Ampeak inverter (120W AC outlets) or to my regular 12V DC appliances.

    + +

    Circuit diagram

    + +

    I decided to invest on lithium batteries over AGM for their ~4X total lifecycle count, 2X usable capacity, and 1/4 the weight despite their 4X price tag. I wanted to make sure I can reliably get 200Ah@12V of capacity to fuel me through several days off grid without worrying about cloudy weather making a dip in solar charging power.

    + +

    I found 300 Watts of solar appropiate for keeping up with my energy usage, which I estimated to be appropiate by checking my expected daily Watt-Hour consumption against a total amount of Watt-Hours of charge provided by 300W of solar on 8 hours of sunlight. The solar output is modulated to a 14V output to charge the batteries with the EPEVER 40A MPPT unit.

    + +

    Solar setup

    + +

    The main DC appliances I used were:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PartAmp draw in normal/average operation
    6X Puck Lights1.66A
    Chinese Diesel Heater1.25A
    Fridge1.66A
    Maxxair Ceiling fan0.6A
    12V cigarette style + USB sockets2.4A
    Electric water pump0.7A
    Toilet vent fan (just a 120mm computer fan)0.15A
    + +

    As for AC appliances, I will use my 800W Iron Ren kettle to make boil water for coffee every morning and charge my laptop for a few hours on occasion.

    + +

    Insulation and framing

    + +

    All I had was a bare metal chassis when the van was purchased. This meant a need for an insulated foundation prior to laying down walls, floors, and furniture that make up the space.

    + +

    I decided to use 3M Thinsulate to insulate the walls and ceiling as this material for its extreme ease of application, doesn’t off gas and it can be easily stuffed on all the hard to reach nooks and crannies.

    + +

    Picture of insulation

    + +

    The floor however, needed to be insulated with a rigid material in order to install a rigid plywood sublfloor on top. I used some 1/2” thick XPS rigid board on top of the floor’s bare metal, and then laid down 1/2” thick Baltic Birch plywood on top of the XPS as per the Faroutride Floor Installation Guide.

    + +

    Picture of floor

    + +

    Framing the van came down to bolting down 1/2” thick Baltic Birch plywood pieces cut into 3” wide strips where possible, with cross members simply fastened with Kreg jig holes and screws. The bolted members were fastened into the van chassis by drilling holes + placing rivnuts in the chassis. The only distinct framing member from the rest were two 2x6 studs that were bolted on the wall to serve as the bed base support, as I needed a strong foundation to mount some steel beams that made up the bed base.

    + +

    Picture of framing +Picture of bed

    + +

    Outer layers and furnishings

    + +

    For walls, I nailed down 1/2” thick shiplap I purchased from Home Depot into the framing members.

    + +

    For the ceiling and back doors, I used 3/4” thick pine tongue and groove panels from Home Depot, staining them with a 1/2 and 1/2 mixture of Minwax Pickled Oak and Minwax Provincial.

    + +

    The floor layer consists of 1/2” thick baltic birch plywood pieces laid down flat on top of the XPS insulation layer. Other than adhesion to the XPS, I didn’t use any fastening method and the floor seems to be sturdy and stable. I then used a vinyl sheet layer adhered to the plywood.

    + +

    As far as furniture goes, I was a bit intimidated with carpentry work at first but I built up my skills by working on dummy projects prior to the build, like building a garage workbench and a bookshelf. The Ankeney Van Builds youtube channel was a great resource I followed for designing and building couches, kitchen countertop, and overhead cabinets. The only pre-built piece of furniture I got was a kitchen cabinet I purchased at IKEA, given the dimensions for it worked out to be almost identical to my CAD model.

    + +

    Interior pictures

    + +

    Garage picture

    + +

    Water system

    + +

    I followed the water system design laid out on this Faroutride guide. The setup is simple. No hot water. No showers. Just a 20 Gallon tank from Class A Customs routed to my sink using 1/2” thick PEX tubing (with 12V DC pump somewhere on that PEX line). Sink drain is routed to a 7 gallon aquatainer that I dump out twice a week.

    + +

    Cooking / Kitchen

    + +

    This one is extra simple. I’m using a portable 2 burner propane stove from Camplux to cook some of my meals. The stove is hooked up to refillable 1 lb propane bottles. I keep three of these bottles around and refill them every ~2 months. This setup works for me because I only cook with the stove once at the end of day, and some days I’ll even skip cooking and eat raw veggies / nuts / fruits. The 800W Iron Ren kettle gets me through the morning for oatmeal and coffee.

    + +

    Cooking once a day means I can stash away the portable stove when not in use to make room for countertop space. I’m also happy with the choice of not going for a big 20 lb propane tank as I don’t have to use up dedicated space for this large tank. The little refillable propane bottles get me through for a long time.

    + +
    + + + + +
    + +
    +
    +
    +
    + + + + + + +