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/




Sunday, March 30, 2014

Adium 1.5.9 'connecting' to yahoo!

If anyone else is having issues connecting to Yahoo Messanger using Adium 1.5.9,  upgrading to the nightly build 1.5.10 seems to have fixed this issue.

Problem description:
When using Adium to log into your Yahoo! messanger account, the status remains on 'connecting'. Gtalk/etc, is working fine.  As is the default Yahoo! messenger app.


Resolution: 
Upgrading to the nightly build version 1.5.10 seems to have solved the issue.



http://nightly.adium.im/adium-adium-1.5.10/Adium_1.5.10hgr5845.dmg




Sunday, March 2, 2014

Live. Love. Matter

Most people are not apathetic fools—they are engaged and intelligent beyond measure. It's just that they spend a shocking amount of time studying foolish things, and so they have gained great intelligence in the inconsequential. They know dozens of batting averages, celebrity baby names, and trivial anecdotes from the latest news alert. They know more about television characters than their coworkers; more about the freeway traffic ahead than their financial future; more about the new tech toy than what's truly missing from their lives.

This of course, does not describe everyone. Yet we have the average American watching four hours of television per day. This amounts to around 13 years of his or her lifetime. Yes, that's 13 years 24/7 in front of the boob tube. Those years slip by episode-to-episode, and often feel like rest and entertainment. But all research shows they amount to very little joy or meaning in one's day or life.

The cost is immense: had those 13 years been used for vital and productive endeavor, they would amass to nearly $1,000,000 more in wages and over $2,000,000 in investment opportunity. Let's not forget how those 13 years could have been used to deepen friendships, travel, create more art, learn languages, develop world-class expertise, contribute, enjoy love, or live life as a human rather than a gape-mouthed consumer of waste.

While television isn't stealing everyone's four hours, most of us now suffer from a sort of recurring "browser blackout" or "app amnesia," losing hours of time each day on our computer or mobile devices without any recollection of what we saw or accomplished. Distraction reigns.

And so the outcome is we have tremendously engaged and intelligent people often tragically consuming and learning meaningless things. We are busy, but at what? We are smart, but at what? We are engaged, but with what?

Not everyone is so lost, but this might help explain the melancholy one feels in our society. For what could be worse than for smart, engaging people to finish their lifetimes without much to show for it but the ability to win a pop culture trivia contest?

Let us choose once again to aim our ambition and intelligence toward meaningful endeavors. Let's be productive. Let's serve. Let's enjoy this gift of life.


- Brendon Burchard

Tuesday, December 24, 2013

Talk is cheap

There are many people who — perhaps with the best of intentions — make promises they somehow never get around to keeping. These folks have usually developed a number of perfectly plausible explanations for not meeting their commitments; they have become experts at explaining away their failures. Successful people, though, are those who accept responsibility for their lives. They know that talk is cheap; actions are all that really matter. The world is waiting for men and women who seek the opportunity to render real service — the kind of service that lightens the burdens of their neighbors, the kind of service that 95 percent of people do not render because they do not understand it. When you provide a truly useful service, enthusiastically and in a spirit of genuine helpfulness, success will automatically follow. The world seeks out such individuals and rewards them accordingly.

- author unknown

Saturday, October 26, 2013

Cisco VPN issue with OS X Mavericks - solved

If you are having an issue with the Cisco VPN client after upgrading to OS X Mavericks, here is the solution...

open a terminal (iterm)

# edit the sysctl.conf file
sudo vim /etc/sysctl.conf

# comment out the following line.
kern.ipc.maxsuckbuf=512000.

Your file should look like this after you edit...

#
# Tuning network for broadband
#
# START
# kern.ipc.maxsockbuf=512000
net.inet.tcp.sendspace=131072
net.inet.tcp.recvspace=358400
# END



# Last step is to reboot.

Thursday, June 27, 2013

Do The Work



No book, blog, online course or seminar works until the moment you start doing the work
-- Robin Sharma






Friday, June 14, 2013

What is Web Operations?



Very interesting article on Web Operations.  Its a bit old but very much still relevant from Theo Schlossnagle.  Excellent read.






Thursday, April 18, 2013

FlushDNS cache on Mac OS X and Linux



#flush your DNS cache on your Mac OS X machine


#Yosemite
sudo discoveryutil mdnsflushcache

#Mountain Lion
sudo killall -HUP mDNSResponder


#CentOS
sudo /etc/init.d/nscd restart










Wednesday, April 17, 2013

Expand LVM in CentOS 6


# review your disk layout
fdisk -l

# scan for new disk.
echo "- - -" > /sys/class/scsi_host/host0/scan

# check disk layout again {notice changes}
fdisk -l



fdisk /dev/sda
p  (print partition table)
n  (New partition)
p  (primary partition)
3  (ID #3 (this may be different for you, since I already had /dev/sda1 and 2)

# When asked for block value, add 1 to the end of block value for sda2 partition and use it as the start of the sda3 partition.  

t  (change partition type)
3 (change partition 3)
8e (Type = Linux LVM)
p (print the partition table again)
w (write the partition table)


# Now create a new LVM physical volume from the partition you just created.
lvm pvcreate /dev/sda3
lvm pvdisplay

# Mount the volume group
lvm vgscan
lvm vgchange -ay
* a message will echo that the volume group is activated.

# extend the volume group with the new physical volume.  change the volume group hostname with yours. 
lvm vgextend /dev/vg_vdevd01 /dev/sda3

# now extend the logical volume to include the new partition. 
lvm lvextend /dev/vg_vdevd01/lv_home /dev/sda3

# Mount the volume group
lvm vgscan
lvm vgchange -ay

# Run a filesystem check on the newly expanded disk
e2fsck -f /dv/vg_hostname/lv_root

# resize the filesystem to use the entire disk
resize2fs /dev/vg_vdevd01/lv_home

# reboot and check your new disk 
df -h

Thursday, March 28, 2013

Execution is the Key

Three things that need to be done in order to accomplish your goals.  Don't set vague goals without knowing the details.

1.  Understand what to do.
2.  Understand how to do it.
3.  Execute

Most people set vague goals such as exercising more, improving on A or B, etc.  The key is lay out the plan on what steps are needed to call this goal a success.  "Working on it" is not completing it.  You don't get to check it off your list if your still "working on it".   One good point to remember is that the beginning is usually the most difficult both physically and mentally.  Don't quit! Get past the first few hurdles and keep going.  

-Khalid