I find problems!

I find problems – that’s what I have been doing – and I fix them – that’s also something that I have been doing.

If I can’t find a problem in something, then I can’t give suggestion to fix it – and I feel disappointed with myself.So, it’s not you, it’s me – I have the urge to identify problems in almost everything, and I try to push myself and others in fixing those problems.

Almost everything that you would share with me would have “some” scope of improvement, and my initial/knee-jerk reaction would be to identify the problem and share the solution.

Don’t be mad/sad about that – that’s just the way I am – I am pretty sure I am not so proud of myself here, but I believe this is important for the sake of improvement in our lives.

The day I stop complaining/giving-suggestions/finding-problems – that’s the day either I am dead, you are a perfectionist or I don’t care…

Tee3 | Tips, Tricks and Technologies

I have been into web development from 2 decades (starting with static HTML websites back in 2001), and moving up the ladder by learning/implementing Photoshop/graphic design for 5 years, and from 2006 onward professional PHP (and related tech-stack) based development.

Seeing people struggling with basic know-how of core programming and related skills and ending up with confusion, lack of confidence, being less efficient/productive, filled with anxiety and stress etc, is a difficult thing to watch, and I see it(almost daily) and intend to help these young developers (and some experienced/seasoned ones as well) to do things faster than they are doing now, by teaching the tips, tricks and technologies that would help them do things in (may be) 2 years what I was able to do in, say, 5 (or more).

I speak often at devTalks (local meet-up group) where we talk/deliver-session about various topics from different layers of technologies : server, client, DevOps, DB, upcoming technologies etc and during the lock-down we conducted a lot of online sessions (open and free for all) helping people who are at home (and/or working-from-home) and continue to help a lot of young and mature developers alike, and I would want to focus on some specific sections (from the tech-stack that I know) that I believe will make things much easier/better for most of the developers.

If I were to start a course tomorrow, the title would be:
How Docker could put your career on a fast track

Class project (after/during the course):
Deploy a CI/CD pipeline on GCP Cloud Run using bespoke docker images created after learning Docker and related tech-stack(from the course) and using available services – for PHP and Nodejs.

Some key lessons to be included:
– The Why and What of Docker in brief : The introduction (~2 mins)
– Installation instructions (Ubuntu only, other OS instructions linked/referred) : docker, docker-compose, git (optional), hub.docker.com account (to push images to docker hub, to be used during CI/CD setups) (~5 mins)
– Docker images and containers “What are those?” : Names and tags, local images, pull-from/push-to docker hub, difference and similarity, context
– Build docker images : How to build from official/base versions, create your own images, why the need to create custom images
– Docker containers (details yet to be listed)
– “docker-compose” : Services, networks, volumes and containers. Using CLI and VS Code (non-CLI)

I might need following tools (already with me, or need to update/install):
Equipment : Smart phone, DSLR camera, silent space, lights.
Software : Screen recording tools, PhpStorm (and inbuilt tools), OBS studio (multi window/source management, streaming/recording) etc

Some of the links (from gist.github.com/jdecode) related to Docker/docker-compose:
– Dockerfile for PHP 8.0 RC2 with MySQL and Postgres support: https://gist.github.com/jdecode/77b554ba217c5dfcf5f78f89260c8561
– Setting up Dockerfile and docker-compose for a CakePHP project : https://gist.github.com/jdecode/f25b66b8993d5ca32c4a25353e9f2ec9
– Steps to run Docker project (similar to the above link, but different and important – uses MySQL): https://gist.github.com/jdecode/b2754547a461f289493df38a51776524
– Screenshots accommodating the content of the course : https://gist.github.com/jdecode/3dd9a6edd6c0411756681c0035b76c41

Which one is more difficult?

There are 2 steps to doing something:

  1. Making up your mind
  2. Committing yourself to that

In my personal experience, commitment is an issue – especially when I have made up my mind to do something.

There are times (like today/nowadays) when I am unable to make up my mind towards exactly what I want to do.

And then there are times when I am pretty much clear of what exactly I want/need to do, but I am unable to follow it through – from a commitment point of view.

I lack commitment more (not always though) than making up my mind.

I am going to get over this (I am not going to “try” it, I “will” get over this).

I’ve got a few things going on – personally(pertaining to just me, not my wife/kids/parents/relatives – just me – “personal”), professionally, family wise, financially etc – and I believe I am going to be “making my mind” on some of these things in about a week (or a “focused all-night-er” – perhaps tomorrow, may be…) and then I would be committing myself to the actions required for those.

Both of these things are extremely difficult.

  1. Making up your mind to do something (planning)
  2. Committing yourself to do those things (executing the planning)

Execution has been a bigger issue for me, yet, and I am going to eliminate this issue – by executing my plans the way they should be.

What are the things that I believe are needed for:

  1. Planning : Clarity of thoughts, written-down thoughts (prefer hard-copy version, if soft-copy is your thing then go ahead with that), revisit the thoughts every few days/weeks, bridge the gap between your “family persona” and “official persona”, bring your love for family to your work(not company), and bring your love for your work(not company) to your family, think more, give yourself “phone-free” or “distraction-free” time – daily, read what you “think” you are going to “plan”, be more focused, give attention to detail, be competitive, be fast, be faster, be more efficient, talk more, share more, feed your mind more, do not “indulge” in entertainment, do not be addicted to anything, be flexible, be strong and not rigid, be courageous and not bounded, be free, think more(yes, this is repeated, because it is important – THINK MORE)
  2. Execution: Will!

I lack(ed) will, hence the lack in execution, and I am catching up to my will… I still fail and falter, and I shrug off the problems every now and then by doing merciless introspection – I don’t make myself a fool, and I expect very high level of “common-sense” from myself during those introspection sessions – which usually kick-off with “Yes, Mr. JD, what the f*ck is going on?” and the answers start like “Well, you know how *something* is happening/about-to-happen, and I think believe I must do this *something* with more focus, commitment and will”

Well – that’s a lot of stuff for a post that I thought would be 2 lines – I guess that’s what 3.30 AM does to you… removes the brakes of the thought-train, and it doesn’t stop… you have to jump out from the running train (missing on a lot of unexplored venues if you would have stayed on that train… but you are scared that you would never want to jump if you continue to ride…)

Funny thoughts!

Should I change?

So yesterday I had a chat with my CTO regarding my appraisal.

It went great – I am more than happy with the discussion (and the result of the discussion as well).

There are a few people who I genuinely enjoy having conversations with, and he is one of those fellas!

Anyway, I have been thinking about a couple of things that we discussed (there is new/unique way of taking feedback in ucreate – more on this some other time) – and that included sharing some notes (anonymously) from different people who have given feedback for me.

  1. I am awesome
  2. I need to change

While most of the people (including myself) consider me as pretty awesome (and no, I am not letting that go into my head… but it feels pretty awesome to write “pretty awesome” about myself… 😀 ), there are suggestions for some changes as well (including from myself).

E.g. I talk a lot, and that (mostly/usually) causes the meetings to be stretched (I am trying to handle this in a much better way, but still needs to be manged better). Now that doesn’t mean I don’t make sense when I talk, but sometimes (well, most of the time) the core point is addressed either very early in the discussion (thus the person with whom I am talking feels that the call should have been over after first 5-10 mins) or the core points is addressed very late, and sometimes never(hovering over surrounding areas consumes all the time) – and when it is so, then the journey/path around other areas (the surrounding areas) is more important than the destination(which, philosophically speaking, is true most of the time).

In short – I talk a lot, that means I take a lot of time (of others), and that means that people feel that their time is being wasted, but there is a certain closure to the conversation as well.

So, should I “not talk a lot” and just “fix the issue/problem at hand”, thus avoid the “conversation” part for which I was (and still am) being considered a better “lead” (or the way I see it as – “a better human” or “a better conversationalist”), or should I “not change” and continue to do what I believe is better for me(and for those who I interact/converse with)?

If I change, then yes, I have considered other people’s opinions and suggestions and changed myself, but then it also makes me “not me” – and that’s something that will affect my conversations and I might stop getting “effective” in what I do.
On the other hand, if I do NOT change, then I will be discarding the feedback/suggestions that I have received and I will come out as “arrogant” or “rude” and then people might not want to give any suggestions in the future as well (knowing that I wouldn’t be changing anything and would ignore their inputs).

And this was ONE example, and may be for this particular case I could do some improvements that would allow me to function the way I do, and still be able to inculcate some of the inputs.
E.g.
– I would be sharing Agenda and some sub-points before a meeting so that people would know what to expect, and probably a rough time-estimate of each topic (so that I do not over-indulge in a particular point)
– If there is something that I am already aware of (and I just need to communicate it), then I would be sharing document/notes and would share my expectation from the receiver to go through the notes/document and come up with confirmation of understanding and/or any questions or follow-ups for a particular topic/scenario
– Rather than being the “speaker” and “driver” of the meeting, I would want to “speak-last” (like a good leader, knowing/considering other’s opinions before I share mine) and thus allowing others to share more and do not worry about the time considering they would have shared their feedback for the issue/point/scenario already

There is obviously a clear solution to ONE specific problem/change.

There are some other things that have started to bother me as well – and that are “changes” as well – the stuff that keeps me anxious is more technical in nature. E.g. Learning TDD and Laravel (and the ecosystem around Laravel).

I have been good with CakePHP and I am still continuing to work in CakePHP only, for my pet/personal projects.
On occasion I have used/tried SlimPHP framework as well (very light-weight, totally love it).
In ucreate we use “only” Laravel (for PHP) and I sometimes worry if my lack of knowledge(almost zero understanding of Laravel as a framework) of Laravel could be keeping the quality of an average PHP project from improving.

If I would know Laravel (like I know CakePHP, or I “think” I know CakePHP) then I would be jumping in code blocks of different projects, making changes (hopefully without introducing new bugs), doing much better code reviews, adding TDD, adding complex test cases, faster build times by utilising custom Docker images (private/public) that use PHP/Laravel’s optimised ways of doing things, static code analysis, less dependency on 3rd party extensions and what not…

What it also means is that I would start getting inputs/feedback like “Now you know that Laravel is having this issue, while CakePHP may not, so you will have to agree to the way things are done within Laravel eco-system”.

While I know Laravel is adding so much stuff so quickly, and is growing at an amazing speed, however I also happen to know how much more it could do, and I know this because of my experiments with CakePHP and SlimPHP, and seeing how amazing these frameworks are and how they handle the same use-case differently (across Laravel, CakePHP, SlimPHP).

If I would start learning/using Laravel then yes, my tech discussions with team would improve a lot, and that would also mean that my scope of knowledge would also be bounded(for the lack of a better word) and eventually I would know things just as they are in Laravel, and not as how could have been(for better or worse).

So, I am confused – should I change?

I will need to strike a balance for things like these, but then, these 2 things (time-management during discussions and learning Laravel) represent less than 2% of the other such imbalanced/unclear thoughts/decisions.

A bit about me – copied from a site where I was supposed to write something in the “About me” section

I have always been intrigued by technology and have found myself wondering at hardware/software/systems and thinking “How” and then “Why”.
I am a father to 2 daughters, and husband to a lovely wife, and now that I am enjoying a more stable/fun time of my life, I am moving the “Why” before “How” and it gives a wildly different narrative of the same thought process that I had during my younger times (around 20 years back I would say).

Belonging to a time before the first Nokia phones became global trends, when reading books, visiting libraries, giving attention and focus was the norm, I believe I have seen some varied changes in the thought process of the generation before, and after mine and this has allowed (and in a way, enabled) me to create unique training and learning environments where the difference (or rather the journey) is understood and explained very well. This allows me to communicate (and understand the reasons for the lack of, if there is) much better than people older, or very younger than me.

I enjoy critical thinking, and intend to make the tools and technologies easier/better for wide adoption and increase the quality of thoughts amongst us.

CakePHP 0

This post is a first one to cover CakePHP commands for setting up a project.

I am not sure how to document this in the right/best way, so I am `starting` – the first right thing to do – and will see how this takes shape.

GitHub repo or gists would be linked wherever applicable.

Consider this CakePHPFristPost (frist = first; for those who don’t know, you don’t know).

#CakePHP_0 (the prerequisites)

1. You should have a DB setup (this is not going to be a beginner level series) and hostname, db name and db credentials should be handy. Default values used in examples/samples would be hostname=localhost, db=cakephp, username=jd, password=jd

2. Composer should be installed (globally) : Google for installation instructions

3. Ubuntu : At the time of writing this (Nov, 2019) 19.10 is out, I am using 19.04 and last LTS version available is 18.04 and either of these can be opted for development. Anything older than 18.04 would also work, any dependencies or issues comprising because of compatibility of OS would be your cake to digest.
If you do not have Ubuntu setup, then please use a VM to set it up (VMware player, virtualbox, workstation are some popular VM tools), or use Docker (this will feel more advanced if you are already NOT familiar with VM and/or Ubuntu, but this will make things much simpler for ongoing development).

4. CakePHP 4.x is not yet out of development pipeline, hence 3.x latest version would be used (3.8 at the time of writing this). Although 4.x would work as well, I have not explored it yet (on that note, I haven’t explored 3.x either – this is a learning moment for me that I am trying to document so any problem that you face might be worthy sharing considering I might also be struggling with the same one).

5. Git : Use any git provider – GitHub, BitBucket, Gitlab, GCP source repo or anything else for that matter – this would be otherwise optional, but I heavily use git (GitHub + Gitlab + GCP source repos) so a lot of my planning/managing code involves switching branches for different reasons (even for testing something small, or even a full fledged project on a branch) so if you are seeing this and would potentially would follow through other posts/series, then be ready to work in a git-enabled setup. If you don’t know git or are not comfortable with (g)it then, seriously – are you living under the rock?
Stop here, Google/GitHub/Medium/Documentation/Tutorial – whatever floats your boat – and then continue. You will thank yourselves.

6. Apache is the web server that I would be using. There is Nginx and probably other servers that can be used, but I feel more comfortable to use this for local development, and since most of the common hosting solutions have Apache as the default version so less configuration changes to debug.

7. Visual Studio Code, VS Code, is the editor (it gives major IDEs a run for their money) that I would be using for development (setup, screenshots, videos etc).
A good editor, configured right, is a tool that is often under valued, and this will be addressed in some posts.

 


Before you would have read and setup above, next post would be up to start CakePHP installation (start, not finish).

Have a system ready with following and let’s roll

  1. Ubuntu – OS
  2. Apache – Web server
  3. MySQL – DB
  4. PHP 7.3 (Duh!!)
  5. Composer – Dependency manager
  6. Git – Version control

CakePHP 0 concludes

On a second thought, if you are here reading about CakePHP, you should have almost everything setup already, never mind.

 

CakePHP – The beginning of taking the ownership of setting things right

With great power comes great responsibility – Uncle Ben aka Taylor Otwell 😉

 

Structure:
– Laravel, comparison to CakePHP, and ownership model
– The realization (of difference in ownership)
– Impact, blockers and opportunities for me
Laravel, comparison to CakePHP, and ownership model
Taylor Otwell, the creator of Laravel, was perceived by me as an arrogant individual when I first starting to learn what Laravel is and who Taylor is.

I have been brought up during the era of CakePHP, WordPress, Magento, CI, Yii, Zend (and some other frameworks) and these frameworks are great frameworks.

They get shit done, and wow, in such awesome ways possible (genuine awesomeness and with a pinch of sarcasm as well).

None of these frameworks is owned by an individual (unless I am really ignorant about this fact), and when I go see Laravel’s homepage it says “Trademark of Taylor Otwell” and I am like “whoa… that’s arrogance”.
He is not the only one who has contributed to the development and success of Laravel, there are numerous other people (working directly on the framework, creating libraries, conducting training, sessions, conferences etc) and yet Laravel is “owned” by Taylor Otwell.
I had this discussion with quite a few people, specifically with @svikramjeet about possible reasons for this “attitude”. I was convinced that Laravel should be a an organization, under which Taylor work and operates, and yet there was no lack of people moving to Laravel (a very young framework) leaving all other mature frameworks with their well-known features and a lot of blogs and articles and training materials floating around the web.

Not until recently, a few months back, when it has been over a year since this thing have been bugging me, that I had a realization that made me change me thought process.

The realization (of difference in ownership)

Something went wrong in a version of Laravel 5.8.4 and some of the dependencies were behaving abruptly (due to removal of PutEnvAdapter).
Following links contain more info:
https://github.com/laravel/framework/issues/27913
https://github.com/laravel/framework/issues/27949

Taylor was on vacation, and he mentioned this in one of the thread linked above, and he promptly got the issue fixed and released the next version the next day.
This is a clear example of move fast, break things and till that day I was not able to realize this phrase. I understood, but now I realized what it meant – the worry of things going wrong should not stop you from experimentation, be courageous enough to own the process and confident enough to get things back on track if something goes south.

If this was CakePHP, then such an issue would not have happened in the first place.
And the fix might not have been so quick either.

There are very good processes in place that would prevent preventable issues to crop up, and that means there would be a lot more checks/considerations when talking about a release, which means a slower delivery schedule, a more controlled release process, which eventually means fewer contributions by newer generation of developers – these young folks are smart(er), work fast(er), expect feedback fast(er) because they are impatient, owing to the technical environment these young minds have been exposed to.

While the instant gratification process is definitely wrong, but since it is out there (yet) and there are developers who are suffering from this issue, and are good/awesome developers, they agree and align more with individuals rather than organizations or processes​. They are OK with broken things (the Zuckerberg-inspired people) as long as those are fixed soon as well.

The “So what?” attitude really helps here – yes, some code was wrong, it was fixed in less than a day, “So what?”.

Additionally, people want someone to look up to – I, for one, cannot look up to “CakePHP” as a framework or as an organization, rather I would look up to “Mark Story” or “Taylor Otwell” – the people who get things done, who inspire, instil a notion of “get-shit-done”, and are there to answer us when we reach out to them on Twitter.

Even if CakePHP Twitter handle responds, it is not guaranteed to respond every time, but when Taylor or Mark will reply, then a whole lot of “looking-up-to-them” people will reply.

I don’t know if I am rightly addressing the cause (or even if it is a right cause), and I haven’t proof-read the above content.

I am writing, and once I am done, I will hit “Publish”, I am impatient, I don’t care if some typo or a incorrect sentiment goes out, I will reply in the comments if someone asks me something, and I will acknowledge and own if something is wrong. I had no intention to hurt any individual or organization, so I know (and I am confident) that my words would not come out as hurting, but if someone would be looking for “getting hurt”, the person will find something that fits the “use case” – and yes, I won’t care.
I used to think that I belong to an older generation, but I think there are some traits that I am following.

 

So what’s next?

I am going to set some things right in the world of CakePHP, not necessarily because things are going wrong, but because I believe I would want to see someone respond when I there is a need to respond, someone who can understand the context, be ready rewrite everything that is out there because someone might really be talking about something small that requires an overhaul of the things.

In last few months I have felt the need for someone to act like CakePHP’s T. Otwell, M. Said, J. way, and although I found people who were close, I wanted more, and unless I find someone else, I am going to own this – this is a strong sentiment and it took me 20 minutes to write this single line because of the responsibility and ownership this needs (and I will grow where I lack).

Good luck, and god speed…

Starting over, yet again

Time has passed. A significant amount.

I will be 35 in a few months. It’s already been more than 1800 weeks since I have been around, and (in the best case scenario) I would be around for another 1800.

While a significant time was spent on knowing, growing, learning and doing a lot of crazy things, and in doing so I have tried to hit the “reset” button a few times, and it did work – to a certain extent.

The time for another reboot is here.

New targets, new challenges, new beliefs.

This is probably the last reboot that I can do in this life at a point where I still have significant control over the actions that I can take and still be in a position to enjoy the benefits as I plan and intend.

I am investing next 8 years, to get the ROI for the following 30 or so.

Target = Retirement from fear and worries of life (and “the life itself”).