31 Ekim 2016 Pazartesi

Quality Policy

Kalite dokümanında yazan bazı cümleler şöyle. Kalite dokümanı niçin var bilmiyorum.

*Supply our customers with products that meet their expectations.
*Enhance satisfaction of customers, employees, shareholders with continuous improvement

13 Ekim 2016 Perşembe

pthread_join metodu

Giriş
pthread_create metodunun ikinci parametresine NULL geçersek joinable bir thread yaratırız.

1. parametre thread_t yapısı
Thread'i beklemek için pthread_join() metodunu çağırmak gerekir. Klasik kullanımı şöyledir.
pthread_join(t, NULL);
2. ikinci parametre
Thread metodu bir sonuç dönerse kullanılır. Şöyle yaparız.
struct threadresult {
  int sum;
  int product;
};

void* myThread (void* args) {
  ...
  struct threadresult* result = malloc(sizeof(*result));
  result->sum = ...;
  result->product = ...;

  return result;
}

pthread_t t = ...;
struct threadresult* result;
pthread_join (t, &result);
Thread bir sonuç dönmüyorsa zaten null_ptr döndüğü için bizim değişkenimiz de null değeri alır.

3. çağrı sonucu
Şöyle de kullanabiliriz. Çağrı başarılı ise 0 döner.
void *status;
int rc = pthread_join(t, &status);
if (rc) {
  printf("ERROR; return code from pthread_join() is %d\n", rc);
}
Eğer joinable bir thread yaratıp dönüşünü beklemezsek, thread'in çıkış kodu bir yerde saklanacağı için kaynağı israf etmiş oluruz.

Eğer thread iptal edilirse, pthread_join metodu PTHREAD_CANCELLED döner.

8 Ekim 2016 Cumartesi

cfmakeraw

Giriş
Bazı platformlar hem input hem de outputdu raw yapmak için cfmakeraw() metodunu tanımlamışlar ancak bu metod portable değil.
cfmakeraw() and cfsetspeed() are nonstandard, but available on the BSDs.
İmzası şöyle
void cfmakeraw(struct termios *termios_p); 
Bu metod yoksa şöyle yaparız.
// Get current port config.
tcgetattr(sfd, &tty);

//Set raw mode, equivalent to:
tty->c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP
            | INLCR | IGNCR | ICRNL | IXON);
tty->c_oflag &= ~OPOST;
tty->c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
tty->c_cflag &= ~(CSIZE | PARENB);
tty->c_cflag |= CS8;

tcsetattr (sfd, TCSANOW, &tty);

7 Ekim 2016 Cuma

OpenCV FastFeatureDetector Arayüzü

Giriş
Şu satırı dahil ederiz.
#include "opencv2/features2d.hpp"
Constructor
Şöyle yaparız.
Ptr<FeatureDetector> fast = FastFeatureDetector::create (40); 
detect metodu
Şöyle yaparız.
Mat image = imread ("i.jpg");

std::vector<KeyPoint> keypoints;
fast->detect(image, keypoints);

drawKeypoints (image, keypoints, image, Scalar(255, 255, 255), 
  DrawMatchesFlags::DRAW_OVER_OUTIMG);

imshow ("Image", image);


CMake add_library

Giriş
Verilen kaynak kodları derler ve bir kütüphane çıkartır.
add_library(MyLib SHARED MyCode.cpp)
Library + Executable
Aynı anda hem kütüphane hem de executable derlemek için şöyle yaparız.
add_library(
    ${LIBRARY_NAME}
    SHARED
    ${SRC_FILES}
    ${INCLUDE_FILES}
)

add_executable(
    ${EXECUTABLE_NAME}
    main.cpp
)

target_link_libraries(
    ${LIBRARY_NAME}
    sfml-main
    sfml-system
    sfml-window
)

target_link_libraries(
    ${EXECUTABLE_NAME}
    ${LIBRARY_NAME}
)
Header Only Library + Executable
Elimizde şöyle bir yapı olsun
project
 |
 |-------> lib1
 |           |----> lib1.h
 |
 |-------> lib2
 |           |----> lib2.h
 |
 |-------> main.cc
lib1 header only olsun. lib2 de header only ve lib1'e bağımlı olsun. Bu sefer INTERFACE özelliğini kullanıırz. Şöyle yaparız.
add_library(lib1 INTERFACE)
target_sources(lib1 INTERFACE lib1.h)

target_include_directories(lib1 INTERFACE
    "${PROJECT_SOURCE_DIR}/lib1"
)

add_library(lib2 INTERFACE)
target_sources(lib2 INTERFACE lib2.h)

target_include_directories(lib2 INTERFACE
    "${PROJECT_SOURCE_DIR}/lib2"
)

target_link_libraries(lib2 lib1)

add_executable(project main.cc)
target_link_libraries(project lib2)