Showing posts with label how to. Show all posts
Showing posts with label how to. Show all posts

Monday, July 06, 2026

How the Rich Pay Less Tax

Workers pay taxes twice: first when they earn income and again when they spend it. Wealthy investors, by contrast, can avoid recognizing taxable income altogether. By borrowing tax-free against their assets (company shares, property, etc.) instead of taking a large salary or realizing capital gains, they can access cash without triggering an income tax bill. Paying an 8% sales tax on a new sports car can be far cheaper than selling appreciated stock or paying themselves enough income to buy it, which could also trigger income or capital gains taxes exceeding 20%.

Private yachts and jets are often owned through corporations, LLCs, or other legal entities rather than directly by individuals. Depending on the jurisdiction and how the asset is used, this structure may provide tax advantages, such as deferring or reducing sales taxes, VAT, or other business-related expenses. Simply owning an asset through a company, however, does not automatically eliminate those taxes.

Why do banks agree to this? Publicly traded stocks are highly liquid collateral. If the market declines, the bank can issue a margin call and, if necessary, liquidate enough shares to protect its loan. Banks also require conservative Loan-to-Value (LTV) ratios, for example, lending only 50% of the collateral's value, to create a substantial safety buffer.

At first glance, this strategy seems to have an obvious flaw. If someone continuously borrows to fund their lifestyle, won't they eventually have to sell their assets to repay the debt, triggering decades of deferred capital gains taxes?

Under current U.S. law, the answer is often no. When someone dies, most appreciated assets receive a "step-up in basis," meaning their tax basis is reset to their fair market value on the date of death. As a result, when the estate sells the shares to repay the bank loans, there is little or no capital gain remaining to tax, even if the assets appreciated enormously during the owner's lifetime.

That does not mean the estate escapes taxation entirely. Very large estates may still owe the Federal Estate Tax. However, the estate tax is calculated on the net value of the estate:

Net Estate = Total Assets − Total Liabilities

Outstanding loans reduce the taxable estate because debt is deductible. The estate can then use the proceeds from selling the stepped-up assets to repay the bank, leaving the remaining wealth to pass to the heirs with little or no capital gains tax on the appreciation accumulated during the deceased's lifetime.

The bank does not walk away completely tax-free. Over the decades, the billionaire’s loan has been accumulating interest. If the billionaire borrowed $100 million and the total debt grew to $150 million by the time they died, that extra $50 million is pure profit (interest income). The bank must report that $50 million as taxable corporate income and pay standard corporate income taxes on it. The billionaire never paid income tax on the borrowed $100 million, but he paid interest to the bank after his death.

The strategy is powerful, but it is far from risk-free.

A severe market downturn can trigger margin calls. If the borrower cannot provide additional collateral, the bank may force the sale of shares. Since the owner is still alive, the original cost basis applies, potentially creating a large capital gains tax bill. Selling additional shares to pay that tax can trigger even more taxes, creating a vicious cycle.

Borrowing costs are another major risk. These lines of credit typically carry variable interest rates tied to benchmarks such as SOFR. If interest rates rise while asset returns stagnate, the cost of servicing the debt can eventually exceed the portfolio's growth.

Liquidity is also critical. Interest payments must be made continuously. If a borrower's wealth is concentrated in a company that stops paying dividends or if banks become unwilling to extend additional credit, they can become "paper rich but cash poor," forcing them to sell appreciated assets and incur the taxes they had hoped to defer.

Finally, the entire strategy depends on the tax code remaining favorable. Because "Buy, Borrow, Die" has become widely discussed, proposals to limit or eliminate its advantages frequently appear in tax reform debates.

When markets appreciate steadily, borrowing costs remain manageable, and tax laws stay largely unchanged, Buy, Borrow, Die can preserve significantly more wealth than repeatedly selling appreciated assets. But the strategy rests on three pillars: rising asset values, continued access to cheap credit, and favorable tax rules. If any of those pillars fail while the borrower is still alive, leverage can quickly transform from a wealth-preservation tool into a substantial financial liability.

Sunday, June 18, 2023

Using chatGPT in my writing

I use chatGPT to improve my writing, especially for German and English texts.

Example 1: A month ago, I got a job offer from an Austrian company. While preparing for the interview, I used GPT to clarify some questions I had about typical German expressions. For example, I asked GPT to translate "could we continue in English" to German and it answered "Könnten wir auf Englisch weitermachen?" as I expected. I thought about using the word "fortfahren" instead of "weitermachen". I asked GPT "what is the difference between fortfahren and weitermachen". It provided a detailed answer but what surprised me was that it also said "...in your sentence "Könnten wir auf Englisch weitermachen?" the word "weitermachen" is more appropriate because it refers to continuing the conversation in English. If you were to use "fortfahren", it might sound a bit more formal or less natural, though it wouldn't be incorrect." GPT's ability to keep the context in mind is not something you can do with ordinary Google searches.

Example 2: I usually start a post with handwritten notes:

Then I convert my notes into a coherent whole. When I feel like there might be a better way to express an opinion but cannot remember the expression or when I am in doubt about an idiom or grammar I ask GPT:

  • Question: Check for spelling errors: (paste text) Answer: Shows me spelling errors
  • Question: "have enough sleep" or "get enough sleep" Answer: "get enough sleep" is more commonly used and idiomatic
  • Question: May I use "they" for "someone". Answer: Yes, you can use "they" as a gender-neutral pronoun to refer to "someone"
  • Question: check grammar: It is depressing to realize the difficulty of changing our own faulty ideas, let alone changing others. Answer: The grammar in the provided text is correct
  • Question: make better: This increases the chance of meeting someone compatible a lot Answer: "This significantly enhances the likelihood of encountering a compatible individual."
  • Question: Would it be better to use "adult" instead of "equal" here: To avoid being influenced by charming yet superficial rhetoric, don't be flattered by being treated like a princess and instead maintain an expectation of being treated as an equal. Answer: Considering the context of the sentence, where the emphasis is on avoiding superficial treatment and maintaining a balanced dynamic, "equal" seems more appropriate.
  • Question: rate the English level of this text out of 10: (I paste the whole blog post) Answer: The text demonstrates a good command of the English language. Overall, I would rate it as a 9 out of 10.

I can confidently say that chatGPT improves my text from being 7/10 to 9/10. It makes writing much easier and fun, I feel like I am discussing it with a knowledgeable friend.

13.08.2023: DeepL write is also nice.

Music: Nina Hagen - Du hast den Farbfilm Vergessen

Tuesday, June 13, 2023

Relationship Advice

Recently, a 24-year-old female acquaintance asked me about how to find a partner for a long-term relationship. Here is my perspective:
  • To avoid being influenced by charming yet superficial rhetoric, don't be flattered by being treated like a princess and instead maintain an expectation of being treated as an equal.
  • Having a strong attraction towards someone does not automatically indicate that they are your soul mate. Our brains have a tendency to rationalize our emotions, so it's important not to let it deceive us. It is advisable to maintain a clear and rational mindset by seeking the opinions of trusted individuals.
  • Romance and long-term relationships are completely different. For a long-term relationship, you need an intelligent, caring and confident person who you can rely on. Do you think such a man might trust and respect you? If not, work on becoming such a woman.
  • Instead of fixating on finding a partner, channel your energy into personal growth and enhancing your interests. Share your passions with others and consider creating online content that aligns with the interests of the people you'd like to meet. This provides a common topic to talk about and significantly enhances the chance of getting in touch with a compatible individual.
  • The easiest way to find meaning in life is by engaging in activities that you enjoy and that also bring value to others.
  • Your health is your most important asset, without health, nothing matters. Exercise daily, get enough sleep, stay away from smoking, alcohol and drugs.
  • Be prudent with sexual relationships, the more your body count, the less attractive you will be.
  • Dressing modestly instead of provocatively can help your potential partner get to know you better without unnecessary distractions.
  • Personally, my most important criteria is to be able to have a conversation for long hours about a wide range of topics, not just about how much you miss/love each other. This demonstrates curiousity, sound reasoning skills and increases the likelihood of successfully resolving future conflicts that are bound to arise once the infatuation subsides.
Understand that finding a long-term partner may not happen quickly, concentrate on becoming a high-quality human being first and looking for a partner second.

Wednesday, February 15, 2023

Mühendis için İngilizce

Günümüzde mühendislik bilgisinin neredeyse tamamı İngilizce dilinde olduğundan mühendis adaylarının iyi derecede İngilizce bilmesi çok önemli. Ne kadar iyi bir mühendis olabileceğin İngilizce seviyene doğrudan bağlı. İngilizce seviyelerini şöyle sıralayabiliriz:
  1. Lisede öğretilen gramer, kalıp ve kelime dağarcığına hakim olmak.
  2. Wikipedia'daki Scientific Revolution sayfasını anlamak.
  3. YouTube'daki The Untold Story of Air France 447 videosunu anlamak.
Sinema filmlerini anlaman o kadar önemli değil çünkü fazla sayıda deyim kullanıyorlar, teknik içeriğe sahip videoları tam manasıyla anlamak daha mühim.

Seviyen hakkında fikir sahibi olmak için Cambridge English testine benzer testleri kullanabilirsin. İleri seviye İngilizce puanı 90/100 ve üstü. Şu an o durumda olmayabilirsin, önemli olan sana uygun öğrenme yöntemini tespit etmen ve her gün düzenli olarak çalışman.

İngilizce öğrenmeyi ilginç bulduğun konularla birleştirirsen sıkıcılığı azalır. Ben geçmişte ilgimi çeken konulardaki İngilizce metinleri okur, bilmediğim her kelimeyi, İngilizce açıklamasını ve örnek cümleyi küçük bir deftere not eder ve hep yanımda taşıdığım bu deftere her fırsatta (sırada beklerken vb.) bakardım. Günümüzde defter yerine flashcard uygulaması kullanılabilir. Yararlı bir başka araç Duolingo.  chatGPT çok iyi bir yardımcı, kullanmanı öneririm. İlgini çeken konulardaki İngilizce Wikipedia sayfalarını ve YouTube videolarını izleyebilirsin, videoları düşük hızda oynatarak daha kolay anlayabilirsin. Son olarak bir blog açmanı ve şu anki İngilizce seviyenle ilgilendiğin/öğrenmekte olduğun konularda İngilizce yazılar yazmanı öneririm. Bloğunun linkini benimle paylaşırsan sana geri bildirim de verebilirim. Biliyorum, bunları sürekli yapmak biraz zahmetli ama başka bir yolu da yok. Kaliteli işler yapmak için iyi bir mühendis olman, iyi bir mühendis olmak için de en başta iyi İngilizce bilmen gerekiyor.

Monday, November 22, 2021

Hosting a website on your local computer

If you want to host your website on your local Windows PC, you have to run a local web server:

  1. Setup IIS (it comes with Windows 10+). Use a port other than 80. Copy your website files to the folder that IIS recognizes. 
  2. Verify that on your browser, you can see your website when you type localhost:<Port> to the address bar.
  3. Add port to Windows Defender Firewall inbound rules.
  4. Add port to your modem so that the modem forwards traffic on that port to your local IP address. On my modem it is done in NAT Forwarding - Virtual Servers
  5. Verify that your website is online by turning off wifi on your mobile phone and typing http://<your global IP>:<Port> into your mobile browser address bar.
You cannot use https without a domain name for your local website because "In order to get a certificate for your website’s domain from Let’s Encrypt, you have to demonstrate control over the domain", i.e. you have to attach your IP address to a domain name.
Links related to SSL certificate:

Wednesday, March 25, 2020

Remote work challenges

The global coronavirus pandemic has forced many institutions to think seriously about remote work. The first idea that comes to mind is make people work on laptops. If the work place had to use a local network isolated from the internet due to security concerns, the following challenges have to be faced:
  • A lot of laptops have to be reconfigured by the IT department so that they cannot be connected to the internet. Software needed for daily work have to be installed. That's a lot, depending on the number of laptops and the number of software to be installed on each laptop.
  • Many software products needed for development rely on local license servers. How are you going to make them work on laptops that are neither connected to your LAN nor the internet? You may have to obtain standalone licenses (extra cost) and install them on each laptop. In my case, I need licenses for two different products. May be existing license servers can be made to work on a virtual machine on the laptop.
  • Complex projects require multiple people to work on the same software components. How will you prevent merge conflicts when the oubreak has calmed down and everybody wants to push their work to the local repository?
  • Embedded software projects require multiple people and hardware working together. You might take your hardware home but you won't be able to get your colleagues and their hardware/software due to social isolation requirements to prevent the virus spread.
  • If you have kids at home, how will you prevent them from constantly interrupting you? By having a schedule and clear visual indicators that you are working (like a sign on the door).
If your software/hardware were highly modular, if you had abstractions/simulators, you could take only the parts that are suitable to work at home. But true modularity is almost never the case. In my opinion, during the remote period it is not realistic to expect work to be done as usual. The main areas to focus are:
  • Limited development with only your hardware and software (if standalone licenses can be purchased).
  • Improving documentation of existing software/design. Documenting the system will show you clearly where the design is too complex and needs improvement.
  • Self education. Example subjects for me: Blockchain, real time operating systems, embedded software development.
  • Daily physical exercise.

Thursday, March 19, 2020

Getting rid of background noise in an image

I have an image whose background I want to get rid of and only leave text. I open it in paint.nethttps://www.getpaint.net/and select Adjustments - Brightness/Contrast:

I increase contrast until the background disappears:

Monday, August 19, 2019

How to learn

Below are my learning steps with bitcoin/blockchain as an example:
  1. Heard the keyword bitcoin and got curious, read a few webpages, understood very little. Wondered what the use of mining was.
  2. Finally got the gist of it by watching But how does bitcoin actually work.
  3. To undertand blockchain in more detail, started implementing a simple version of blockchain (in progress)
  4. Review original paper, be able to follow research on the subject.
  5. Review original source code.
  6. Make improvements.
I use similar steps to learn AI. Last year I worked with an intern, this year a second intern is working on training openCV.

In general:
  1. Understand the general concept by watching short (~15min) videos.
  2. Know enough to define work for novices/interns.
  3. Be able to use existing tools.
  4. Be able to implement basic version.
  5. Follow literature.
  6. Make improvements.
This strategy makes sure that I always have something useful even when I do not reach the final step.

Monday, July 15, 2019

Yemek yapmanın dayanılmaz ağırlığı

Günlük yemek yapmanın gerektirdiği zaman ve iş gücü can sıkıcı. Maddelersek:
  1. Her hafta en az bir kez pazara git.
  2. Her hafta en az bir kez markete git.
  3. Malzemeleri dolaplara yerleştir.
  4. Ekmek al.
  5. Hemen her gün ne yemek yapacağını düşün, yemek yapmak için malzemeleri yıka, doğra, pişir.
  6. Yemek malzeme kabukları ile dolan çöpü çıkar.
  7. Bulaşıkları makineye koy, yıkandıktan sonra geri çıkar.
  8. Yeterince yardımcı olmadığın için eşinden azar işit (!)
Rutin adımların dışında gerekenler:
  1. Bir sürü tencere, tava, tabak, çanak, kepçe, bıçak, kaşık.
  2. Çanak çömleği koymak için bir sürü dolap.
  3. Büyükçe bir lavabo ve bulaşıklık.
  4. Fırın.
  5. Mikrodalga.
  6. Ocak, tüp.
  7. Aspiratör.
  8. Bulaşık makinesi.
  9. Dondurucusu olan büyük bir buzdolabı.
  10. Mutfak robotu (rondo)
  11. Tüm bunlara ev sahipliği yapan mutfak.
Yemek yapmayın demiyorum, hobi olarak yine yapın (!) İnternetin ve lojistik imkanlarının gelişmesi sayesinde yemek abonelik sistemine geçmemek için teknik bir neden yok, geriye maliyet ve lezzet kalıyor. Yemek abonelik hizmetleri yeterince iyi ise mutfak ve içindekilere gerek olmayacak, evin bir köşesinde küçük bir buzdolabı ve mikrodalga yeterli olacaktır.

Hazır bu hafta kendi başıma evdeyken yemek servislerini deneyeyim dedim, MealBox ve Rafinera'yı inceledim ve Rafinera'yı seçtim. Sebebi MealBox şikayetlere cevap yazmazken Rafinera'nın cevap yazmasıydıRafinera'nın protein plus paketini beş gün denemeye karar verdim. Teslimat saati olarak üç seçenek var: 07:30-08:30, 08:30-09:30, 09:30-10:30. İlk sipariş yarın sabah geliyor, izlenimlerimi gün gün buraya yazacağım.

16.07.2019 (Gün 1/5): Sabah 08:25'te yemek kutum geldi (teslimat saati olarak 08:30-09:30 seçmiştim). Kahvaltı, öğle ve akşam yemekleri doyurucuydu. Demek ki 2100 kcal protein plus paketi benim gibi 80kg'lık biri için yeterli. Öğle ve akşam yemeklerini orjinal kaplarında, çatalla birkaç delik açarak mikrodalgada ısıttım, yanlarında biraz domates, maydanoz ve yoğurt yedim.

17.07.2019 (Gün 2/5): Bugün için teslimat saatini 07:30-08:30 seçtiğim halde saat 9'a kadar paket ulaşmayınca Rafinera'yı aradım. Paket 09:05'te elime ulaştı, teslim eden kurye polis çevirmesi nedeniyle yarım saat kaybettiğini söyledi. Biraz sonra Rafinera aradı ve bir önceki gün teslimat saatinin 08:30-09:30 olması nedeniyle karışıklık yaşandığını söyledi. Lojistik konusu iyileştirmeye açık görünüyor. Bugünkü menü:

Rafinera'yı ailecek (iki yetişkin, bir çocuk) yıl boyu kullanmak istesek durum nedir diye analiz ettim: Benim iş yerinde ve çocuğumun okulunda öğle yemeği çıkıyor, ancak eşimin iş yerinde öğle yemeği yok. Kahvaltı hazırlamak da kolay, kahvaltının gelmesine gerek yok. Bu nedenle hafta içi günde 1+1+2 = 4 dört yemeğe ihtiyacımız var. Hafta sonu yine kahvaltıyı kendimiz hazırlarız, günde 2+2+2 = 6 yemeğe ihtiyacımız var. Rafinera Pazar günleri çalışmıyor. Yani kabaca bir ayda 4*20 + 6*4 = 104 yemek gerekli. Rafinera resmi tatillerde de çalışmadığı için ortalama ayda 96 yemek diyelim. Kahvaltısız paket öğle akşam yemeği ile iki ara öğün içeriyor, yani hafta için her gün iki paket, C.tesi de üç paket işimizi görüyor. Şu anki fiyatlarla (klasik menü, kahvaltısız, 1900 kcal, 90+gün) aylık en az (4/2*20+6/2*4)*59*96/104 = 2832TL ediyor. Eğer üçümüz için ayrı ayrı tek öğünlük gündüz programını seçseydik 96*54=5184TL olurdu. Mesaimize yetişebilmemiz için teslimatın en geç 08:00'da yapılmasını da garantilersek bu iş olur. Teslimat saatiyle ilgili müşteri hizmetlerine mail attım, iki saat sonra Abdullah Bey aradı, lojistik sorumluları ile görüştüğünü, bizim adres için 08:15'i garantileyebileceklerini söyledi. Teşekkür ettim ve sabah en geç 8'i sağladıkları gün hazır müşterileri olduğumu söyledim.

Bize yakın Med Yemek şirketini arayıp aile paketleri var mı diye sordum, yemek servisleri olduğunu, bizim bulunduğumuz yere servisleri var mı diye bakıp döneceğini söyledi. Aradan yarım gün geçti, ses seda yok...

Diğer seçenekler: Diyetta, FormenaBaşak Ev Yemekleri, G4

18.07.2019 (Gün 3/5): Kutu sabah 07:25'te geldi.

19.07.2019 (Gün 4/5): Kutu sabah 07:50'de geldi.

20.07.2019 (Gün 5/5): Kutu sabah 08:15'te geldi.


Günün müziği:

Saturday, May 25, 2019

The secret to happiness

I have finally discovered the secret to happiness and I would like to share it with you [drumroll...]: It is doing the simple things every day! That doesn't sound very inspiring, does it? People expect some heroics that they have to do only a few times and then become fit, successful, effective, i.e. most of the prerequisites for a happy life. And they like explanations like genius and luck because it absolves them of guilt. Examples of simple things resulting in huge benefits in the long run:
If you are among the 90% who say that they don't have time, my answer is that your priorities are not right. What could possibly be better than investing in your health and child? Watching movies?

I once had a conversation with an uncle, about 65 years old. He said that he would give everything he had to be 20 years younger. He was in good health for his age. I asked him "uncle, 20 years from now, you will say the same thing again. Do you live your life in a way that someone would give his everything for?" My uncle kept silent...

Interestingly, when you tell others about learning how to fish, instead of having been handed a fish, they all nod in agreement. In reality, they want the fish! Recently I was chatting with my aunt, whose daughter plans to study abroad. I was giving advice about what to do. My aunt got impatient and said "Şamil, don't tell us what to do, do it for us". I became indignant and replied "if it was possible, you would be happy if I entered the university exam in her place, wouldn't you?!" She sheepishly said yes.

Seeing how difficult this simple action is for most, I became more motivated to instill perseverance in my child. And as you know, the only way to teach a child anything is to do it yourself and be an example first.

Friday, February 15, 2019

Technical reviews and mentoring

Recently a novice engineer sent a technical document for review, for which I was one of the reviewers. When I opened the document, I saw that it was littered with problems typical of a novice: No proper introduction explaining why this document was created, not specifying assumptions, simplifications and constraints, endless rows of data instead of clear graphs (i.e. signal buried in lots of noise), no clear conclusion, missing references, what still needs to be done, i.e. future work. See Why I gave your paper a Strong Reject

I told him that I will not review it and forwarded the document to a less senior colleague. As a grizzled veteran, I find it untolerably boring to provide basic feedback because I have done it a thousand times before.

How can we make both the novice and the veteran happy:

Monday, February 11, 2019

Remote working

Working from home (remote working) is used by many tech companies, e.g. Scott Hanselman from Microsoft. The main counter argument is that people will be less productive. It assumes that being physically present in an office for 8 hours makes you automatically more productive. My argument is that we have to measure productivity by examining the outputs, not by how much time has been spent. Also, design work requires high quality people and those types of people have less problems working on their own.

Risks and Mitigation
  • Not being able to use lab equipment:
    • Pure algorithm/software development requires no extra equipment other than a computer and internet connection. Examples of algorithm development: Guidance and control, navigation.
    • Most analyses are done on a PC with special software, e.g. finite element analysis, aerodynamic analysis.
    • Most equipment is relatively cheap and can be used at home (e.g. medium grade power supplies, oscilloscopes). For the remaining 10% of testing and analysis needs, you go to the lab. Criteria: If the equipment fits on your computer desk, it can be used at home.
  • Social isolation, loss of motivation
    • Assuming a four level hierarchy (team member -->  lead --> coordinator --> boss), organize daily online scrum meetings with tools like WhatsApp / Skype. Team leads meet with team members, coordinators meet with team leads and the boss meets with coordinators.
    • Issue tracking and sprint boards with Jira. Work in pairs with Teamviewer. Document sharing with Google Drive. Code repo with GitHub.
    • Weekly physical meetings at a central office or cafe.
    • Social events: Workshops at a resort, gym memberships, picnics, trekking, camping etc.
  • Distraction by kids, computer games, movies etc.
    • Have a saparete work computer that has no games on it.
    • Work at a quite place like a library and use your smartphone as a modem.
  • Not being able to measure productivity
    • As I already said above, this risk exists in physical offices too. The team lead is very important because the lead has to check and evaluate outputs (code, documents etc.) of team members and give them feedback on a daily basis. For persistent reporting, team members enter their daily progress as comments on the issue tracking system (e.g. Jira) which the lead will read. The same method will be used by coordinators to measure productivity of team leads. I assume that the coordinator is also technically adept and peeks into outputs and issue comments. Finally, how will the boss know that the teams are productive and not a waste of resources, especially if he does not have a technical background? This problem is not specific to working from home, so I will not go into further detail here.
  • Leak of confidential information
    • Most (>90%) technical work is not confidential, it is re-using public knowledge. Use designs/architectures suitable for isolating security related parts. Examples: 
      • Capture confidential information in data, not code.
      • Use emulators/simulators to test interfaces with dummy implementations. Most of the logic problems can be detected and resolved with dummy implementations. Test confidential implementations on site.
Advantages:
  • Attractive to talent --> You can select from a better talent pool.
  • Adapt work hours and environment to your personal preferences, reduce interrupts, resulting in better concentration (being in the zone) which increases efficiency by an order of magnitude.
  • Reduction of time wasted in traffic (in my case, 2 hours per day, i.e. 25% of the 8 hour work day).
  • Much better for families with little kids where daycare or dropping kids to school and picking up them up from school becomes a major issue.
  • Drastic reduction of logistics costs:
    • Less transport and related liabilities like traffic accidents.
    • Less office space --> Less building, heating, cleaning, maintaining.
    • Less cafeteria space, less cooking.
    • Fewer lavatory facilities and maintenance.
  • Reduction of city traffic and pollution.

Tuesday, January 29, 2019

How to outsource

The major benefit of outsourcing is to do more with less personel, to be shielded from human resources management issues and concentrate on the product. However, outsourcing work that is not clearly defined (like most research & development work) can be a headache if done haphazardly. By its very nature, most R&D work fails and should be treated as learning experiences. How can you outsource something that will most probably fail? I suggest dividing the task into the following three phases:
  1. Analysis: Concept of Operations, detailed requirements and acceptance test plans are generated.
  2. Design: Design documents and a minimum viable product that implements basic functionality is produced.
  3. Production: The end product covering all requirements is tested according to the acceptance test plan.
Instead of a single contract encompassing all three phases, each phase has its own contract. At the end of each phase, in order to continue to the next phase, both the contractor and the customer have to say GO. After that, the contract for the next phase is signed. The contractor gets paid only for the phase it has finished.

Note that for phases 1 and 2, there are no acceptance criteria for the deliverables, because adding additional criteria will drive the cost up. The contractor could submit a one page document and call it "requirements". The only leverage the customer has during these phases is the threat of not awarding the next phase and blacklisting. Therefore, most of the payment should be done in phase 3. If the total cost of the project is 100%, phase 1 should be 10%, phase 2 should be 20% and phase 3 should be 70%. Due to the relatively low cost, phases 1 and 2 could be awarded to multiple contractors to have some kind of competition.

Dividing the work into three phases protects the customer from mediocre contractors. At the end of phase 1 or phase 2, if the customer is not satisfied, armed with lessons learned and documents / prototype at hand, it can select another contractor. This phase structure also protects the contractor from fuzzy requirements and challenges that turn out to be technically impossible.

Wednesday, December 26, 2018

Enabling technologies for IoT development

Small scale / hobby IoT development has become much easier due to the following:
  • It is possible to buy electronic components in small numbers cheaply and reliably from China. It is a miracle of logistics that I get a couple of transistors for a couple of bucks, shipped to my doorstep from the other side of the world in two weeks!
  • Arduino, it's IDE and tons of libraries for all sorts of devices saves you from dealing with details of device drivers.
  • Machine learning with TensorflowOpenCV, and Raspberry Pi.
  • Cheap and reliable web services like AWS.
  • Easy to use server environments like NodeJS.
  • Last but not least, YouTube gets you up and running quickly.
We live in amazing times where everyone can tinker with electronics because the barriers to entry are so low now. Even my father who is 73 years old asked me the other day where he can get some breadboards! Imagine what the youngsters of today will come up with in the future.

Thursday, November 01, 2018

Baby / child sleep training

Last weekend we met with friends who have a couple of months old baby. They asked us about sleep training. We told them that we first tried it according to the book but then changed it dramatically.

The main problem was that our son, who was 1 year old at the time of training start, resisted being laid down into the crib. Resisted means that he cried and wept with a terrified "I am going to die" look on his face and arms extended towards you begging for help for 45 minutes! We could not bring ourselves to leave him alone in his room like that. So, we laid besides him in the crib until he fell asleep (took about an hour) and sneaked away.

After a couple of months, we put some pillows beside his crib and waited there for him to fall asleep which again took about 1 hour each day. Every half an hour, I changed places with my spouse. It sometimes took 1.5 hours. After he fell asleep he usually woke up when we put him into the crib and the whole procedure lasted for another half an hour. Trying to carefully lift and place him into the crib was bad for our backs too.


Finally we decided to buy an adult size matress and laid it on the floor of his room and gave up on the crib altogether. At bed time, we cuddled him, played children's music, and when he fell asleep, we simply left the room without the crib hassle. Win-win :)

Friday, October 12, 2018

Best way to expand your network

The best way to expand your network is to work on something. Besides learning new things, you will also meet like minded people, exchange ideas and expand your network.

Saturday, September 29, 2018

Modifying Toys

As a hobby, I like playing with Arduinos and having the ability to control real world devices like sensors and motors. Recently I decided to add a Cylon/KITT eye to my son's old robot toy:


First I bought an Arduino Pro Micro and an addressable LED strip. I cut the LED strip to fit into the robot's head, wrote a sketch to simulate Cylon eye and tested the setup:


Then I made sure that it worked with 3 AA batteries:


Then I squeezed in the LED strip into the robot's head and tested once more:


Then I verified that it worked with the robot's batteries:


Finally I assembled the whole robot:


The hardest part was fitting the pro micro and all the extra cables into the robot's body.

What's the point of all of this you ask? First of all, I like doing such things. And secondly... Watch Eli's video: The Value of "Hobbies" for Tech Professionals.

Tuesday, August 28, 2018

Child education

Today we were talking with friends about our favourite topic, education of children. The gist of the conversation was that parents have limited control over their children and can "only" introduce them to different experiences. I criticized the use of the word "only" because a good introduction is not a trivial thing, it requires a lot of thought on the parent's part. The material has to match the child's ability to grasp and find it interesting enough to pursue it further on his/her own.

Examples:
  • Experience foreign languages via computer games, songs, movies and trips abroad.
  • Musical instruments. I played the guitar and keyboard in my younger years and know that playing an instrument is not a matter of talent but a matter of persistent work, i.e. not suitable for most young kids. Talent comes into play when one strives to be a professional.
  • Math, history, politics... All of these are extremely interesting but the wrong teacher can cause the child to be disgusted and block them out completely. I know people who refused math or history until they were 30 years old and found out that these were actually quite fun.
  • Sports, dance and other physical activities: See The Inner Game of Tennis
The first rule of a good introduction for any topic: What good is this for, where is it used? Keep in mind that even if your child is not immediately enthusiastic about the subject, he/she will have it imprinted in his/her mind and when the time comes, will have less difficulty in making that first attempt (which is usually the hardest psychlogically). Example: As a young child I observed how my father (a primary school teacher) was writing with beautiful hand writing his normally boring daily classroom plans. To this day, I like to write nicely. We don't want our kids to realize how everything is so mind blowing until they are adults, do we?

Thursday, August 02, 2018

Solve Netbeans src folder missing problem

Recently we updated from Netbeans 8.0.2 to 8.2. One of my colleagues could not see the src folder in Netbeans. What you need to do is to right click on project, open properties, go to Sources, under Source Package Folders, add the src and test folders there.

Important Netbeans folders on Windows:
  • user/AppData/Local/Netbeans/Cache: Sometimes Netbeans shows error icons on files event tough there is no error. Delete the cache folder.
  • user/AppData/Roaming/Netbeans

Monday, July 30, 2018

Building a NetBeans project on a computer without Netbeans

When building a NetBeans project with ant on a computer without Netbeans, you have to pay attention to the following:
  • Be sure to have correct versions of org-netbeans-modules-java-j2seproject-copylibstask.jar. For example, if you are building with JDK6 but the copylibstask.jar is built with JDK7, you will get "Unsupported major.minor version 51.0" error.
  • Reference copylibstask.jar in ant.bat runAntNoClasspath section as follows: "-Dlibs.CopyLibs.classpath=%ANT_HOME%\extra\org-netbeans-modules-java-j2seproject-copylibstask.jar". If you don't do this in ant.bat and you have Netbeans installed, ant will look for copylibstask.jar in Netbeans install dir which means your build dependens on having Netbeans installed.
  • If you get "Class not found: javac1.8", it means you ant version is too old and not compatible with JDK8.
  • If your modules have forms, you need a copy of swing-layout jar file. This jar includes the org.jdesktop.layout.GroupLayout class.
  • You have to add dependencies to build.xml. These dependencies are specified in nbproject/project.properties in the javac.classpath section. Example:
  • If you want to embed libraries into main jar: