27 Ekim 2017 Cuma

Constrained Application Protocol - CoAP

Giriş
CoAP MQTT'ye göre daha yeni bir protokol. İlk olarak 2010 yılında  teklif edildi.Son hali RFC 7252 ise 2014 yılında yayınlandı.

CoAP altta UDP kullanır. Açıklaması şöyle
Instead of a complex transport stack, it gets by with UDP on IP.
Protokol katmanlarındaki yerini şeklen görmek için buraya bakınız.

24 Ekim 2017 Salı

PostgreSQL C++ API

Giriş
Kullanmak için şu satırı dahil ederiz.
#include <pqxx/pqxx>
Ayrıca isim alanını da dahil etmek iyi bir fikir.
using namespace pqxx;
connection Sınıfı
Constructor
Örnek
Şöyle yaparız.
pqxx::connection con("dbname=foobar user=jdoe password=smartpassword");
Örnek
Şöyle yaparız.
string connection_string = "dbname=postgres user=... host=...";
connection con(connection_string.c_str());
disconnect metodu
Şöyle yaparız.
con.disconnect(); 
is_open metodu
Şöyle yaparız.
if (con.is_open()) 
{
  cout << "Database was opened successfully: " << con.dbname() << endl;
}
work Sınıfı
Constructor
Şöyle yaparız.
pqxx::connection con = ...;
pqxx::work txn (con);
commit metodu
Çalıştırılan sql cümlelerini sonlandırır. Şöyle yaparız.
txn.commit(); 
exec metodu
Örnek
Şöyle yaparız.

string sql = ...;
w.exec(sql);
Örnek
Şöyle yaparız.
pqxx::result r = txn.exec(
    "SELECT id "
    "FROM Employee "
    "WHERE name ="+ txn.quote(argv[1]));
Örnek
Şöyle yaparız.
txn.exec(
    "UPDATE EMPLOYEE "
    "SET salary = salary + 1 "
    "WHERE id = " + txn.quote(employee_id));

txn.commit();
quote metodu
Şöyle yaparız.
txn.quote(argv[1]));
result Sınıfı
as metodu
Şöyle yaparız.
int employee_id = r[0][0].as<int>();
size metodu
Şöyle yaparız.
if (r.size() != 1)
{
  ...
}


23 Ekim 2017 Pazartesi

Monotonic Saat - Windows

GetTickCount
Windows üzerinde sistem açılışından beri geçen süreyi milisaniye olarak bulmak için GetTickCount kullanılıyor. GetTickCount monotonic bir saat. Açıklaması şöyle
The time will wrap around to zero if the system is run continuously for 49.7 days
GetTickCount64
Açıklaması şöyle
Retrieves the number of milliseconds that have elapsed since the system was started.

İş Görüşmeleri Notlarım

Giriş
Bir çok iş görüşmesine girdim. İlginç gelenleri not almak istedim.

1. İnsan Kaynaklarının Mülakatı
Giriş
İnsan kaynaklarının mülakatında sorula bazı sorular tuhaf gelebilir. Bu durumda en iyi yöntem dürüstlük ve saptırma (honesty ve deflection) karışımını kullanmak.

Neden Şirketimize Başvurdunuz
Why are you interested in our company ?

Kısa ve uzun vadeli hedefleriniz nelerdir?
Do you have short-term, long-term goals?

Çalışmak İstediğiniz Yer Neresi?
X şehrine neden taşınmak istiyorsun? Do you have location preferences

Sizi Neden İşe Almalıyız, En Zayıf Yönünüz Nedir?
Burada işe alınacak kişinin zayıf yönlerinin farkında olup olmadığı değerlendiriliyor denilmiş. Örnek olarak ta "Hafızam zayıf her detayı hatırlamıyorum ancak ekipte kim ne yapıyor bildiğim için gerektiğinde onlardan yardım alıyorum ve not tutuyorum" şeklinde bir cümle kurulmuş.

Buna benzer İngilizce soru şöyle
What do you consider the most discouraging experience you had with regard to x?
İş yerinizde En Şok Sevmediğiniz Şey Nedir
İngilizce soru şöyle
What do you dislike the most at the workplace?
Stres Altında Nasıl Çalışırsınız 
Bu soru klasik bir insan kaynakları sorusu. Eğer stres şirketin yönetimden ve dağınıklıktan kaynaklanıyorsa aslında yapacak en iyi şey o işe hiç bulaşmamak. Sürekli iş yığılan insanların kaçmak için kullanabileceği bazı cümleler şöyle
-Şu anda meşgulüm yarın ilk iş ona bakarım
-Sana 2 saat sonra dönsem olur mu
-Bu isteği önce müdürüme iletir misiniz.
Yetişmeyecek Bir İş Verilirse Ne Yaparsınız
Soru şöyle. Ne cevap verilir ben de bilmiyorum :) Aslında kaynak azlığı yönetimin çözmesi gereken bir konu.
Given a scenario where you have a project on hand, and the deadline given is in X days, and you know that no matter how hardworking you are trying to pull up all nighters everyday, you will never meet the deadline. And the client mentioned that it is a hard deadline.
Matris Organizasyon
Bazen insan kaynakları matris organizasyon yapısında olduklarını söyler. Bu yapı eğer X kişisi şu anda meşgul mü, değilse hemen bir başka projeye kaydıralım şeklinde çalışıyorsa sıkıntılı bir duruma işaret eder. Matris organizasyon yapısını iyi sorgulamak gerekir.

Genel
Java bilgini 10 üzerinden değerlendirirsen kendine kaç verirsin?
10 yıllık tecrüben var neden yeni mühendis pozisyonuna başvuruyorsun?


2. Teknik Mülakat
Teknik mülakatın kısımlara ayrılması faydalı.

Teorik Sorular
Bu sorular çok basit gibi görünse de bazı adayların hemen renk vermesine sebep olurlar. 
Örnek
Soru şöyle
Can you explain the difference between an abstract class and an interface?
Açıklaması şöyle
Nobody who understands anything about object oriented programming can fail to know the difference between an abstract class and an interface. It's not a case of spending thirty seconds googling it, everybody should know it.

Kod Yazdırmak
Kod yazdırırken FizzBuzz denilen sorular kullanılabilir. FizzBuzz programlama yapamayan kişilerin %90'ını zaten en baştan eler.

Bazı kısa FizzBuzz soruları şöyle olabilir.
Bir string'i tersine çevirmek
Kod okutmak ve analiz ettirmek
Örnek ver

Tasarım Soruları
Bence iş görüşmesinde bilmece sormak yerine basit bir sistemin tasarımını yaptırmak çok daha iyi. Böylece aday hem hazırlanamamış olur, hem de ne kadar tecrübeli olduğu ortaya çıkar. 

Örnek
Monopoly tasarımı yapması istenebilir.

Örnek
Satranç tasarımı örneği:
Game -(has)
Board -(has)- Spot-(has)-Piece
            -(has)- Player-(has)-Piece<-Queen (Şah),King, Knight(At),Bishop(Fil), Rook (Kale)
Distributed System ve Multi Threading Soruları
Çalıştığım bir şirket bu sorulara çok önem veriyordu. Senior ve üstü olanların bu soruları geçmesi gerekiyordu.

Role Soruları
Bazı sorular şöyle
- Think of a situation in the past that got you really frustrated at work
Describe how you responded to the situation

- Tell me about a time you had to complete important work against
tight deadline. How did you handle it ?

- Describe a time you showed the courage to point out risks in an
important decision being considered. How did you communicate your message ?

Değerlendirme Formu
Görüşme sonunda İnsan Kaynakları bir form doldurmanızı ister. Formda şu tür boşlukları doldurmak gerekir.
- Adayın işe istekliliği : Adayın isteklilik ve tutkusu önceki projeleri hakkında konuşurken gözlemlenmeye çalışılır. Bilgi seviyesi ve isteklilik aynı şey değildir. Objektif olarak nasıl ölçülür bunu da bilmiyorum.
- Adayın uygunluğu
- Adayın hal ve davranışı
- Adayın görüntüsü
- Adayın iletişimi
- Adayın deneyim
- Adayın mesleki bilgisi
Örnek
12 yıllık tecrübeye sahip bir adayla yaptığım mülakatta, basit bir FizzBuzz sorusunda hemen takıldı. Soru listeden çift olanlar silmek şeklindeydi. Ayrıca kullandığı teknolojilere hakim değildi. Maalesef reddedildi.

Örnek
Aday teknik anlamda iyiydi. Ancak soft skills zayıftı. Teknik açıdan iyi olduğu için ekibi idare etmesi beklenirken, o istemiyor ve bu işten kaçıyordu. Bu yüzden her sene iş değiştirmişti.

Örnek
Adayın zor sorular karşısında elini başının arasına alıp düşünmesi hoş değildi

Örnek
Multi-threading ve veri tabanları konusunda zayıftı. Principal yerine senior olarak tekrar mülakata alınması önerildi

Örnek
Aday soruları bilmiyorsa sadece "no idea" diye cevap veriyordu. Daha detaylı soru sormadı veya daha önce yaptığı bir şeye gönderme/benzetme yapmadı.





19 Ekim 2017 Perşembe

poll

Giriş
İlk parametre pollfd dizisidir. İkinci parametre diziniz uzunluğudur. Üçüncü parametre milisaniye cinsinden en fazla kaç ne kadar bekleneceğidir.

İlginlendiğimiz event'leri events alanına yazarız. Çağrı sonunda revents alanında sonuçları alırız.

POLLIN
Okuma için kullanılır.

POLLOUT
Yazma için kullanılır.

POLLPRI
Sanırım GPIO pin'inde durum değişkliği olursa kullanılır.

Örnek
Tek bir file descriptor için şöyle yaparız.
int ret_poll= poll( &pollfd, 1, 10000 );  //10sec timeout

Örnek
Şöyle yaparız.
struct pollfd fds[1];
fds[0].fd = ...;
fds[0].events = POLLIN;

int pollrc = poll(fds, 1, poll_timeout); // blocks until data arrives or times out

if (pollrc < 0) { //Error
  ...
}
else if (pollrc == 0) //timeout
{
  ...
}
else if (pollrc > 0) {

  if ((fds[0].revents & POLLIN) == POLLIN) {
    ...
  }
}

17 Ekim 2017 Salı

DOORS

DOORS Notları
Aşağıda DOORS ile ilgili notlarım mevcut.

Baseline (Anahat)
Module ile ilgili işlemle için şöyle yaparız.

File > Baseline > New : Yeni baseline yaratır
File > Baseline > View : Eski baseline'ları görebilmeyi sağlar.

Baseline Nedir
Açıklaması şöyle
An important concept relating to Configuration Management is the baseline – a record of the state of specific compliance artifacts at a specific point in time.

What counts as a baseline varies from project to project, but it always has the following characteristics:

1) An artifact added to a baseline is immutable. The only way to work on it is to follow a formal change control process and create a new revision of the artifact, which you can then add to a later baseline.

2) An artifact may be developed informally before you add it to the baseline.

3) The artifacts within one baseline must be consistent with one another.

Typically, you will create a baseline for each phase of your software life cycle.

For example, once high-level requirements have passed reviews and quality assurance checks, and you are about to transition to the software design phase, you may create a baseline representing the entire set of high-level requirements, reviews, analyses, the QA records, and traceability to system level requirements.

If your development is organized into modules, you can create a baseline per module.

For example, you might establish a design baseline for each of three modules independently.

Your configuration index submitted for approval should identify the relevant baseline, or baselines, of the accompanying compliance data.

Open > Read-only veya Shareable Edit veya Exclusive Edit

View
Bir çok view açılabilir. Örnek view'lar
Verification view : Gereksinim ve nasıl doğrulanacağı
Traceability view : Gereksinim ve izlenebilirliği
Verification level view : Gereksinimin hangi aşamada doğrulanacağı

Link Kurmak
Link > Create Link'e tıklanır.
Target seçilir
Link module seçilir.
Linki silmek için Source Linke gidilir. Properties'e basılır ve Link sekmesinden Delete seçilir.

Database Menüleri

Favorites Combobox
Doors Database ekranında bu menü kullanılarak bir modüle kısayol konulabilir.

Modül Menüleri

File/Export Menüsü
Word'e Aktarım için kullanılabilir.

1. Tümüyle Aktarım
Doors 8.1 ile gereksinimleri Word  dokümanına aktarmak için araç çubuğundaki Word simgesine tıklanır. Açılan pencereden "Layout" olarak "Table" seçilir ve gereksinimler Word belgesine aktarılır.
Export işleminde normal.dot template kullanılıyor. Bu template tabloları kırparak gösterebilir. Word belgesinde Page Layout/Margins/Narrow seçilerek tablo daha iyi gösterilebilir. Ayrıca Word belgesinden pdf belgesine de aktarmak mümkün.

2. Kısmi Aktarım
Filtereleyerek aktarım için önce "Filter Properties" tıklanır. Açılan pencereden "Objects" sekmesi seçilir. "Include current object" seçilerek "Apply" düğmesi tıklanır. Böylece sadece bir başlık ve altındaki her şey gösterilmiş olur. Bu başlık Word'e aktarılırsa kısmı bir doküman çıkarmak mümkün olur.

File/Import Menüsü
RTF formatındaki Word dokümanı import edilebilir. RTF dosyası seçildikten sonra açılan penceredeki sol taraf RTF dosyasındaki heading'in Doors modülünde hangi heading'in altına geleceğini belirtir.
Word Heading 1 -> Doors Heading 3 yaparsam Doors'ta seçili olan Heading 3'ün altına import ederim.

Edit/Attributes Menüsü
New düğmesine tıklayarak yeni Attribute tanımlanabilir. Projelerde sonradan tanımlandığını gördüğüm bazı attribute'lar şöyle

IsRequirement = true,false
Verification Level =
Verification Method =
Use Case ID =


Edit/Columns Menüsü
Bir projedeki sütunlar şöyleydi.
1. ID
2. Documentation

Tools/Filter/Define Menüsü


Bu menü ile "Filter Properties" düğmesi aynı işi yapar. Sadece belli bir başlığı ve altındakileri görmek istersek  açılan pencereden "Objects" sekmesi seçilir. "Include current object" seçilerek "Apply" düğmesi tıklanır. Böylece sadece bir başlık ve altındaki her şey gösterilmiş olur.


Klavye Kısayolları
Object ID'ye gitmek : Ctrl + G ile belirtilen numaraya gidilir.
Yeni Object Girmek : Ctrl + Enter ile yeni satır yaratılır.
"New Object At This Level" simgesi ile aynıdır. Daha sonra "Edit Object Text" ile metin girilir.

Object'i Text Yapmak : Ctrl + T ile başlık metin haline gelir.
Yeni Object Girmeyi Bitirmek : Ctrl + M ile yazılmakta olan hücreden çıkılır. Yazma işlemi biter
Object'i Silmek : Del seçili satırı siler. Eğer silme hakkı yoksa şu hatayı alırız.
"cannot delete - You do not have sufficient access to delete the object."

Renkler
Kırmızı : Kaydedilmemiş satır
Sarı : Kaydedilmiş ama baseline alınmamış satır
Gri : Salt okunur satır

Başka Object'e Giden Linki Takip Etmeke
Doors'ta sağ taraftaki dışarı bakan kırmızı oka tıklanınca seçili maddenin başka bir belgedeki hangi maddeden kaynaklandığı görülebilir. (out link)

Dizin Yapısı
Doors dizinleri aşağıdaki gibi Sistem ve Yazılım ayrımını gösterecek şekilde olabilir.
Software/SSS/XXX
Software/SRS/YYY
Requirement Numarası
Sıralı gider. Silinen requirement "deleted" olarak işaretlenir. Yani şöyledir.
1. ...
2...
3.. (deleted)
4...

Sürükle Bırak
Taşınacak nesneye sol fare tuşu ile basılır. Tuş bırakılmadan hedef üzerine gelinir. Tuş bırakılınca hedefin altına veya içine taşı menüsü çıkar ve uygun olan seçilir.

Doors'u Şifre Girmeden Çalıştırmak
-d databasename -u username -p password seçenekleri  kullanılır. Örnek:
"C:\Program Files (x86)\Telelogic\DOORS_8.1\bin\doors.exe" -d databasename -u username -p password

DXL
Doors için scripting yapabilme imkanı tanır. C'ye benzer. Açılımı Doors Extension Language. 

$DOORS_HOME/lib/dxl/addins/user altına konulan dxl dosyaları User menüsünde görülebilir.

Aşağıda bazı örnekler var. Bu dil büyük küçük harf farkına hassas değildir. (case insensitive) Bir değişkeni tipini tanımlamaya gerek kalmadan kolayca i =5 yazabiliriz.

Modulu Dolaşan Kod
string modulePath = "/Path/..."
string viewName = "MyView"
Module m = read (modulePath,true)
if (m != null)
{
  bool success = load (m,view (viewName))
  if (success)
  {
    Object o
     for o in m do
     {
        print o."Last Modified By" "\n"
     }
  }
  else
  {
    print "Could not load view" viewName
  } 
}
else
{
 print "Could not open view" modulePath
}

DXL ile If Koşulu
if (null current Module) {
 ack "Hata"
 halt
}
Hata Kutusu Çıkartma
string mesaj = "Hata mesajı\n. Hata açıklaması"
ack mesaj
halt
Dosya Dizini Alan Kutu 
DB dlgBox = create ("Input Box"//Formu başlık ile yarat
fileName (dlgBox,"Choose file","*.txt","Text Files"//Forma widget ekle

void okClick (DB dlgBox) {...}//Click handler
realize dlgBox
show dlgBox //Formu göster

Modul'e Ait Attribute Bulma

AttrDef attr1 = find (current Module, "Attr1")
if (null attr1) {
 halt
}
Stream
Stream ofstream;
ofstream = write ("C:\\file.txt")
ofstream << "test" nl