first commit

This commit is contained in:
Tyrel Souza 2022-10-16 23:02:04 -04:00
parent 2ac1fc332a
commit 73734e273c
33 changed files with 227 additions and 38 deletions

1
.gitignore vendored
View File

@ -166,3 +166,4 @@ cython_debug/
# End of https://www.toptal.com/developers/gitignore/api/python
output/

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 doesnt make sense to aggregate “server restarted”. Using nonzero as infinite is a good way to show an event took place.

View File

@ -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 clients 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. Its 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 didnt 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 HubSpots Canvas integration REQUIRES HTTPS. Now, my web host is DreamHost and I am kind of cheap, so of course I dont 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 Ive 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 hadnt because I was under the belief that it cost money to use, but then I realized I was thinking of Amazons 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 HubSpots Jakarta Commons-HttpClient.

View File

@ -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

View File

@ -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?
Ive 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 <https://github.com/pgte/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 dont believe I will ever sell this, as its 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.

View File

@ -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 fathers 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 wasnt 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 couldnt 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 users %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]

View File

@ -3,6 +3,7 @@ Harry Delmolino
:date: 2012-05-25 03:56
:author: tyrel
:category: Personal
:tags: friends
:slug: harry-delmolino
:status: published

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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, dont forget about **^c**. While not specifically Readline, its 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, dont forget about **C-c**. While not specifically Readline, its 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 <http://www.gnu.org/software/bash/manual/html_node/Bindable-Readline-Commands.html>`__ 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 <http://www.gnu.org/software/bash/manual/html_node/Bindable-Readline-Commands.html>`__ 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.*

View File

@ -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 wouldnt 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 Im 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 wasnt coming quickly. I settled on a SSH Configuration Manager, which is something Ive 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 havent figured out exactly how I want to manage that yet.
Currently I have a model that only has getters/setters and toString support, theres a lot of them so its 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.

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -2,7 +2,7 @@ Hello, world!
#############
:date: 2021-10-31 19:10
:author: tyrel
:category: Hello
:category: Blog
:slug: hello-world
:status: published

View File

@ -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

View File

@ -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

View File

@ -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 <https://tidelift.com/cli>`__ project and was trying to release the latest version. We use `invoke <https://www.pyinvoke.org/>`__ 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 <https://tidelift.com/cli>`_ project and was trying to release the latest version. We use `invoke <https://www.pyinvoke.org/>`_ 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 <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.
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?

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -3,6 +3,7 @@ Scrollbar Colors
:date: 2022-10-13 12:07
:author: tyrel
:category: Website
:tags: css
:slug: scrollbar-colors
:status: published

View File

@ -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 <https://getpelican.com>`_!
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.

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

12
content/pages/contact.rst Normal file
View File

@ -0,0 +1,12 @@
Contact
#######
:date: 2022-10-15 00:00
:author: tyrel
:category: Contact
:slug: contact
:status: published
To Contact Me: `Email <mailto:email@tyrel.dev>`__

View File

@ -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",)
STATIC_PATHS = ('images',)

View File

@ -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 = ""
#GOOGLE_ANALYTICS = ""

21
requirements.txt Normal file
View File

@ -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