Log in

No account? Create an account
Dennis Gorelik
16 September 2017 @ 01:05 pm
Muhammad contacted me on LinkedIn:
M: Hi Dennis,
As one of my connections, I wanted to quickly reach out to see if you have any current or future opportunity for me?
I am based in Islamabad Pakistan.
{Long list of buzzwords and self-praise skipped}
D: What's your hourly rate?
M: Hi Dennis, thanks for your response.
I am happy if I can get $40+ /hr. Incase of remote opportunity $20/hr is good.

We chatted on LinkedIn a little about his participation in nTaskManager project.
I pointed out to a misspelling in his resume "Windows Azuer" (which is not a good sign), but he fixed it (which is a good sign) and said "thank you" for that.

I was not able to get answers from Muhammad to my specific technical questions and was considering dropping it, but Muhammad offered to talk on Skype.
So I decided to try and see what would happen. In particular, my goal was to learn how text chat correlates with voice conversation over Skype.
Muhammad proved to be consistent: he could not answer my specific tech questions in text chat, and he could not answer my specific questions in our voice conversation.

Transcript of our voice interview
D: Hi Muhammad.
M: Hi Dennis, how are you.
D: Let’s start with question about email that this nTask sends (*1). Did you create this email?
M: Actually, I created this with the team. It was not only my task. I think it was team of 5 persons. I see your screen.
D: So, yes, I’m talking about this email. Did you participate in any way in creating this email.
M: Actually, my participation was only technical: creating technical design, ..., creating technical implementation , ...
D: So, did you do anything about this email. Anything. Any activity. Did you put any work into this email?
M: There are 2 things: one is content and second one is how email is being sent. What I implemented is to send emails. This email template was designed by our designer, and content was designed by the owner of this application. My role was to write code, so this email will be sent.
D: When this code was (*2) ... are you saying you wrote code that was sending this email? Or you are not saying this? Or you did not do it?
M: Sorry, I could not get what you said.
D: Did you write the ... I still cannot understand what you did here. Did you do anything here? Or you actually wrote code for sending this email. Or was it somebody else who was doing it?
M: I was writing the code.
D: You were writing the code. Ok. How many developers were writing code that sends this email?
M: I had one front-end developer...
D: Uh-huh.
M: ... and one SQL guy with me, and I was only backend developer. And the code was written in C#. And we were using Mongo DBs database.
D: So could you explain, in this email, what was the backend work and what was the front-end work, and which part did you do, specifically? In this email.
M: Actually, as a backed it is, actually MVC single-page application. And this is using ...
D: [Interrupting] Ok, now you mention MVC. Single page application. What does it have to do with MVC? Like this email – what does it have to do with MVC?
M: Actually, MVC is the main framework for this.
D: What do you mean? Are you saying you are using MVC in order to create email?
M: No-no-no. Definitely there is an application. It’s a complete architecture. Having multiple ... for database, operations, sending emails...
D: So, we are talking specifically about email. Do you understand it, right? We are talking specifically about sending email. I am asking you specifically about this email. You were mentioning MVC. Why were you mentioning MVC in the context in the email?
M: Sorry, I were talking about overall architecture ...
D: [Interrupting] No, we were not talking about overall architecture. I was talking, specifically, about this email. I am not talking about overall architecture. Did I say “overall architecture”?
M: N ... this specific email – there is nothing special, just Microsoft [unclear] just register. Request will go to the server. Once your account is created. And we are sending email to just verify you enter your own email address, to avoid spamming.
D: Uh-huh.
M: There is not special, there is just as way for emails.
D: Ok. And?
M: What do you mean “and”? ... I think there is nothing special or complicated in sending email.
D: Ok, Muhammed, here’s what I noticeD: you do not answer my questions. Ok? It looks like you do not even understand them.
M: Sorry, can you repeat the question?
D: I asked you several questions. During this conversation (while we are talking for, like, 3 minutes now) I asked you several questions. You answered almost none of them.
M: Yes, can please start with one by one. I will be answering.
D: All right. So, one of my question was: “Did I ask you to talk about overall architecture?”.
M: Eh, sorry, I was talking about what is the overall implementation of this project. And you asked me what was your role. I was talking about my role. My role was to create an architecture.
D: Ok, it looks like you, again, did not hear my question. Could you repeat my question before you answer that? (*3).
M: Sorry, actually, when we were talking about few seconds ago, and you just asked what was my role. And my role was from multiple tasks. So, I talked about the architecture and MVC-like things in the context of my role.
D: So, context of your role... Context of your role in what? What do you think I asked you?
M: Actually, I understand it was, there you wanted to ask me what was my role on this application, and I was just explaining my role on this application.
D: On “this” – on what “this” application? What do you mean under “this” application?
M: “This application” means “nTaskManager”.
D: I did not ask you that! I did not. I asked you, specifically, about this email.
Ok, Muhammad, I think there is no point to waste the time. I see what would happen going forward. You do not understand my questions – we are not able to work together. Thank you.
M: Thank you.
D: Bye.

Foot notes
(*1) - The email subject is "Complete your nTask Registration". Email messaging is very important for my business, so I decided to start conversation with it.
(*2) - I started asking Mohammad about "when this code was written", but then changed my mind mid-sentence and moved on to the question that focused on his role in creating this email.
(*3) - At this point I sound noticeably angry, and that makes Muhammad a little bit nervous.

What do you think: if interviewee is not able to repeat my question and instead talks about a different topic - is it reasonable to terminate interview at that point?

Originally posted at: http://dennisgorelik.dreamwidth.org/140548.html
Dennis Gorelik
12 September 2017 @ 03:36 pm
Electricity came back yesterday after ~16 hours of downtime.
AT&T brought Fiber Internet back today after ~35 hours of downtime.

T-mobile had phone and mobile Internet connection without downtime. I wish all services were working without downtime like that.
After all it was only Category 1 hurricane when it reached us, which is not a good excuse to lose services.

Originally posted at: http://dennisgorelik.dreamwidth.org/140527.html
Current Location: Austin Park, Florida
Dennis Gorelik
10 September 2017 @ 05:36 am
I asked my (PostJobFree) contractor why he did almost no work recently.
According to that contractor explanation, one of his key reasons not to work was that he did not get paid for over a year.
I reminded him that he did not send his invoice (with the summary of what was done), and, according to our agreement - I pay when he sends such invoice..
The contractor agreed that he did not send the invoice, but still insisted that the lack of payments was demotivating.

Would you struggle with sending your work summary in order to get paid?

Originally posted at: http://dennisgorelik.dreamwidth.org/140134.html
Dennis Gorelik
09 September 2017 @ 04:28 pm
Polk County sheriff tweeted a controversial warning:

Map of Polk county

Street view of the Sherrif office and Jail

Originally posted at: http://dennisgorelik.dreamwidth.org/139843.html
Dennis Gorelik
08 September 2017 @ 02:16 pm
We are using Amazon SES to send over 10M emails per month.
This is cheap and reliable service, and overall I like it.
However customer support is poor.

Recently, Amazon SES team removed 2 important graphs from their SES dashboard: "Bounce rate" and "Complaints".
Apparently, Amazon SES team decided that customers would be happier to build their own reports on buggy CloudWatch instead of using already prepared report.

I complained that "development" on AWS forum, and here is the reply:

The proposed solution - does NOT work.

To add an insult to the injury, AWS forum does not allow me to reply yet with a message: "Your message quota has been reached. Please try again later."

Here is my forum reply that I am NOT able to post on AWS forum yet:

1) Thank you for trying to help.
I followed your steps and this produced two graphs to me.
Both graphs have constant horizontal lines at 1.00 level.
So, pretty much, both graphs are totally useless.

Should I use instead different "metrics" instead of "Bounce" and "Complaint"?
"Reputation.BounceRate" and "Reputation.ComplaintRate" perhaps?

2) Do you know why Amazon SES Team decided to make us (its customers) to jump through the hoops of creating these awkward custom reports instead of just keeping already existing functionality?
This exercise is time-consuming, and while I am troubleshooting cloudwatch app - I am NOT building my own app that pays the bills for all of us.

3) "Your message quota has been reached. Please try again later. " ... this is my second message (and the first message in ~12 hours).
It looks like Amazon SES Team is not eager about receiving feedback...

Accidentally, few days ago I received email from SendGrid rep that suggested me it may be a time to switch away from Amazon SES to SendGrid in order to get a superior customer support.
I asked SendGrid rep what kind of support I may need, got no clear reply. But Amazon SES team seems to be happy to prove their competitors right.

See also: https://dennisgorelik.dreamwidth.org/tag/amazon+ses

Originally posted at: http://dennisgorelik.dreamwidth.org/139762.html
Dennis Gorelik
01 September 2017 @ 12:04 pm
In "Double.NaN != Double.NaN" discussion, [personal profile] ppk_ptichkin linked to Ariane 5 investigation.

My conclusions based on that investigation:
1) Delete unused code from the solution.
2) Make sure that the application is still functional, even in case when an exception happens.
3) Do integration tests.

e) At 36.7 seconds after H0 (approx. 30 seconds after lift-off) the computer within the back-up inertial reference system, which was working on stand-by for guidance and attitude control, became inoperative. This was caused by an internal variable related to the horizontal velocity of the launcher exceeding a limit which existed in the software of this computer.

f) Approx. 0.05 seconds later the active inertial reference system, identical to the back-up system in hardware and software, failed for the same reason. Since the back-up inertial system was already inoperative, correct guidance and attitude information could no longer be obtained and loss of the mission was inevitable.

g) As a result of its failure, the active inertial reference system transmitted essentially diagnostic information to the launcher's main computer, where it was interpreted as flight data and used for flight control calculations.

h) On the basis of those calculations the main computer commanded the booster nozzles, and somewhat later the main engine nozzle also, to make a large correction for an attitude deviation that had not occurred.

i) A rapid change of attitude occurred which caused the launcher to disintegrate at 39 seconds after H0 due to aerodynamic forces.


m) The inertial reference system of Ariane 5 is essentially common to a system which is presently flying on Ariane 4. The part of the software which caused the interruption in the inertial system computers is used before launch to align the inertial reference system and, in Ariane 4, also to enable a rapid realignment of the system in case of a late hold in the countdown. This realignment function, which does not serve any purpose on Ariane 5, was nevertheless retained for commonality reasons and allowed, as in Ariane 4, to operate for approx. 40 seconds after lift-off.

n) During design of the software of the inertial reference system used for Ariane 4 and Ariane 5, a decision was taken that it was not necessary to protect the inertial system computer from being made inoperative by an excessive value of the variable related to the horizontal velocity, a protection which was provided for several other variables of the alignment software. When taking this design decision, it was not analysed or fully understood which values this particular variable might assume when the alignment software was allowed to operate after lift-off.

o) In Ariane 4 flights using the same type of inertial reference system there has been no such failure because the trajectory during the first 40 seconds of flight is such that the particular variable related to horizontal velocity cannot reach, with an adequate operational margin, a value beyond the limit present in the software.

p) Ariane 5 has a high initial acceleration and a trajectory which leads to a build-up of horizontal velocity which is five times more rapid than for Ariane 4. The higher horizontal velocity of Ariane 5 generated, within the 40-second timeframe, the excessive value which caused the inertial system computers to cease operation.



On the basis of its analyses and conclusions, the Board makes the following recommendations.

R1 Switch off the alignment function of the inertial reference system immediately after lift-off. More generally, no software function should run during flight unless it is needed.

R2 Prepare a test facility including as much real equipment as technically feasible, inject realistic input data, and perform complete, closed-loop, system testing. Complete simulations must take place before any mission. A high test coverage has to be obtained.

R3 Do not allow any sensor, such as the inertial reference system, to stop sending best effort data.


Originally posted at: http://dennisgorelik.dreamwidth.org/139374.html
Dennis Gorelik
27 August 2017 @ 11:53 pm
Google Cloud Platform performs with pathetic 99.8% uptime - worse than the cheapest hosting providers.
Last month we got 326 crashes out of 172,922 API requests.

See also:
Google Maps API team wants to get paid more
Decline of Google Maps team

Originally posted at: http://dennisgorelik.dreamwidth.org/139194.html
Dennis Gorelik
Today Moon's shadow is going to cross from Pacific to Atlantic coast of the US in 90 minutes:

It takes passenger jet 3.5 hours to fly the same distance (e.g. from San Francisco to New York)

We (in Ponte Vedra, FL) are going to see only partial ~90% solar eclipse.
San Francisco is going to get 75% of the eclipse 90 minutes ahead of us.


Originally posted at: http://dennisgorelik.dreamwidth.org/138853.html
Dennis Gorelik
12 August 2017 @ 01:43 am
I think it's more likely that your "great programmers" simply understand the difference between the same functionality and accidentally similar functionality. The latter is where you have two use cases that are very similar, so you spend all this time deduplicating. Then one of the use cases changes... The correct response would be to duplicate the code again, because the two use cases are no longer similar. In reality, they should have never been combined in the first case. They weren't the same; they were only accidentally similar.
But instead what you usually see is minor tweaks to the common functions. Pass in a flag here, tweak the inputs there, add an if statement over yonder... And before you know it, it's all a terrible tangled mess that is full of branches and technical debt. The two use cases have the same functions, but don't even follow the same branches within the functions.

Originally posted at: http://dennisgorelik.dreamwidth.org/138616.html