From 73734e273c5a833e897d5fa05a8e69197588bcd1 Mon Sep 17 00:00:00 2001 From: Tyrel Souza Date: Sun, 16 Oct 2022 23:02:04 -0400 Subject: [PATCH] first commit --- .gitignore | 1 + content/2011-12-21_python-progress-bar.rst | 3 +- content/2012-01-05_custom-django-urlfield.rst | 3 +- ...2012-01-13_you-can-un-expire-a-gpg-key.rst | 3 +- .../2012-02-08_vertical_bars_in_graphite.rst | 15 ++++++++++ content/2012-02-17_hubspot.rst | 25 ++++++++++++++++ content/2012-03-08_some-bash-tips.rst | 3 +- content/2012-05-04_ganymede_twilio.rst | 20 +++++++++++++ content/2012-05-07_hypertherm.rst | 27 +++++++++++++++++ content/2012-05-25_harry-delmolino.rst | 1 + ...-11-07_cfengine3-install-on-centos-5-7.rst | 1 + ...07-02_getting-started-in-python-part-1.rst | 3 +- ...o-many-django-manytomany-queries-fixed.rst | 3 +- ...t_save-in-django-but-still-modify-data.rst | 3 +- content/2014-06-21_readline.rst | 28 ++++++++++-------- content/2014-10-01_first_day_java_college.rst | 20 +++++++++++++ content/2015-01-09_ssh-agent-on-boot.rst | 3 +- content/2015-01-13_python-debugger.rst | 3 +- content/2015-01-28_too-many-open-files.rst | 3 +- content/2021-10-31_hello-world.rst | 2 +- ...python3-github-cli-tool-as-a-refresher.rst | 3 +- ...2021-11-05_finished-my-github-cli-tool.rst | 3 +- ...-11-11_postmortem-of-a-fun-couple-bugs.rst | 7 +++-- content/2022-01-09_garage-door-opener.rst | 3 +- content/2022-05-07_an-update-on-flying.rst | 1 + ...-co2-tank-in-a-lab-with-a-raspberry-pi.rst | 3 +- content/2022-10-13_scrollbar-colors.rst | 1 + content/2022-10-16_pelican.rst | 21 +++++++++++++ content/images/2012-02-08_graphite_menu.png | Bin 0 -> 31383 bytes content/pages/contact.rst | 12 ++++++++ pelicanconf.py | 16 ++++++---- publishconf.py | 4 +-- requirements.txt | 21 +++++++++++++ 33 files changed, 227 insertions(+), 38 deletions(-) create mode 100644 content/2012-02-08_vertical_bars_in_graphite.rst create mode 100644 content/2012-02-17_hubspot.rst create mode 100644 content/2012-05-04_ganymede_twilio.rst create mode 100644 content/2012-05-07_hypertherm.rst create mode 100644 content/2014-10-01_first_day_java_college.rst create mode 100644 content/2022-10-16_pelican.rst create mode 100644 content/images/2012-02-08_graphite_menu.png create mode 100644 content/pages/contact.rst create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore index dc060df..b819503 100644 --- a/.gitignore +++ b/.gitignore @@ -166,3 +166,4 @@ cython_debug/ # End of https://www.toptal.com/developers/gitignore/api/python +output/ diff --git a/content/2011-12-21_python-progress-bar.rst b/content/2011-12-21_python-progress-bar.rst index fbba6e2..7a96038 100644 --- a/content/2011-12-21_python-progress-bar.rst +++ b/content/2011-12-21_python-progress-bar.rst @@ -2,7 +2,8 @@ Python Progress Bar ################### :date: 2011-12-21 03:52 :author: tyrel -:category: Python +:category: Tech +:tags: Python :slug: python-progress-bar :status: published diff --git a/content/2012-01-05_custom-django-urlfield.rst b/content/2012-01-05_custom-django-urlfield.rst index 9aa7455..5281d59 100644 --- a/content/2012-01-05_custom-django-urlfield.rst +++ b/content/2012-01-05_custom-django-urlfield.rst @@ -2,7 +2,8 @@ Custom Django URLField ###################### :date: 2012-01-05 03:55 :author: tyrel -:category: Python +:category: Tech +:tags: python, django :slug: custom-django-urlfield :status: published diff --git a/content/2012-01-13_you-can-un-expire-a-gpg-key.rst b/content/2012-01-13_you-can-un-expire-a-gpg-key.rst index 905eabd..b053b84 100644 --- a/content/2012-01-13_you-can-un-expire-a-gpg-key.rst +++ b/content/2012-01-13_you-can-un-expire-a-gpg-key.rst @@ -2,7 +2,8 @@ You can un-expire a GPG key. ############################ :date: 2012-01-13 03:54 :author: tyrel -:category: Linux +:category: Tech +:category: linux, gpg :slug: you-can-un-expire-a-gpg-key :status: published diff --git a/content/2012-02-08_vertical_bars_in_graphite.rst b/content/2012-02-08_vertical_bars_in_graphite.rst new file mode 100644 index 0000000..0701cc5 --- /dev/null +++ b/content/2012-02-08_vertical_bars_in_graphite.rst @@ -0,0 +1,15 @@ +Vertical Bars In Graphite +######################### +:date: 2012-02-08 15:10 +:author: tyrel +:category: Tech +:tags: graphite, txStatsD +:slug: vertical-bars-in-graphite +:status: published + +I am working with txStatsD and Graphite. I was having the hardest problem looking through the txStatsD code today finding how to graph something as an event, not a data point. I eventually went into every option on the graphite dashboard and found an option to make a bar. + +.. figure:: {static}/images/2012-02-08_graphite_menu.png + :alt: menu in graphite showing draw nonzero as infinite + +This is the option that you must use when you want to mark events. For example we want to know “Server restarted”, we would use this technique, as it doesn’t make sense to aggregate “server restarted”. Using nonzero as infinite is a good way to show an event took place. diff --git a/content/2012-02-17_hubspot.rst b/content/2012-02-17_hubspot.rst new file mode 100644 index 0000000..053857c --- /dev/null +++ b/content/2012-02-17_hubspot.rst @@ -0,0 +1,25 @@ +Hubspot +####### +:date: 2012-02-17 15:10 +:author: tyrel +:category: Personal +:tags: hackathon +:slug: hubspot +:status: published + +I was invited to a Hackathon that one of our client’s client was throwing. Being that I love programming and learning, I decided I would go. + +The event was in Cambridge, MA. I arrive early, (my friend said there would be a lot more traffic than there was at that time of day) so I got a tour of office. It’s situated in an old, what I believe to be, factory building. The coolest part of the office was that they had whiteboard paint on every wall surface, complete with markers of course. + +The event started and people who were attending had tossed up ideas on the white board. A couple people wanted to integrate LinkedIN with HubSpot. Another person wanted to integrate Eventbrite with HubSpot, to get information to/from event goers after the event ends. I didn’t like any of those ideas and my only experience with HubSpot is their Leads API, so I stuck to what I know. + +I had an idea for an app the second I walked in the door, it was like magic. My main hassle was that HubSpot’s Canvas integration REQUIRES HTTPS. Now, my web host is DreamHost and I am kind of cheap, so of course I don’t have any way to host a HTTPS site immediately. A big part of me wanted to bite the bullet and order a secure server from DreamHost, or setup another linode, but I felt that I’ve been spending a lot of money lately and that I would figure out a way. Adrian, my contact at HubSpot, of who I am working with on the PPC project(more on that later), walked by and saved me. + +He asked if I had ever used GoogleAppEngine. Of course I hadn’t because I was under the belief that it cost money to use, but then I realized I was thinking of Amazon’s EC2. I sign up for GAE and within an hour I have a HelloWorld site setup. The slow part was installing Python2.5 so I could use the same version that GAE used and not have to fix a lot of backwards compatibility errors between 2.5->2.7. + +After I had a site up that could do HTTPS I dove into programming for my HubSpot app. The app I am doing for work graphs leads per day combined with Google AdWords data per day. I decided to do something different. My app is still a graph, as graphs are fun and easy to understand by everyone. + +This app graphs a set of leads and shows how many leads happened in a given hour for the previous day. Given extra time I would have added an interface to specify the day to graph leads, but last night my time was severely limited by the fact that I had to setup my environment for GoogleAppsEngine. + +Improvements I can and want to do to this app are database, faster processing, and being able to select a date. I almost wanted to break down and learn NodeJS for this, because from my understanding of the event driven nature of NodeJS would be a lot easier to load data over a longer period of time, than to just load it all at once and timeout with HubSpot’s Jakarta Commons-HttpClient. + diff --git a/content/2012-03-08_some-bash-tips.rst b/content/2012-03-08_some-bash-tips.rst index 7e2e73f..da79347 100644 --- a/content/2012-03-08_some-bash-tips.rst +++ b/content/2012-03-08_some-bash-tips.rst @@ -2,7 +2,8 @@ Some BASH tips ############## :date: 2012-03-08 03:56 :author: tyrel -:category: Linux +:category: Tech +:tags: bash, linux :slug: some-bash-tips :status: published diff --git a/content/2012-05-04_ganymede_twilio.rst b/content/2012-05-04_ganymede_twilio.rst new file mode 100644 index 0000000..563dcae --- /dev/null +++ b/content/2012-05-04_ganymede_twilio.rst @@ -0,0 +1,20 @@ +Ganymede, Twilio +################ +:date: 2012-05-04 23:30 +:author: tyrel +:category: Tech +:tags: nodejs, twilio +:slug: ganymede-twilio +:status: published + +Last night I wrote the beginnings of my first NodeJS application. Is application even the correct word? + +I’ve been meaning to try out the cool API by Twilio, which is used for SMS and VoiceCalling. I decided to design a system that will be two+ endpoints. One is the main server which will listen for UDP messages. When it receives the correct UDP message, configured in the config(`konphyg `_) files, it will fire off a message to Twilio and send me a text message. + +The next steps, which I should be getting to tonight, are to create the Arduino portion and the serial listener. The Arduino will have a button that will send a message over serial to another NodeJS listener. This will decide if the press was good enough, if it passes the debouncing filter, and then fire a message to the main Ganymede server. + +This could be used as a little text message doorbell for when you have your music on too loud. I don’t believe I will ever sell this, as it’s just for me to get into NodeJS, but It would be fun to share with friends. + +The source so far is located on my github at [DEADLINK]. + +I will write more as the project continues about the different technologies and comment on my choices in the source a little bit. diff --git a/content/2012-05-07_hypertherm.rst b/content/2012-05-07_hypertherm.rst new file mode 100644 index 0000000..314bb99 --- /dev/null +++ b/content/2012-05-07_hypertherm.rst @@ -0,0 +1,27 @@ +Hypertherm +########## +:date: 2012-05-07 23:30 +:author: tyrel +:category: Personal +:slug: hypertherm +:status: published + +For the past three months I have been upgrading and rewriting version 2 of my software for Hypertherm. I am under a contract for my father’s company. His company is developing a machine to test how well air flows (laminar flow) through a plasma cutting torch head, and how much air leaks out over a certain time (delta pressure loss). + +This has been a nice adventure. I am talking to the tester over serial, reading in a hand scanner (barcodes and acts as a keyboard easy), talking to a DYMO printer and using a database. + +The serial communication was pretty straightforward. I started a new thread and listen for serial all the time. The tricky part with that was that because it was on another thread, I needed a delegate to talk to my UI when I did things like change the picture from blank to a big red X, or update a label. + +The hand scanner wasn’t even a factor that took longer than 10 minutes, I just pop up a dialog box asking for input. + +The DYMO printer was the hardest part. This took me a month to figure out, I kept fighting with the printer. I could figure out how to print to the left roll, the ones we setup as as the passing labels, but I couldn’t for the life of me figure out how to get it to print to the right label, using a custom label. I tried to load the labels into data and use a StreamWriter/StreamReader object to treat that as the label, but it kept printing one that had, for reasons unknown to me, been locked into the printer. I finally gave up on using the interface they provided and am writing the label to a temporary file. The file is in the user’s %appdata% directory in a sub directory that it will not be mistakenly written to, so I feel safe doing it this way. Granted, the machine is a single purpose machine, once this program is installed it will only run this program day and night. + +Once I got the printer working, I checked it in to github and realized it took me way longer than anticipated. I learned a lot about .NET development (by no means everything, or even most things, just a lot compared to what I did know before [nothing].) + +Tonight while developing I decided to video some aspects of the Program. + +The following four links are videos, showing parts of the program and machine in action. + +* [Hosted on Qik - no longer available] +* [Hosted on Qik - no longer available] +* [Hosted on Qik - no longer available] \ No newline at end of file diff --git a/content/2012-05-25_harry-delmolino.rst b/content/2012-05-25_harry-delmolino.rst index 932269b..a9efbca 100644 --- a/content/2012-05-25_harry-delmolino.rst +++ b/content/2012-05-25_harry-delmolino.rst @@ -3,6 +3,7 @@ Harry Delmolino :date: 2012-05-25 03:56 :author: tyrel :category: Personal +:tags: friends :slug: harry-delmolino :status: published diff --git a/content/2012-11-07_cfengine3-install-on-centos-5-7.rst b/content/2012-11-07_cfengine3-install-on-centos-5-7.rst index ffa9ad0..c24bfba 100644 --- a/content/2012-11-07_cfengine3-install-on-centos-5-7.rst +++ b/content/2012-11-07_cfengine3-install-on-centos-5-7.rst @@ -3,6 +3,7 @@ CFEngine3 Install on CentOS 5.7 :date: 2012-11-07 03:57 :author: tyrel :category: outdated +:tags: cfengine, centos :slug: cfengine3-install-on-centos-5-7 :status: published diff --git a/content/2013-07-02_getting-started-in-python-part-1.rst b/content/2013-07-02_getting-started-in-python-part-1.rst index a15136e..078ba55 100644 --- a/content/2013-07-02_getting-started-in-python-part-1.rst +++ b/content/2013-07-02_getting-started-in-python-part-1.rst @@ -2,7 +2,8 @@ Getting started in Python Part 1 ################################ :date: 2013-07-02 03:59 :author: tyrel -:category: Python +:category: Tech +:tags: python2, pip, virtualenv :slug: getting-started-in-python-part-1 :status: published diff --git a/content/2013-08-06_help-i-have-too-many-django-manytomany-queries-fixed.rst b/content/2013-08-06_help-i-have-too-many-django-manytomany-queries-fixed.rst index 60d0457..d1fc833 100644 --- a/content/2013-08-06_help-i-have-too-many-django-manytomany-queries-fixed.rst +++ b/content/2013-08-06_help-i-have-too-many-django-manytomany-queries-fixed.rst @@ -2,7 +2,8 @@ Help, I have too many Django ManyToMany Queries [FIXED] ####################################################### :date: 2013-08-06 04:00 :author: tyrel -:category: Python +:category: Tech +:tags: python, django, bugs :slug: help-i-have-too-many-django-manytomany-queries-fixed :status: published diff --git a/content/2013-11-13_how-to-not-trigger-a-post_save-in-django-but-still-modify-data.rst b/content/2013-11-13_how-to-not-trigger-a-post_save-in-django-but-still-modify-data.rst index 7a51e1b..fe989a0 100644 --- a/content/2013-11-13_how-to-not-trigger-a-post_save-in-django-but-still-modify-data.rst +++ b/content/2013-11-13_how-to-not-trigger-a-post_save-in-django-but-still-modify-data.rst @@ -2,7 +2,8 @@ How to not trigger a post_save in Django, but still modify data. ################################################################ :date: 2013-11-13 03:58 :author: tyrel -:category: Django +:category: Tech +:tags: django, python :slug: how-to-not-trigger-a-post_save-in-django-but-still-modify-data :status: published diff --git a/content/2014-06-21_readline.rst b/content/2014-06-21_readline.rst index 9334541..2179803 100644 --- a/content/2014-06-21_readline.rst +++ b/content/2014-06-21_readline.rst @@ -2,7 +2,8 @@ Readline ######## :date: 2014-06-21 04:01 :author: tyrel -:category: Linux +:category: Tech +:tags: readline, linux, cli :slug: readline :status: published @@ -12,29 +13,30 @@ Let me first backup and explain what Readline is. From the GNU Readline Document Here are a couple of the commands I use daily: + Movement ~~~~~~~~ -- To move to the beginning of a line, you press **^a** :sup:` ` `note: 1 <#sup1>`__ -- To move to the end of a line you press **^e** +- To move to the beginning of a line, you press **C-a** +- To move to the end of a line you press **C-e** Killing and Yanking ~~~~~~~~~~~~~~~~~~~ -- To cut the rest of the line from where your cursor is, to the end, you press **^k** -- To delete one word you press **^w** -- To paste either of the two previous back you can press **^y** +- To cut the rest of the line from where your cursor is, to the end, you press **C-k** +- To delete one word you press **C-w** +- To paste either of the two previous back you can press **C-y** Miscellaneous ~~~~~~~~~~~~~ -- To clear the screen and get to a fresh start, you can press **^l** -- To end your session you can send a **^d** (This will send an end of file character) -- To search for a command you typed recently, press **^r** and start typing, it will search backwards. **^r** again will search for an earlier match. -- The inverse of **^r ** is **^s**, they function the same. +- To clear the screen and get to a fresh start, you can press **C-l** +- To end your session you can send a **C-d** (This will send an end of file character) +- To search for a command you typed recently, press **C-r** and start typing, it will search backwards. **C-r** again will search for an earlier match. +- The inverse of **C-r ** is **C-s**, they function the same. -Finally, don’t forget about **^c**. While not specifically Readline, it’s very useful because it sends the SIGINT signal to the program, which if just on the command line, will not execute the line you have type, and give you a new line with nothing on it. A nice clean start. +Finally, don’t forget about **C-c**. While not specifically Readline, it’s very useful because it sends the SIGINT signal to the program, which if just on the command line, will not execute the line you have type, and give you a new line with nothing on it. A nice clean start. + +To find out a lot more, read the documentation at `the Readline Commands Docs `__ I even learned some things while writing this up, apparently pressing **C-x $** will list off all the possible usernames. Good to know, and good to always keep learning. -To find out a lot more, read the documentation at `the Readline Commands Docs `__ I even learned some things while writing this up, apparently pressing **^x $** will list off all the possible usernames. Good to know, and good to always keep learning. -*1* `#sup1-back <#sup1-back>`__ *Also, if you are unaware, the convention I use is ^ to represent control, the documentation on Readline uses C- representing the same thing.* diff --git a/content/2014-10-01_first_day_java_college.rst b/content/2014-10-01_first_day_java_college.rst new file mode 100644 index 0000000..167f9b9 --- /dev/null +++ b/content/2014-10-01_first_day_java_college.rst @@ -0,0 +1,20 @@ +First day back in Java since college +#################################### +:date: 2014-10-01 04:03 +:author: tyrel +:category: Tech +:tags: java +:slug: java-2014 +:status: published + +Recently I decided I wanted to learn Java again. I last programmed in Java when I was in College and that was the main language they taught in. I wouldn’t say I was a great Java developer, although I completed every Java course well enough to get an A or better. + +I want to relearn Java because for the past four years I have primarily focused on Python. While it is a great language, I feel I need a change from what I’m focusing on now with primarily web based programming. + +I decided to refresh myself with Java and read a “Java for Python developers” guide, which was a great refresher. After that I sat around wondering what to program, inspiration wasn’t coming quickly. I settled on a SSH Configuration Manager, which is something I’ve wanted for a while now. + +This Configuration Manager will read in your ~/.ssh/config files, and show you what hosts you have in a GUI interface. The great part of it will be that you can also create new ssh configurations, without having to remember every little detail. There will be a lot of help tooltips, and pre-fills as well. I have a pretty basic idea of what I want it to look like. Ideally a list on the far left with +/- buttons to add a new Host, and to the right of that will be another hierarchy list of all the key groups you can change, with the most common (that I or people I talk to) being in a “General” or “Common” list. To the right of that will be the actual keys and values you change. I think I would like to be able to “favorite” keys that you use frequently. This way when you create a new host entry, you can quickly fill out your usual configurations be it only adding an IdentityFile and User. Another feature I thought of would be copying/templating, for example being able to create a new “work based server” configuration by just copying one you already have. + +Some of the options will be a bit tricky, a couple of them are along the lines of allowing “yes”, “no”, “ask”, or an integer, and I haven’t figured out exactly how I want to manage that yet. + +Currently I have a model that only has getters/setters and toString support, there’s a lot of them so it’s already a 1050 line file last I checked. Next time I work on this project I want to start with data validation and learning how to write tests in Java. I think learning good BDD or TDD habits while learning a “new” language would definitely benefit me. \ No newline at end of file diff --git a/content/2015-01-09_ssh-agent-on-boot.rst b/content/2015-01-09_ssh-agent-on-boot.rst index 13aff6c..0b507dc 100644 --- a/content/2015-01-09_ssh-agent-on-boot.rst +++ b/content/2015-01-09_ssh-agent-on-boot.rst @@ -2,7 +2,8 @@ SSH Agent on “boot” ################### :date: 2015-01-09 04:03 :author: tyrel -:category: Linux +:category: Tech +:tags: linux, ssh :slug: ssh-agent-on-boot :status: published diff --git a/content/2015-01-13_python-debugger.rst b/content/2015-01-13_python-debugger.rst index cf6ec75..ca24ca7 100644 --- a/content/2015-01-13_python-debugger.rst +++ b/content/2015-01-13_python-debugger.rst @@ -2,7 +2,8 @@ Python Debugger ############### :date: 2015-01-13 04:02 :author: tyrel -:category: Python +:category: Tech +:tags: python, pdb :slug: python-debugger :status: published diff --git a/content/2015-01-28_too-many-open-files.rst b/content/2015-01-28_too-many-open-files.rst index abea357..7c364d2 100644 --- a/content/2015-01-28_too-many-open-files.rst +++ b/content/2015-01-28_too-many-open-files.rst @@ -2,7 +2,8 @@ Too many open files ################### :date: 2015-01-28 04:02 :author: tyrel -:category: Python +:category: Tech +:tags: python, linux, ulimit, bugs :slug: too-many-open-files :status: published diff --git a/content/2021-10-31_hello-world.rst b/content/2021-10-31_hello-world.rst index 1b0dfba..f56a0c8 100644 --- a/content/2021-10-31_hello-world.rst +++ b/content/2021-10-31_hello-world.rst @@ -2,7 +2,7 @@ Hello, world! ############# :date: 2021-10-31 19:10 :author: tyrel -:category: Hello +:category: Blog :slug: hello-world :status: published diff --git a/content/2021-11-04_python3-github-cli-tool-as-a-refresher.rst b/content/2021-11-04_python3-github-cli-tool-as-a-refresher.rst index 54cc0e1..5676fad 100644 --- a/content/2021-11-04_python3-github-cli-tool-as-a-refresher.rst +++ b/content/2021-11-04_python3-github-cli-tool-as-a-refresher.rst @@ -2,7 +2,8 @@ Python3 GitHub CLI tool as a refresher ###################################### :date: 2021-11-04 01:29 :author: tyrel -:category: Python +:category: Tech +:tags: python, cli :slug: python3-github-cli-tool-as-a-refresher :status: published diff --git a/content/2021-11-05_finished-my-github-cli-tool.rst b/content/2021-11-05_finished-my-github-cli-tool.rst index 6caa006..5eefe9b 100644 --- a/content/2021-11-05_finished-my-github-cli-tool.rst +++ b/content/2021-11-05_finished-my-github-cli-tool.rst @@ -2,7 +2,8 @@ Finished my GitHub CLI tool ########################### :date: 2021-11-05 00:08 :author: tyrel -:category: Python +:category: Tech +:tags: python, cli :slug: finished-my-github-cli-tool :status: published diff --git a/content/2021-11-11_postmortem-of-a-fun-couple-bugs.rst b/content/2021-11-11_postmortem-of-a-fun-couple-bugs.rst index 8cd59d9..d70f0de 100644 --- a/content/2021-11-11_postmortem-of-a-fun-couple-bugs.rst +++ b/content/2021-11-11_postmortem-of-a-fun-couple-bugs.rst @@ -2,7 +2,8 @@ Postmortem of a fun couple bugs ############################### :date: 2021-11-11 14:55 :author: tyrel -:category: Go +:category: Tech +:tags: Go, dbus, bugs :slug: postmortem-of-a-fun-couple-bugs :status: published @@ -10,7 +11,7 @@ Story at my previous job: Tieg: Hey Tyrel, I can't run ``invoke sign 5555``, can you help with this? -This is How my night started last night at 10pm. My coworker Tieg did some work on our `CLI `__ project and was trying to release the latest version. We use `invoke `__ to run our code signing and deployment scripts, so I thought it was just a quick "oh maybe I screwed up some python!" fix. It wasn't. +This is How my night started last night at 10pm. My coworker Tieg did some work on our `CLI `_ project and was trying to release the latest version. We use `invoke `_ to run our code signing and deployment scripts, so I thought it was just a quick "oh maybe I screwed up some python!" fix. It wasn't. I spent from 10:30 until 1:30am this morning going through and looking into why Tieg wasn't able to sign the code. The first thing I did was re-run the build on CircleCI, which had the same error, so hey! at least it was reproducible. The problem was that in our Makefile scripts we run ``tidelift version > tidelift-cli.version`` and then upload that to our deployment directories, but this was failing for some reason. We let clients download this file to see what the latest version is and then our CLI tool has the ability to selfupdate (except on homebrew) to pull this latest version if you're outdated. @@ -22,7 +23,7 @@ Pumped about this new revelation, I started looking at our ``keychain`` dependen Would you know it, the problem was elsewhere. Tieg was running ``dtruss`` and saw that one time it was checking his ``/etc/hosts`` file when it was failing, and another time it was NOT, which was passing. Then pointed out a 50ms lookup to our ``download.tidelift.com`` host. -Tieg then found https://github.com/golang/go/issues/49517 this issue where someone mentions that Go 1.17.3 was failing them for net/http calls, but not the right way. +Tieg then found `Issue 49517 `_ this issue where someone mentions that Go 1.17.3 was failing them for net/http calls, but not the right way. It turns out, that it wasn't the keyring stuff, it wasn't the *technically* the version calls that failed. What was happening is every command starts with a check to https://download.tidelift.com/cli/tidelift-cli.version which we then compare to the current running version, if it's different and outdated, we then say "you can run selfupdate!". What fails is that call to download.tidelift.com, because of compiling with go1.17.3 and a ``context canceled`` due to stream cleanup I guess? diff --git a/content/2022-01-09_garage-door-opener.rst b/content/2022-01-09_garage-door-opener.rst index de854e9..4b20e78 100644 --- a/content/2022-01-09_garage-door-opener.rst +++ b/content/2022-01-09_garage-door-opener.rst @@ -2,7 +2,8 @@ Garage Door Opener ################## :date: 2022-01-09 22:46 :author: tyrel -:category: HomeAssistant +:category: Tech, +:tags: HomeAssistant, home :slug: garage-door-opener :status: published diff --git a/content/2022-05-07_an-update-on-flying.rst b/content/2022-05-07_an-update-on-flying.rst index d0feed7..9523593 100644 --- a/content/2022-05-07_an-update-on-flying.rst +++ b/content/2022-05-07_an-update-on-flying.rst @@ -3,6 +3,7 @@ An Update On Flying :date: 2022-05-07 01:15 :author: tyrel :category: Personal +:tags: flying :slug: an-update-on-flying :status: published diff --git a/content/2022-06-02_2016-monitoring-a-co2-tank-in-a-lab-with-a-raspberry-pi.rst b/content/2022-06-02_2016-monitoring-a-co2-tank-in-a-lab-with-a-raspberry-pi.rst index 151d385..0f3b468 100644 --- a/content/2022-06-02_2016-monitoring-a-co2-tank-in-a-lab-with-a-raspberry-pi.rst +++ b/content/2022-06-02_2016-monitoring-a-co2-tank-in-a-lab-with-a-raspberry-pi.rst @@ -2,7 +2,8 @@ ####################################################### :date: 2022-06-02 16:54 :author: tyrel -:category: Linux +:category: Tech +:tags: Linux, raspberrypi :slug: 2016-monitoring-a-co2-tank-in-a-lab-with-a-raspberry-pi :status: published diff --git a/content/2022-10-13_scrollbar-colors.rst b/content/2022-10-13_scrollbar-colors.rst index ece3033..eaf18f9 100644 --- a/content/2022-10-13_scrollbar-colors.rst +++ b/content/2022-10-13_scrollbar-colors.rst @@ -3,6 +3,7 @@ Scrollbar Colors :date: 2022-10-13 12:07 :author: tyrel :category: Website +:tags: css :slug: scrollbar-colors :status: published diff --git a/content/2022-10-16_pelican.rst b/content/2022-10-16_pelican.rst new file mode 100644 index 0000000..7f426af --- /dev/null +++ b/content/2022-10-16_pelican.rst @@ -0,0 +1,21 @@ +New Blog - Pelican! +################### +:date: 2022-10-16 23:30 +:author: tyrel +:category: Blog +:tags: python, pelican +:slug: pelican-new-blog +:status: published + +If you have read the previous post, and then looked at this one, there are a LOT of changes that happened. +I was recently exploited and had ``heysrv.php`` files everywhere, so I have decided to forego wordpress for now. +I am now using `Pelican `_! + +It's very sleek, and only took me a few hours to port my Wordpress export to Pelican reStructuredText format. + +All I have to do is run ``invoke publish`` and it will be on the server. +No PHP, no database. +All files properly in their right places. + + + diff --git a/content/images/2012-02-08_graphite_menu.png b/content/images/2012-02-08_graphite_menu.png new file mode 100644 index 0000000000000000000000000000000000000000..74ac64a8bd8dfd541d8998e105f5dd3ad69bf0c2 GIT binary patch literal 31383 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 + diff --git a/pelicanconf.py b/pelicanconf.py index df5e209..c924f89 100644 --- a/pelicanconf.py +++ b/pelicanconf.py @@ -1,10 +1,12 @@ AUTHOR = 'Tyrel Souza' SITENAME = 'Tyrel Site' -TWITTER_USERNAME = "tyrelsouza" +TWITTER_USERNAME = 'tyrelsouza' SITEURL = '' SITESUBTITLE = 'Code, Home Automation, Personal Blog' MENUITEMS = [ - ("Blog", "/") + ('Home', '/'), + ('Tags', '/tags'), + ('Categories', '/categories'), ] PATH = 'content' @@ -22,12 +24,16 @@ AUTHOR_FEED_RSS = None # Blogroll LINKS = ( ('Code', 'https://gitea.tyrel.dev/'), + ('Wiki', 'https://tyrel.website/wiki/'), + ('Flying Blog', 'https://k3tas.radio/airband/'), + ('Photos', 'https://tyrel.website/photos'), + ('LinkedIN', 'https://www.linkedin.com/in/tyrel-souza/'), ) # Social widget SOCIAL = ( - ('Twitter', 'https://twitter.com/tyrelsouza'), - ('Instagram', 'https://instagram.com/tyrelsouza'), + ('Twitter', 'https://www.twitter.com/tyrelsouza'), + ('Instagram', 'https://www.instagram.com/tyrelsouza'), ) PLUGINS = [ ] @@ -36,4 +42,4 @@ DEFAULT_PAGINATION = 10 DISPLAY_CATEGORIES_ON_MENU = False DELETE_OUTPUT_DIRECTORY = True -STATIC_PATHS = ("images",) \ No newline at end of file +STATIC_PATHS = ('images',) diff --git a/publishconf.py b/publishconf.py index be3909b..8c20b86 100644 --- a/publishconf.py +++ b/publishconf.py @@ -7,7 +7,7 @@ sys.path.append(os.curdir) from pelicanconf import * # If your site is available via HTTPS, make sure SITEURL begins with https:// -SITEURL = '' +SITEURL = 'https://tyrel.dev/pelican/' RELATIVE_URLS = False FEED_ALL_ATOM = 'feeds/all.atom.xml' @@ -18,4 +18,4 @@ DELETE_OUTPUT_DIRECTORY = True # Following items are often useful when publishing #DISQUS_SITENAME = "" -#GOOGLE_ANALYTICS = "" \ No newline at end of file +#GOOGLE_ANALYTICS = "" diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..335af5c --- /dev/null +++ b/requirements.txt @@ -0,0 +1,21 @@ +beautifulsoup4==4.11.1 +blinker==1.5 +commonmark==0.9.1 +docutils==0.19 +feedgenerator==2.0.0 +feedparser==6.0.10 +invoke==1.7.3 +Jinja2==3.1.2 +lxml==4.9.1 +Markdown==3.4.1 +MarkupSafe==2.1.1 +pelican==4.8.0 +pelican-more-categories==0.1.0 +Pygments==2.13.0 +python-dateutil==2.8.2 +pytz==2022.4 +rich==12.6.0 +sgmllib3k==1.0.0 +six==1.16.0 +soupsieve==2.3.2.post1 +Unidecode==1.3.6