Monday, August 14, 2023

Balancing Growth and Engagement: A Guide to Strengthening Engineering Teams of All Skill Levels

 

Balancing Growth and Engagement: A Guide to Strengthening Engineering Teams of All Skill Levels

Introduction

Managing a team with varying skill levels can be a demanding task. The challenge is not just in assigning tasks that suit each team member's ability but also in fostering a collaborative, supportive, and stimulating environment that encourages growth and engagement. In my role as an Engineering Manager, I have had the pleasure of leading teams ranging from seasoned senior engineers to fresh and enthusiastic juniors. Here, I'll share some strategies and insights that have helped me ensure everyone feels valued, motivated, and challenged.

Recognizing Individual Strengths and Weaknesses

The first step in building a strong team is understanding each member's unique strengths and areas for growth. By conducting one-on-one meetings and encouraging open communication, you can gain insights into their career aspirations, preferred work style, and personal development goals.

Tip: Create a shared document where team members can list their strengths, interests, and areas they'd like to improve. This will not only promote self-awareness but also help in assigning projects that align with their growth path.

Implementing Tailored Career Plans

A "one size fits all" approach does not work when dealing with diverse skill levels. Tailored career plans can address this by:

  1. Setting Clear Expectations: Outline roles and responsibilities and set realistic yet challenging goals.
  2. Providing Regular Feedback: Encourage a culture where feedback flows both ways. Regular check-ins can keep everyone on track and offer opportunities for continuous improvement.
  3. Encouraging Skill-Building: Offer training sessions, workshops, or online courses to help team members sharpen their skills.

Building a Collaborative and Inclusive Team Culture

A harmonious team is one where everyone feels a part of the whole, irrespective of their skill level. Foster this by:

  1. Promoting Peer Mentoring: Encourage senior team members to mentor juniors. I once paired a senior developer with a junior one on a complex project, and their collaboration resulted not only in a successful product but also in substantial growth for the junior member.
  2. Encouraging Collaboration: Promote a culture where asking questions and seeking help is normal. Encourage team members to share their insights and work together on problems.
  3. Celebrating Successes Together: Recognize and reward individual and team achievements. It builds a sense of unity and pride within the team.

Conclusion: The Value of a Supportive Work Environment

The role of an Engineering Manager goes beyond managing tasks and deadlines. It's about creating a thriving ecosystem where each member feels engaged, valued, and challenged, regardless of their skill level.

By recognizing individual strengths and weaknesses, implementing tailored career plans, and fostering an inclusive and collaborative culture, you can ensure that every team member has the opportunity to grow and succeed.

Remember, a happy team is often a productive team. Invest time in understanding, supporting, and stimulating your team members, and you'll not only see growth in their skills but also a stronger, more cohesive team.

Note to readers: I'd love to hear your strategies and experiences in managing diverse teams. Feel free to share in the comments below!

Tuesday, August 8, 2023

How to run two different Grafana client agents on a single Linux host

Running two different Grafana client agents on a single Linux host with unique configuration files requires careful setup. Here's a step-by-step guide to achieving this, including creating two different users, one with sudo privileges and the other without.

Step 1: Create Two Users

First, create two users. One user will have sudo privileges, and the other will not.

For the user with sudo privileges:

sudo useradd grafana_sudo
sudo passwd grafana_sudo
sudo usermod -aG wheel grafana_sudo

For the user without sudo privileges:

sudo useradd grafana_nosudo
sudo passwd grafana_nosudo

Step 2: Install Grafana Agent

Download and install the Grafana Agent as per your system's architecture. You can follow the official Grafana Agent installation guide for detailed instructions.

Step 3: Create Unique Configuration Files

Create two different configuration files for the two Grafana Agents.

For the user with sudo privileges:

sudo mkdir /etc/grafana_sudo
sudo nano /etc/grafana_sudo/agent-config.yaml

For the user without sudo privileges:

sudo mkdir /etc/grafana_nosudo
sudo nano /etc/grafana_nosudo/agent-config.yaml

You can then add the specific configurations for each agent in these files.

Step 4: Create Systemd Service Files

Create two systemd service files to manage the Grafana Agents.

For the user with sudo privileges:

sudo nano /etc/systemd/system/grafana-agent-sudo.service

Add the following content:

[Unit]
Description=Grafana Agent (sudo)
After=network.target

[Service]
User=grafana_sudo
ExecStart=/usr/local/bin/agent-linux-amd64 -config.file /etc/grafana_sudo/agent-config.yaml

[Install]
WantedBy=multi-user.target

For the user without sudo privileges:

sudo nano /etc/systemd/system/grafana-agent-nosudo.service

Add the following content:

[Unit]
Description=Grafana Agent (no sudo)
After=network.target

[Service]
User=grafana_nosudo
ExecStart=/usr/local/bin/agent-linux-amd64 -config.file /etc/grafana_nosudo/agent-config.yaml

[Install]
WantedBy=multi-user.target

Step 5: Enable and Start the Services

Enable and start both services:

sudo systemctl enable grafana-agent-sudo
sudo systemctl start grafana-agent-sudo

sudo systemctl enable grafana-agent-nosudo
sudo systemctl start grafana-agent-nosudo

Now, you have two different Grafana client agents running on a single Linux host using unique configuration files, with one user having sudo privileges and the other not. You can monitor the status of both agents using:

sudo systemctl status grafana-agent-sudo
sudo systemctl status grafana-agent-nosudo

Make sure to replace the paths and filenames with the actual paths where the Grafana Agent binary and configuration files are located on your system.

How to Install K3s on Rocky Linux: A Comprehensive Guide

Kubernetes has become the de facto standard for container orchestration, and K3s is a lightweight, certified Kubernetes distribution designed for developers and operators looking for a way to run Kubernetes clusters in resource-constrained environments. In this blog post, we'll explore how to install K3s on Rocky Linux, a community-driven enterprise-grade Linux distribution. 

Whether you're a developer looking to experiment with Kubernetes or an operator in need of a lightweight solution, this guide will walk you through the process step by step. We'll also look at some real-world applications and case studies to illustrate the power and flexibility of K3s.

Prerequisites

Before we dive into the installation, make sure you have the following:

  • A system running Rocky Linux
  • Root or sudo access

Step 1: Update the System

First, update your system to ensure you have the latest packages:

sudo dnf update -y

Step 2: Install Curl

Curl is required to download the K3s installation script. If you don't have it installed, run:

sudo dnf install curl -y

Step 3: Download and Install K3s

K3s provides a convenient installation script that takes care of all the heavy lifting. Run the following command:

curl -sfL https://get.k3s.io | sh -

This command downloads and executes the installation script, setting up K3s on your Rocky Linux system.

Step 4: Verify the Installation

To ensure that K3s is installed correctly, run:

sudo k3s kubectl get node

You should see your node in the output, indicating that K3s is running successfully.

Real-World Applications and Case Studies

K3s is not just for hobbyists or small-scale projects. Many organizations are leveraging K3s to run Kubernetes in edge computing environments, IoT devices, and more. Here's how:

  • Edge Computing: With its lightweight footprint, K3s is an ideal solution for running Kubernetes on edge devices, enabling real-time data processing closer to the source.

  • IoT Devices: K3s can be deployed on IoT devices, providing a robust platform for managing and orchestrating containers in a constrained environment.

  • CI/CD Pipelines: Developers are using K3s to create portable and consistent development environments, streamlining the development and testing process.

Conclusion

Installing K3s on Rocky Linux is a straightforward process that opens up a world of possibilities for developers and operators alike. With its lightweight design and full compatibility with Kubernetes, K3s is a versatile tool that can be used in a variety of real-world applications.

Whether you're looking to experiment with Kubernetes, deploy containers in resource-constrained environments, or build robust edge computing solutions, K3s on Rocky Linux is worth exploring.

Feel free to share your thoughts, experiences, or questions in the comments below, and happy containerizing!

Monday, August 7, 2023

Kubernetes Sidecar Pattern: An In-Depth Guide


When you're diving into the world of Kubernetes, one pattern that often emerges as a powerful tool is the Sidecar Pattern. This post will provide you with an in-depth understanding of what the Kubernetes Sidecar Pattern is, how it functions, and some real-world examples where it can be applied.

What is a Kubernetes Sidecar?

The Sidecar Pattern is a concept in Kubernetes where a secondary utility container is deployed alongside the main container. This allows the main container to remain focused on its primary purpose while the sidecar container can take care of other specific tasks.

Keywords:

Kubernetes, Sidecar Pattern, Containers, Microservices

Main Use Cases of Sidecar Pattern

  1. Logging: A logging sidecar can gather logs from the main application and send them to a centralized log management system.
  2. Monitoring: A monitoring sidecar can collect statistics and forward them to a monitoring system.
  3. Security: Sidecars can be used to manage security aspects, like authentication and encryption, keeping these concerns separate from the main application logic.

Example: Sidecar for Logging

Let's take a look at a real-world application where the Sidecar Pattern is used to manage logs.

Imagine a main application container that writes log files to a shared volume. A sidecar container can be deployed alongside the main container to watch this volume, reading new logs and sending them to a place like Elasticsearch or another centralized logging system.

Advantages of Using Sidecar Pattern

  1. Separation of Concerns: The Sidecar Pattern keeps the main container clean and focused on its primary task, encapsulating secondary concerns in a separate container.
  2. Reusability: Sidecars can be reused across different projects or environments, making it a highly maintainable approach.
  3. Scalability: Sidecars can be individually scaled as needed, providing greater flexibility in resource allocation.

Case Study: Istio Service Mesh

Istio is a service mesh that heavily utilizes the Sidecar Pattern. By injecting a sidecar container into each pod, Istio is able to manage many cross-cutting concerns like traffic routing, load balancing, and security, all without the main application being aware of these underlying complexities.

Conclusion

The Kubernetes Sidecar Pattern is a powerful tool in the world of container orchestration. By understanding how it functions and where it can be applied, teams can develop more robust, maintainable, and scalable applications. Whether you're looking to streamline logging, enhance monitoring, or simplify security, the Sidecar Pattern might be the perfect solution for your Kubernetes environment.

Meta Tags

<meta name="description" content="An in-depth guide to Kubernetes Sidecar Pattern, its use cases, advantages, examples, and real-world applications."><meta name="keywords" content="Kubernetes, Sidecar Pattern, Containers, Microservices, Logging, Monitoring, Security, Istio">

Feel free to share your thoughts or experiences with the Kubernetes Sidecar Pattern in the comments below, and stay tuned for more deep dives into Kubernetes!

Tuesday, July 4, 2023

Unlocking the Coder Within: A 5-Step Journey for DevOps/SRE/Platform Engineers

 


Many DevOps/SRE/Platform Engineers, despite possessing extensive knowledge and familiarity with a variety of programming languages, often refrain from identifying as coders. This phenomenon may seem perplexing, given their technical expertise. Is there a way to shift this perspective? I propose a 5-step plan to guide any DevOps/SRE/Platform Engineer on their path to embracing their potential as proficient programmers.

Step 1: Unearth Your Passion: Solving Problems that Matter to You 

DevOps/SRE/Platform Engineers often exhibit a tendency to comprehensively explore tools, striving for a deep understanding that empowers them to solve potential problems rather than simply applying solutions. This enthusiastic pursuit of knowledge frequently leads to a broad but surface-level familiarity with many languages, epitomized by the ubiquitous 'hello_world' exercises. To deepen this proficiency, one effective strategy is to identify a genuine problem, one you encounter in your own work or interests, and apply your skills to solve it. Aim for practical, tangible outcomes rather than abstract, theoretical mastery.

Step 2: The Power of Persistence: Embracing a Language Wholeheartedly

DevOps/SRE/Platform Engineers are often praised for their ability to adapt quickly to various programming languages. However, this skill can sometimes lead to a premature transition from one language to another before a deep understanding of any particular one is achieved. To truly master a language, it's essential to choose one and persistently engage with it, even in the face of obstacles. Try to resist the temptation of shifting to a new language merely because it's currently popular. An effective strategy to support this learning process is to create a multitude of small programs that exercise different facets of the language. Saving these programs in a source control repository will enable you to review and track your progress over time.

Step 3: Beyond Scripting: Recognizing the Depths of Programming

For DevOps/SRE/Platform Engineers, scripting often comes as second nature, acting as a powerful mechanism for linking disparate tools together. However, it's important to distinguish between scripting and programming, as the latter involves a broader scope of tasks and complexities. This differentiation tends to become clearer when one starts programming in a non-shell language, where the challenges and the depth of understanding required go beyond the customary tasks associated with scripting.

Step 4: The Art of Leveraging: Using Modules and Libraries Isn't Cheating

Leveraging modules and libraries in your code is far from any form of short-cut or dishonesty. Rather, it exemplifies smart and efficient coding practices. These pre-existing pieces of code are akin to building blocks that you can assemble to effectively achieve your objectives. So, feel empowered to use them confidently, as they are vital tools in your programming toolbox.

Step 5: You Are Your Own Benchmark: Ignoring the Noise and Coding Your Way

A significant obstacle to coding can often be the apprehension about potential criticism or the fear of making mistakes. However, the key is to maintain focus on your primary goal: creating functional programs. Place your emphasis on solving problems effectively and efficiently, rather than conforming strictly to a particular coding style or syntax. After all, the utility and effectiveness of your code is the paramount consideration. As your confidence and skill grow, adherence to common practices and style will come naturally.


Achieving Your Goals with Unwavering Clarity


Achieving Your Goals with Unwavering Clarity When it comes to enhancing personal productivity, the power of clarity cannot be overstated. The first step to becoming a high achiever involves laying a foundation of crystal-clear goals in each aspect of your life. Just as a traveler needs a map to reach their destination, we need a clearly defined path to realize our ambitions. 

Understanding what you want to achieve is the essential precursor to productivity. Those who excel and outperform others often have one thing in common: they maintain a laser-like focus on their objectives, refusing to be swayed by distractions. This clear-eyed concentration on their goals allows them to maintain momentum, perform tasks more efficiently, and, ultimately, reach their targets faster.

However, clarity alone isn't enough - a detailed roadmap is necessary to navigate the journey towards your goals. By breaking down your objectives into achievable steps, you take the guesswork out of the process. This strategic planning not only propels you forward but also acts as an antidote to procrastination. After all, it's much easier to start a task when you know exactly what needs to be done.

In conclusion, enhancing your personal productivity and achieving your desired outcomes begins with a clear vision of what you want. Stay focused on your goals, outline the steps required to reach them, and dedicate yourself to the task at hand. This methodology not only aids in overcoming procrastination but also expedites the journey towards your goals. Remember, success is a journey, not a destination. Each completed task is a milestone, bringing you one step closer to your ultimate objective.




Tuesday, June 6, 2023

Level up your Automation Game

Here's a strategic plan I've been following to help improve my automation programming skills, primarily focusing on Python but also [trying] incorporating some Go.

The efficiency of this plan, similar to many others, hinges on two primary pilars: Deliberate Practice and Consistency

  1. Python Basics and Advanced Concepts: Start by revisiting the Python basics (variables, data types, functions, loops, conditional statements). * Gradually move to more advanced topics (OOP concepts, file handling, exception handling, generators, decorators).

  2. Dive Deeper into Python: Understand Python's standard library. It's broad and powerful, and a lot of what you might want to do for automation might already be covered. * Learn about working with databases, APIs, and web scraping as they are common in automation tasks.

  3. Automation Specific Python Libraries: Learn libraries that are frequently used in automation tasks, like Selenium for web automation, or Pyautogui for GUI automation.

  4. Practice, Practice, Practice: Regular practice is key to mastering any programming language. Try to automate simple tasks that you do daily. It could be anything from organizing your files to web scraping news articles. * Websites like Codewars, LeetCode, and HackerRank provide Python problems that you can practice on.

  5. Go Programming: Once you're confident with Python, start exploring Go. Go is known for its simplicity and efficiency, which can be particularly useful for certain automation tasks. * Begin with the basics (variables, data types, control structures, functions) and move on to more complex topics (pointers, structures, interfaces, concurrency). * Start writing small scripts, then slowly move onto more complex tasks.

  6. Projects: The most effective way to learn is by doing. Apply your skills to real-world projects. These could be work-related or personal projects. * GitHub is a great place to find open-source projects where you could contribute, or get inspiration for your own projects.

  7. Continuous Learning: The tech world is always evolving, so it's crucial to stay up-to-date. Follow relevant blogs, forums, or influencers who can provide insights into the latest trends and best practices.

Remember, it's perfectly okay to feel overwhelmed when learning something new. Be patient with yourself and celebrate your progress, no matter how small it might seem. The key to becoming proficient in any programming language is consistency and practice. Happy coding!

SRE Best Practices: Boosting Reliability, Performance, and Efficiency in the Cloud

Site Reliability Engineering (SRE) is a discipline that combines software engineering principles and practices to create ultra-scalable and highly reliable software systems. Initially developed at Google, SRE has become an industry standard, especially important for cloud-based environments. In this blog post, we'll delve into some SRE best practices to enhance the reliability, performance, and efficiency of services running on hosted cloud environments.

Embrace SLOs, SLIs, and SLAs 

Service Level Objectives (SLOs), Service Level Indicators (SLIs), and Service Level Agreements (SLAs) are vital components of SRE. SLIs are the metrics or indicators used to measure the performance and health of a service. SLOs are the target values or range of values for these metrics. SLAs, on the other hand, are the contracts with customers that specify what happens if an SLO is not met.

These elements play an essential role in balancing reliability and the pace of development. They help quantify reliability, make informed decisions about risk, and prevent reliability from becoming an afterthought.

Automate as Much as Possible

Automation is a core tenet of SRE. From deployments and scaling to incident management and remediation, automation drives consistency, reduces human error, and allows your team to focus on more complex tasks. For example, automating the deployment process through CI/CD pipelines helps ensure reliable releases and faster recovery times when issues arise.

Error Budgets and Risk Management

An error budget is the acceptable level of risk or failure defined by the SLO. If a service's reliability exceeds its SLO, the error budget is "positive," and you can take more risks like accelerating feature deployment. However, if the error budget is "negative," it means you're not meeting your SLO and should focus on improving reliability.

Prioritize Incident Management

Despite your best efforts, incidents will occur. Effective incident management includes defining an incident response process, having an on-call rotation, and following up with a blameless postmortem. This approach not only resolves incidents effectively but also turns them into learning opportunities to prevent recurrence.

Embrace a Culture of Learning and Blamelessness

SRE encourages learning from failures instead of blaming. It's important to create a culture where people feel safe to report and learn from mistakes. Blameless postmortems are a key tool in this respect, focusing on identifying the contributing causes of incidents without pointing fingers.

Monitoring and Observability

You can't improve what you can't measure. Comprehensive monitoring and observability are key to understanding your system's behavior and identifying areas for improvement. Utilize logging, metrics, and tracing to gain a full view of your system's performance and health.

Capacity Planning

Capacity planning helps ensure your services can handle the load and meet performance expectations. It includes forecasting demand, managing resource usage, and planning for scalability. It's crucial to use tools for auto-scaling and load balancing in cloud environments to handle sudden traffic spikes or grow over time.

Conclusion

SRE is a powerful approach for managing and improving services running in the cloud. By embracing SRE best practices, you can boost the reliability, performance, and efficiency of your services, ensuring that they not only meet customer expectations but also contribute to the overall success of your business.

Remember that SRE is not just about tools and practices; it's also about culture. By fostering a culture of blamelessness, continuous learning, and a focus on reliability, you can create a robust and resilient cloud ecosystem.

Wednesday, January 20, 2021

Install python2.7 alongside 2.6 on Centos6 or 7

# install python 2.7 alongside 2.6 on centos 6

* note this also works with python3 and 2.6.

 

# Install Dev tools
yum groupinstall -y "development tools"


# Install required libraries
yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel expat-devel


# Install wget if you don't already have it
yum install -y wget


# Download Python 2.7.14 package
wget http://python.org/ftp/python/2.7.14/Python-2.7.14.tar.xz


# Unzip it
tar xvf Python-2.7.14.tar.xz


# Go into directory for install
cd Python-2.7.14 Python-2.7.14.tar.xz


# configure python2.7 in /usr/local/bin
./configure --prefix=/usr/local --enable-unicode=ucs4 --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib"


# Compile it as an alt-install (SUPER CRITICAL STEP!!!). This will allow you to run both existing python and newly installed python
sudo make && sudo make altinstall

Thursday, November 14, 2019

Trim videos quickly using FFMPEG

You can easily trim videos using command line on a mac or linux.

On a mac, you'll need to install FFMPEG.  you can get this from homebrew.

If you don't have homebrew, you can install it easily following the one liner instructions from their site.

Install Homebrew
       

 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
       
 



Once Homebrew is installed, then install FFMPEG via homebrew.  Open your terminal and use the following command to install FFMPEG.

       

 brew install ffmpeg
       
 


Then run the following command (substitute your input.mp4 and output.mp4 with desired filenames).

       

  ffmpeg -i input.mp4 -ss 00:10:25 -to 01:18:34 -c:v copy -c:a copy output.mp4
       
 

This will cut your input.mp4 video file.  Start will be 10 minutes and 25 seconds.  The end will be 1 hour 18 minutes and 34 seconds.   Also, this should take only about 5-10 seconds.

Enjoy!

Wednesday, December 12, 2018

Setup WebPageTest Private Instances

The following article describes how to run a private instance of WebpageTest on your local host.

Assumptions:  You have docker installed.


step 1. pull down agent and server images
docker pull kmaqsudi/wpt-private-server
docker pull kmaqsudi/wpt-private-agent
step 2: Run the server instance
docker run -d -p 4000:80 kmaqsudi/wpt-private-server
step 3: Run the agent instance
docker run -d -p 4001:80 --network="host" kmaqsudi/wpt-private-agent
Open a browser and navigate to http://localhost:4000 and you should see your private instance.




 


To check the details of your install browse to the following URL:

http://localhost:4000/install/


Saturday, October 6, 2018

Memory




"We remember what we understand; we understand only what we pay attention to; we pay attention to what we want." - Edward Bolles


You can learn to remember more effectively if you learn and use the four keys described below. Each one helps you to enter information into your long term memory.
  1. Choose to remember. Be interested. Pay attention. Want to learn and know. What you want is an important part of learning. When people are interested and want to learn, they learn and remember more effectively.
  2. Visualize or picture in your mind what you wish to remember. For many people, a mental picture or visualization is clearer and easier to remember than words. For each major concept that you want to remember, create a mental picture and then look at it carefully for a few seconds. Once you've seen it clearly, you'll probably be able to recall it.
  3. Relate the ideas and information you wish to remember to each other and to ideas and information you already know. When you relate information to other information, you create a chain of memories which lead to one another. When you label an information chain or group of ideas, you create a kind of "file" that makes it easy to locate and remember the information.
  4. Repeat what you wish to learn until you overlearn it. Say it in your own words. Even though you've already learned something, go over it one more time. Research shows that the time you spend on overlearning and putting ideas into your own words will pay off by making recall easier and more complete.

Author: keeleym@bucks.edu








Monday, February 5, 2018

Create SAN certificate CSR on macOS

Steps to create SAN certificate CSR on your MacOS





Assuming that your domains are the following 4 domains

www.example.com
www.example1.com
www.example2.com
www.example3.com
www.example4.com


Step 1:

#Open your terminal app and create a file called sancert.cnf

Step 2:

#In this new file you just created insert the following lines of text.

[ req ]
default_bits        = 2048
distinguished_name = req_distinguished_name
req_extensions              = req_ext

[ req_distinguished_name ]
countryName                  = Country Name (2 letter code)
stateOrProvinceName    = State or Province Name (full name)
localityName              = Locality Name (eg, city)
organizationName    = Organization Name (eg, company)
commonName      = Common Name (e.g. server FQDN or YOUR name)

[ req_ext ]
subjectAltName = @alt_names

[alt_names]
DNS.1   = www.example.com
DNS.2   = www.example1.com
DNS.3   = www.example2.com
DNS.4   = www.example3.com
DNS.5   = www.example4.com


Step 3:
Save your file and go back to your terminal app.

Step 4:

# In your terminal, type the following command (in the same dir as the file you just created)

$ openssl req -out sslcert-example.csr -newkey rsa:2048 -nodes -keyout sslcert-example.key -config sancert.cnf



This will create 2 files. 
1.  sslcert-example.csr
2.  sslcert-example.key





Thursday, October 6, 2016

Revert Git changes

To rollback to a specific revision on github (Helpful if you accidentally merged and pushed to branch)

# switch to branch you need to rollback
git checkout branch_name

# make sure you have the updated version
git pull

# rollback to specific version
git reset --hard 56e08f23

# push your changes back to github
git push -f




To remove a specific commit that has been pushed to remote repos

#Identify the commit hash
git revert -m 1 56e08f23

# confirm the revert was correctly done and push back up to remote repos
git push -f

Saturday, February 13, 2016

Hello World

Wow, I must have been asleep all of 2015 to not have posted.  Will pick this up again in 2016.  :)

Saturday, October 25, 2014

Yahoo messenger breaks if you upgrade to Yosemite. - fixed

Short post....

If you upgrade your mac to Yosemite, your yahoo messenger will not work.

All credit to Chris Knight for this fix.




Download the following patched Adium and you're good to go.
http://www.ghostwheel.com/adium-yahoo-fix/Adium.app.zip






Original post can be found here...

http://www.ghostwheel.com/merlin/Personal/notes/tag/yosemite/

-Khalid






Friday, October 3, 2014

Connecting to Citrix Netscaler via browser on a Mac

If you need to connect to a citrix netscaler via your browswer using Mac OS X and getting an error message stating 'Missing Java plugin', follow the steps below to correct it.


Open Preferences


Click on Java on the bottom and a new Java console window will open...


In the Temporary internet files section of the 'General' tab, click on 'Settings..."

Then make sure that "Keep temporary files on my computer" is unchecked.



Restart your browser and you should be able to connect.  



Thursday, July 3, 2014

Are you interested or committed?


Are You Interested Or Committed?

I was thinking about what to write this week when this quote popped into my head:
"Interested people do what is convenient. Committed people do whatever it takes."
I’ve heard this term applied to entrepreneurs who want to have a successful business. Basically the question is – are you interested or committed to have a successful business?

However, the real question is:  Are you interested or committed to achieving your goals?

And that question is for everyone.

Do you have a list of goals? Pull them out or if they’re in your head – write them down. Look at each goal: are you interested in achieving that goal or are you committed to achieving it?

Interested says: I’d really like to achieve this goal, it’d be cool! 
Committed says: I will achieve this goal and here is what I’m doing.


Which ones do you think you’ll achieve? 
The one’s you’re interested in or the one’s you’re committed to? Yep, you’re most likely to achieve the goals that you’re committed to.  Take another look at those goals that you’re interested in.  Be really honest with yourself – why do you want to achieve those goals? Because your friend or colleague did? Because someone else told you that you should? Or because you think you should? Do you really need me to tell you that those reasons probably won’t motivate you?


Can you move from interested to committed? Yep! But you need a better reason than “I want to keep up with the Jones’s”. What does achieving that goal really mean to you? What will change by achieving that goal and how is that different from where you are now?  Motivation for a goal you’re committed to comes from within you and not from someone else. It gets you fired up and willing to step outside your comfort zone. It’s powerful.

What goals are you committed to?



Tuesday, June 10, 2014

Kibana 3 with ATG logs



I'm going to give this a shot and see how it goes.  The toolchain used in this demo seems bloated though...

source:

http://atgadapt.com/aggregated-logging-for-atg-with-kibana/