Dialogue’s Guiding Principles, or a Healthy Hatred of OOP two chain links

Dialogue’s Guiding Principles, or a Healthy Hatred of OOP two chain links

Well, it will be interesting to read the post.
However, I found out that problems among US programmers in terms of C++ is that they follow C++ techniques or new syntax etc, which are just supplemental rather than keeping philosophy of OOP and meta-programming.
Syntax-sugar is good. But problems of C++ is that ( don’t misunderstand that. As you can see I’m a long-time C++ programmer and I liked its initial paradigm a lot. ) a lot of features have been added to C++ for the sake of convenience ( with difficulty of using it ) or more power. People, who just judge others’ knowledge on C++ just by asking terminology and features, thus missing core values, love to use any new features.
Knowing such things are good and beneficial, but not always.
I’ve worked on pSosystem at Samsung and other systems where the greatest and the latest C++ features were omitted intentionally for the purpose of the system or unintentionally (just old C++ compiler). If people just stick to the greatest and latest feature and when exposed to such system, they are embarrassed often.
So, I’m always in the attitude of choosing common ground, which maximizes compatibility of source code and your knowledge compatibility.

Anyway, folks. Knowing more terminology and new features will make look more knowledgeable person especially here in the US due to its culture, but actually it’s not. What is more important is to know why you need to use this or that, philosophy behind of a language you choose, etc.

Here I see Objective-C code which is not written by people who understand Objective-C philosophy. They argue that they know, but if you see such code, ou will be able to see that they don’t understand the philosophy.
They oppose Objective-C or any other language without understanding their philosophy. Criticism can be good only and only if people criticize after understanding philosophy or background history on why this language/system is designed as such.

So far, my experience here in the US is that when interviewers were too picky and just judges people by asking if the interviewee knows(memorizes) one thing, I usually found out that their source code were dirty and messy in every angle.
If an interviewee is not a liar or a salesperson who wants to sell himself rather than an engineer, they tend to memorize terminology etc. But if they are engineers, they know but at the moment of being asked, they may not answer the interviewers question. It’s not because they don’t know about the answer, but they can guess something else.

For example, I’ve been asked like “implement this thing using STL.”
Well, I use Win32 collection APIs, Cocoa/Core Foundation collection APIs and also STL. Also I use boost. They are similar. If you happen to use Win32 collection API for the week when you are interviewed, you can temporarily forget STL. But if you look up document, you can quickly write in STL. Then doesn’t he know the STL?

Here in the US, although they say they are Objective-C programmer, they write in C++ and STL mostly. So, they can remember STL syntax.

I’m different. When I implement Win32 code, I stick to Win32 stuffs mostly. When I implement Cocoa/Core foundation code, I stick to them.
If I need to implement something common code, which I may need to use on Window / Mac / iOS/ Unix, I write with pure C/C++/STL. Then, I can temporarily forget one syntax. But does it mean that I don’t know about it?

I’m versatile person. However, the way US people interview others are not like that and they stick to one thing and say they are “the other” programmer.

Another example is … I’m asked how to implement XOR in C++ while being asked about bit-wise operations. So, I told him it’s ^ operator.
He said “No.”
Actually in the conversation, he jumped from logical operation and bit-wise operation. So, I wonder why he said “No.”
Well, what he wanted “DeMorgan’s law” to express logical XOR.
Damn.. then he must be clear on that.
In Korea, DeMorgan’s law is taught in middle school. Everybody knows DeMorgan’s law. Well, actually what is taught here in the US are mostly taught in middle school or high school like calculus, probability etc. Well. some are taught in here too in high school. But compared to the level of things taught in Korea, well here.. I understand why Obama mentioned education in Korea, although I oppose to his intention.
Anyway, then he treated me like a person who doesn’t know C++.

What the..

LLVM based just-in-time compiler for C++


Raw Key Code for Function Keys

I figure out key codes for function keys from F1 to F12 on Mac.

  • F1 : 122
  • F2 : 120
  • F3 : 99
  • F4: 118
  • F5: 96
  • F6: 97
  • F7: 98
  • F8: 100
  • F9: 101
  • F10: 109
  • F11: 103
  • F12: 111

They are not related to ASCII table at all.
Code marked as ‘solution’ or ‘answer’ here doesn’t care of them. They are all converted to a printable characters, ^P. So, a table created with the method in the StackOverflow can’t differentiate each of the function keys. So, if you want to differentiate them, customize value saved there using the table above.

It turned out that the database solution, 4D, also had such values for the function keys.
So, it says that the values above is not only specific to my keyboard, Logitech  K760.

(It’s surprising that 4D is still alive.)

parent selector in Chrome as of today

parent selector in CSS is said to be included in new CSS draft as has() class. A stack overflow comment mentions about it.

Also, on this blog, the author says a reverse selector or parent selector is available with IE and WebKit-based browsers. Chrome was a WebKit-based until Google exited from the WebKit herd. However, in many document, Chrome is mentioned as WebKit-based and there are still lots of WebKit-ness there.
However, as of today, on my Chrome browser on Windows, this parent selector, <, is not available.The version of Chrome browser on my machine is Version 47.0.2526.106 m.



Way to figure out if a target memory is good to read/write?

Hmmm… IsBad*Ptr() functions are deprecated in Win32 API! Ok.. but what if you need it? Actually there is no reliable way to figure out if a pointer is valid or not. If you suffer such problem, it should be fixed at the caller side or the side where it prepared the pointer.

But.. what if you really need it even though you sufficiently considered that?
What if some external code gives you a bad pointer?

Here is a good blog post, “There is no point improving the implementation of a bad idea.”

There is a simple drop-in replacement and it’s.. reasonable.

Windows 10 can be run on Raspberry Pi!

This is great movement by MS.

Unix programming on this kind of one board PC is interesting enough to people like me, but for most of people, if things can be developed as Windows app, it can attract more audience!

Now, because MS Windows has a build for ARM, they finally allowed to run Windows 10 on Raspberry Pi AND you can develop app with Visual Studio!

It’s great!!!!

it can be also great ‘learning’ kit for Windows device developers.
Well, I know, I know. There is no good reference book for developing Windows device drivers. MS’s own one is too old, and some info there can’t be even applied.
However, at work, your managers can be people who don’t major in Engineering or Computer Science. So, they would think like “This is S/W program, and you are a S/W engineer. Why can’t you implement it?”
it’s not usual case S/W developers put their hands on device drivers. It’s usually done by people who major in EE, not CS or CSE.
(Well, nowadays, even CSE folks can do it, because embedded programming was now included in their curriculum.)
Also, device driver development requires information about target H/w. For example, when you want to write your own mouse driver for some logitech mouse, You may not be able to get information about the target device. there are some common interface, but may not.
(Think of web cams, for which standard was not fully prepared or even though there was standard, it was difficult to get informaiton on it. – remember MACAM? )
Also, a person who never developed device driver don’t know what information he needs.

But anyway, with this kind of device, at least people can try and play. Well.. yes. You can also study such stuff with normal PC box, but Raspberry Pi would encourage you to do so more because it would not have device drivers you want use with the raspberry pi. :)

Marketting effort based on wrong information

Well, this topic is not about programming, but because it’s related to determining what platform, API, SDK or whatever you need to choose for upcoming projects, I would like to talk about it.

A few years ago, I worked for a company. They didn’t have good idea on S/W development. They IMPLIED that they had a S/W development team and I will be a lead engineer, but when I joined, it turned out that it was not. They had a group of people, but what they do is IS. they wrote code for business-oriented intranet web site. I’m not saying that they are not S/W engineers. However, they are not S/W engineers for S/W products. So, the way they work, attitude they had, and so on were different from those S/W engineers for S/W products usually have.

Their agile is focused mostly on scrum instead of sprint or engineering topic like what to implement, how to implement, what’s the goal etc. In other words, theirs is more about how to build up people and how to spend time just like construction workers rather than engineers who need to solve problems and thus implement functionalities.

People here in the US look to be mostly driven by ‘charaterism’ or memorizing definition. They don’t seem to have an eye for seeing a person whose knowledge is already melt into him and his working style and knowledge became himeself already. If you are not a fresh graduate, you can forget definition. However, your body knows them. People here don’t seem to see it.

I was the person who was exposed to Agile development ‘technique’ in its early stage in early 90’s. I met some of original people who brought up the idea. At that time, people with S/W engineering in their major didn’t call Agile as ‘methodology’ but called it as ‘technique’. There are good reason. Agile is technique which amend spiral development methodology.
Actually Agile was practiced a lot in S.Korea whether people realized that they pursued it or not. I met some people at that time, who happened to say “Well.. it’s the technique we already adopted and used!”
Yes. It did. However, people in academia built some castle around it to fortify their ‘profession’ and made it sound like something ‘professional’. It’s usually the moment people start to introduce ‘terminology’. Although concept is nothing new, by making ‘terminology’ they start to make people who don’t adopt or know the terminlogy a stupid or ignorant on that issue. Of course, ‘terminology’ is important to share idea. By using common ‘words’, communication becomes clearer. However, making ‘terminology’ serves for other purpose also. And nowadays this aspect looks to prevail. It’s to make people who already know what they are but don’t know the terminology unprofessional and ignorant.

However, don’t play that game. Respect others in engineering. People even can use same terminology to mean different things or use different terminology to mean the same things. So, terminology is not the key. What matters is their meaning and philosophy what the interested topic means to be, like Agile development.

Hmmm.. I’m sorry. It looks to me what I talked so far is kind of off-topic.
However, it’s related.

What I noticed is that some group of professional ‘marketing’ people tried to sell their idea by propagating false information.
They said like, “Apple will give up Mac. Take a look at what Apple is doing! They don’t announce newer Mac Pro! We have heard that Apple will stop developing Mac in favor of their iOS platform.”

Well… It’s true that Apple didn’t touch Mac Pros and other Mac quite for a while when they said as such. Although Apple updated MacBook lines and iMacs, but those updates were minor ( which is quite common in PC world, like just to upgrade memory, CPU and so on ). To make things worse, Apple didn’t update their Mac Pro line for a while.
However, after several months Apple introduced the cylindrical Mac Pro.
They rethought about the Mac Pro. I liked the old Mac Pro, because it’s more expandable and have lots of expansion options with lots of internal bays and their design allowed each replacement of components.
However, with the new cylindrical Mac Pro, they introduce some cool factors, but diminishes flexible expandability. The trend followed by prohibiting memory upgrade by soldering memory on their motherboards for MacBooks and even Mac mini! Their rationale was that ‘Thunderbolt’ can serve for the most needs for ‘expandability’.

Wait. Doesn’t that sound familiar?

Apple II vs. Mac

Mac introduces ‘ports’ and closed the lid, while Apple IIs provides many internal slots. Apple IIgs provides Mac-like ports as well as Apple II’s slots which was strong sales point for Apple II under the name of ‘openness’
Later, Mac had SCSI ports, which was way more expensive than internal upgrade option like IDE etc available in IBM compatibles at that time.
Well, as a person who knew the technology, SCSI was superior, but more expensive. It can be a ‘must’ option for some high-end market, but for the most of people, it’s a hindrance.

Anyway, whatever happening in Mac was enough for those marketing people to say “Apple is migrating from Mac model to iPad model and will eventually give up Mac.”

Well… then how about Xcode? To develop apps for iOS, they needed a computer. Well.. yes. NeXTStep, White NeXT, OpenStep. Apple can always introduce Xcode on Windows. ( Actually there were rumors on it! )
It’s possible scenario.

However, it was not clear at that time. However, those marketers pitched with that ball very hard and the company I worked for at that moment was filled with people who didn’t like Apple. So, they could be easily bought by such false marketting.

Depending on other companies’ future is very risky. So, it’s the moment to bring up ‘inner talk’ with the ‘other’ company, which is Apple. My upper manager should have contact Apple directly if the company was serious about the futrue of Mac platform. It also applies to Windows nowadays too. I remember that Windows 10 is the last Windows several months ago, although nobody looks to care about it.
But they didn’t. I wonder if they had strong will to pursue the project they intended to do at first.

I wonder how they, the marketers who visited the company I worked for at that moment, think now. Will they be ashamed of themselves? No, I don’t think so. If they are such people, they wouldn’t throw what they think inside their mind that easily. They were anyway people who tried to promote their solution to the company I worked for anyway. So, it could be clever ( I can’t call it wise ) strategy for them. It’s just foolish that ‘our’ people were bought by them so easily.

I’m Korean. Koreans are not so showy as Americans or people who have background in some other countries. However, here in the US, if I confront other people without by talking much like we usually do in Korea, thinking that grinning and nodding, or expecting that people in this field of intdustry is surely know and agree with what people talk about, it will bring some problems. ( and it did. ) What is funny is that in LA, people encouraged me to talk more. Here in US, unlike Korea, people don’t expect others would know this and that when the ‘others’ are the ones who have worked in this industry long time. In Korea, we take it for granted that people already know this. When it turned out that he or she doesn’t, we explain on those to them at that point ( or if a bold and political person at work, they weaponize such knowlege, but I’m talking about ordinary people with good mind. ) So, here in the US, I’m expected to expose what I’m thinking. However, here in the new place, it doesn’t seem to so. People tries to put me down as much as possible and interrupt while I’m talking although it’s not situation where it requries immediate clarification or something. I’m not a person who talks unneccessary things to show off what I know. People in LA was not like this. There are some people like this, if they are bold. But there were some consensus in the companies I have worked for that they see those kind of people as ‘bold’ people.

Anyway.. I’m putting out too many different things in this post..
So, let’s go back to the topic.

Marketting and deciding direction of development on such haze information is not good. When they need to clarify future of some technology, they should contact companies like Apple and MS ( when the issues are on such companies head for ). Although Apple and MS, for example, would not clearly say those, you can feel or smell something by talking them.

People who have known me for long time will know that I have very good sense about those. When others said no, I said Intel version of OS X and Mac, and what’s the real purpose of Safari on Windows, etc.
That’s the sense people can get when one’s knowledge or experience in one field goes deeper. But here in the US, people don’t seem to have such sense, and thus can be pursuaded by such false marketting effort very easily. It also affect when hiring people and contracting with some outsourcing companies. When I came to the US, I was amazed by their interview questions compared to how Samsung, LG and Hyundai did or most Korean companies do. However, I now see their, i.e. US companies’, shortcomings also. If audience is different, they should ask differently.

Well… similarity with the Agile development case?
People here doesn’t look to have their insight accumulated over time but just relay on ‘surface’ knowledge.

Ah.. I just pushed out some mixed ideas and topics in this post. Probably it’s better to move to my Hot Potatoes blog. Well… but this is related to S/W engineering… So..






Get every new post delivered to your Inbox.

Join 41 other followers

%d bloggers like this: