## PMP sınavı değerlendirmesi – lessons learned

PMP sınavı lessons learned:

Situational problems:

Şu şu durumda “önce/en önemlisi ne yapılır” soruları: Bütün konu bu aslında. Genellikle “Integration”(change management), “stakeholders management”, “scope management”,”communications management”, “charter”, “procurements”, “risks”. Bunlar monitoring & controlling bölümündeki soruların tamamını oluşturup diğer gruplara da karışıyor.

• Son anda önceden olmayan yeni bir stakeholder ortaya çıktı ve benim şöyle bir ihtiyacım vardı bu yapılmamış dedi. Bu durumda ilk ne yapılır/PM nerede yanlış yapmıştı.
• Son anda proje bütçesinin yetmeyeceği göründü ilk ne yapılır.
• Son anda bir scope ilavesi gerekti(bunun kapsamda baştan olması gerektiği söylendi/kapsama göre yanlış yapıldığı söylendi) ilk ne yapılır?
• Son anda bir değişiklik gerekti…
• Gidişatın kötü olduğuna dair bir tahmin var ne yapılmalı…
• Daha planlama tamamlanmadan bir değişiklik oldu(yeni bir stakeholder ortaya çıktı, objective’ler değişti vs. ) ne yapılmalı…

Change management: Charter,  scope statement, WBS, SOW ile ilgili konular (Birisi scope’da olduğundan iddialaştı ya da scope’un objective’leri yansıtmadığını söyledi … nereye bakılır/ilk ne yapılır, neresi nasıl değiştirilir…)

“Identify, determine impacts, determine options” in real life!

C(Conflict management, Communications Management, Stakeholder Management, Risk Management, Change Management, Procurement management)

Stakeholder management vs. Scope management vs. Change management.

Risk management: Contingency reserves, risk register, toplantıda yeni bir durum tespit edildi; 2 gün içinde mutlaka çözülmesi gerekiyor; ne yapılmalı? ilk? risk register’a mı eklenmeli vs. issue log’a mı eklenmeli.

Procurement‘ta vendorlar arası conflict’lerde ilk yapılacaklar…tabi ki kontrat tiplerine göre; ama ilk kontrata mı bakılmalı, toplantı mı yapılmalı; ne/nasıl yapılmalı. kontrat tiplerinin tradeoff’ları…

Stakeholders management ve communications management arasındaki farklarla ilgili durumlar.

Kick-off meeting de buna dahil edilebilir; bu gerçekten önemli. (Stakeholders vs. World) ayrıca roller(sponsor, customer, team vs. )

Critical Path değişiklikleri veya schedule compression:

Resource leveling, crash, fast-tracking vs.; her birinin trade-off’ları ve kullanılabileceği durumlar.

Bunları kullanmayla “human resource management”ı ilişkilendiren situational sorular: Yeni bir kaynak gerekti ya da bir kaynak ayrıldı; hangi adımlarla elde edilir….

Closing‘deki her bir yapılan önemli… Hangi sırayla, kiminle, hangi araçla ne yapılır. Lessons Learned konusu basit gibi görünse de önemi, sırası hem Closing hem Initiating’de önemli..

Organizational process assets, neler tam olarak nerede hangi araçlar. Basitmiş gibi görünse de ayrıntılı olarak bilmek gerekir. A

Quality management: Genellikle situational sorular ve hangi teknik kullanılır: Fishbone, Control chart, Scatter diagram, Pareto vs..Risk management ile de ilişkilendirilmiş durumlarda composite halde sorulabilir: Çok sayıda defect var; durum çok vahim ilk ne yapılmalı? Şunun şuna etkisini kontrol etmek istiyorum hangi tekniği kullanmalıyım?

Cost management: EVM(Earned Value Management): Genellikle EV, AC, PV verilip “behind/ahead schedule, below/above budget” olup olmamasının tespiti…

Bu bağlamda, cost-benefit analysis vs. hangi teknikler/araçlar kullanılır…

Time management: Sequencing/Scheduling ile ilgili de basit sorular vardı; yani bir critical path oluşturup sonra float vs. hesaplama soruları yoktu.

Filed under Life

## As a programmer, what tasks have you automated to make your everyday life easier?

As a programmer, what tasks have you automated to make your everyday life easier? by @ohmyroots

Ruby and Python are really fun programming languages for this kind of stuff.

Here is a rather crude birthday bot that i wrote in like 10 minutes that wishes your facebook friends on their birthday.

require 'watir-webdriver'
@config = {
birthday: '/events/birthdays',
day: 86400,
wish: 'Wish you a very happy birthday! :)'
}
@account = {
}

@locator = {
email_id: 'email',
}

while true
@b=Watir::Browser.new :phantomjs
@b.driver.manage.window.maximize
@b.goto(@config[:url])
@b.goto(@config[:url] + @config[:birthday])
birthdays = @b.textareas
birthdays.each do |birthday|
birthday.set @config[:wish]
@b.send_keys :enter
end
@b.close
sleep @config[:day]
end


UPDATE:

How do you use it?

If you are using mac, you will already have ruby installed on your machine. Considering you also have homebrew on your machine, you should do the following steps in your terminal

$gem install watir-webdriver$ brew install phantomjs
$ruby birthday.rb &  The bot keeps running wishing everyday until you kill it If you are using windows, install below for ruby and phantomjs Run the follow commands in command prompt $ gem install watir-webdriver
ruby birthday.rb &


If you are using debian based linux system

1. Install phantomjs following this link How to install PhantomJS on Debian/Ubuntu (How to install PhantomJS on Debian/Ubuntu

2. Install ruby

$\curl -L https://get.rvm.io | bash -s stable --ruby  3. Then $ gem install watir-webdriver

4. Switch on the bot \$ ruby birthday.rb

The bot keeps running wishing everyday until you kill it

As a programmer, what tasks have you automated to make your everyday life easier?

Filed under Life

## As a programmer, what tasks have you automated to make your everyday life easier?

As a programmer, what tasks have you automated to make your everyday life easier? by @architv07

• I am a big football fan. It often happens that there is a live football match but I also have some work to do. So I sit down with my laptop to do the work but end up switching to the browser to check the scores every couple of minutes. To solve the problem, the idea of creating soccer-cli came to me. It's a simple command line app to get live football scores, standings, team scores. It's open source, check it out here architv/soccer-cli
• I used to participate in a lot of online programming contests(I still do, but not so frequently). These challenges happen on a number of websites like hackerrank, codechef, spoj, hackerearth etc. Every time I had to visit each of the website seperately to check whether there was a programming challenge taking place. To automate the process, I created an open source online programming challenge aggregator Challenge Hunt. Code: ChallengeHunt/challengehunt

As a programmer, what tasks have you automated to make your everyday life easier?

Filed under Life

## As a programmer, what tasks have you automated to make your everyday life easier?

As a programmer, what tasks have you automated to make your everyday life easier? by @rajani_tanmay

Ah! This is something I do on a regular basis. I always look forward to find a way to automate things which I have to/want to do but are repetitive in nature.

• April 2017: I’ve been addicted to StackOverflow platform lately. I've recently built a Messenger ChatBot that sends unread StackOverflow inbox and reputation changes to you.

Motivation was to avoid needing to open app / website even now and then (from phone / desktop) to see whether your question got answered or answer got upvoted / accepted or whether someone replied to your question / answer.

Stackb0t is live at m.me/stackb0t (GitHub repo)

• March 2017: At work, most of us need to fill timesheets on a regular basis. So, I built a timesheet filler script using a high-level browser automation library called nightmare. Though, script was meant for a particular timesheet webapp only (available on my GitHub tho!)
• October 2016: I am a movie buff. I watch plenty of movies. But I had to google it (and than IMDb and all) every time I wanted to know about a movie.

Solution? My first chatbot, Cinephi1e, it suggests movies, provides plot summary.. things like that. It uses a combination of TMDb and The Open Movie Database APIs to interact with you.

Cinephi1e is live at m.me/cinephi1e (GitHub repo)

• 2015: I used to follow a daily blog named F***ING HOMEPAGE. They used to post an image of the day which used to blow my mind everyday. So, I used to download the image almost everyday and have it as my desktop wallpaper. But, duh! That’s so boring and damn repetitive, no?

Solution: Built a NodeJS app that scraps the blog, gets the image of the day and puts it into a Google Drive folder everyday.

Next, I pointed my wallpaper directory on windows to this drive folder and boom! I had image of the day in my wallpaper rotation 🙂

Though, my app is currently inactive, but here’s the collection of images it made during those days. And, GitHub repo.

Also, one of my friends created A windows theme out the images collection.

Answering again on Quora after long today.. Might have lost my charm 😀

Anyway, good to share my stuff which could be helpful to others.

Peace! 🙂

As a programmer, what tasks have you automated to make your everyday life easier?

Filed under Life

## Is it time for us to dump the OOP paradigm? If yes, what can replace it?

There are two key goals in designing a programming language: decreasing coupling while increasing cohesion. That is, you're trying to split the problem "at the joints", where the parts that are naturally connected to each other stay connected, while the parts that can be swapped out are connected only at well-defined interfaces.

There are two key goals in designing a programming language: decreasing coupling while increasing cohesion. That is, you're trying to split the problem "at the joints", where the parts that are naturally connected to each other stay connected, while the parts that can be swapped out are connected only at well-defined interfaces.

The fundamental unit of programming is the function, e.g.:

foo(a,b,c) -> d

A function wraps up some chunk of functionality and assigns it a name. Hopefully, you don't have to peer inside of it: you can deduce as much as possible about it from the name and its signature: "It takes as, bs, and cs, and foos them to make a d".

What you find with many functions is that the first argument is special. You end up reading it as "You take an a, and you foo it with a b and a c, to make a d".

This is the fundamental concept behind object-oriented programming: you declare that the first argument is special and say, "I'm going to split the world at that joint. I'll even make a special syntax for it":

a.foo(b,c) -> d

If you've split the world correctly, you can find other functions that also have more "a"-ness to them, and put them together. If your language is stateful, you can let these functions unpack that state for each other, which forces them to be tightly coupled but at least controls the scope of that coupling.

Note that what we're talking about here is really psychology rather than computer science. The joint-splitting happens because it's how people naturally perceive the world. The human mind is fundamentally object-oriented, though people don't always realize that their objects and other people's objects aren't always the same ones. There's nearly always more than one way to look at the world, both the natural one and the artificial one that computers created for themselves (windows, file systems, etc.)

And, as the question observes, sometimes you really don't find a natural joint-splitting at all. You end up perceiving it in terms of functions. However, the larger the problem is, the more necessary it will be to find some way to split it. Even if the joints don't correspond to natural divisions of the world, they may correspond to the natural divisions of progammers working on the same project. One may have expertise in back ends, others in computation, others in display. You will still need to follow the properties of coherence and coupling, and object-oriented languages provide you a way to do that based on the natural human metaphor of putting things into boxes and hiding the details from the outside.

There is also mental baggage that comes from that, which is why small, one-shot programs tend to find the object-oriented paradigm cumbersome. Object-oriented paradigms tend to assume (without even realizing it) a natural flow-of-control, which can interfere when you try to adapt it to some other control mechanism (which is becoming increasingly common, as frameworks demand that you adhere to their flow of control rather than a library which follows your flow of control.)

I don't think OOP is going away any time soon. A more prominent trend, I believe, is going to be for transactionalism to begin to take center-stage. I'd like to see the distinction between short-term and long-term memory smudged (eliminating the embarrassing impedance mismatch problem of talking to long-term storage in a different language from your in-memory processing).

Is it time for us to dump the OOP paradigm? If yes, what can replace it?

Filed under Life

## How does the Chinese Remainder Theorem work?

How does the Chinese Remainder Theorem work? by Sujith Vijay

Let  us start with a totally different problem. Suppose you want to find the  polynomial of least degree satisfying $p(1)=8, p(2) = 13$ and $p(3) = 34$.

We write $p(x)=p_1(x) + p_2(x) + p_3(x)$ where

$p_1(1)=8 \quad p_1(2) = 0 \; \; \quad p_1(3) = 0$
$p_2(1)=0 \quad p_2(2) = 13 \quad p_2(3) = 0$
$p_3(1)=0 \quad p_3(2) = 0 \; \; \quad p_3(3) = 34$

These subproblems are easier. Clearly,

$p_1(x)=c_1(x-2)(x-3)$
$p_2(x)=c_2(x-1)(x-3)$
$p_3(x)=c_3(x-1)(x-2)$

Using  the data given, we get $c_1=4, c_2=-13, c_3=17$ and  $p(x)=8x^2-19x+19$. The technique we used is called Lagrange interpolation.

Chinese Remainder Theorem works in a very similar way. Consider the problem you have posted.

$x \equiv 3 \; \rm { mod } \; 5$
$x \equiv 5 \; \rm { mod } \; 7$
$x \equiv 1 \; \rm { mod } \; 9$

We write $x = y_1 + y_2 + y_3$ where

$y_1 \equiv 3 \; {\rm { mod }} \; 5 \quad y_1 \equiv 0 \; {\rm { mod }} \; 7 \quad y_1 \equiv 0 \; {\rm { mod }} \; 9$

$y_2 \equiv 0 \; {\rm { mod }} \; 5 \quad y_2 \equiv 5 \; {\rm { mod }} \; 7 \quad y_2 \equiv 0 \; {\rm { mod }} \; 9$

$y_3 \equiv 0 \; {\rm { mod }} \; 5 \quad y_3 \equiv 0 \; {\rm { mod }} \; 7 \quad y_3 \equiv 1 \; {\rm { mod }} \; 9$

Once again, the subproblems are easier. We have,

$y_1 = 63z_1 \equiv 3 \; \rm { mod } \; 5$
$y_2 = 45z_2 \equiv 5 \; \rm { mod } \; 7$
$y_3 = 35z_3 \equiv 1 \; \rm { mod } \; 9$

This solves to $z_1 = 1, z_2 = 4, z_3 = 8$

$x \equiv 63 + 180 + 280 \equiv 208 \; \rm { mod } \; 315$

Thus the smallest positive integer satisfying the given set of congruences is $208$.

How does the Chinese Remainder Theorem work?

Filed under Life

## What is a permutation?

What is a permutation? by Mike Kayser

Informally: A reordering.

If I have three objects arranged in a line on the table, there are 3!=6 ways to order them in that line. (Three ways to pick which one is on the left, times 2 ways to pick which one is in the middle, times exactly one way to pick the one on the right).

Formally: a bijection from a set to itself.

• A bijection in general is just a map from $X$ to $Y$ where:
(1) every element of $Y$ got mapped to by some element of $X$ (surjective), and
(2) each element of $Y$ doesn't get mapped to by more than one element of $X$ (injective).
• That's the same as saying that every element of $Y$ got mapped to by one and only one element of $X$.
• In a bijection $f$ from $X$ to $X$, you can think of $f(x)$ as meaning roughly "where do I put $x$?" and as $f(x)=y$ as meaning "I put $x$ in $y$'s old position."
• The bijective property we mentioned above is equivalent to ensuring that every "old position" is the "new home" for exactly one object in the set.

What is a permutation?