Sunday, September 01, 2013

Windows PC'yi WiFi Hotspot Olarak Kullanma

3G VINN benzeri mobil internet hizmetleri kullanıyorsanız, bunu aynı zamanda çevrenizdeki cihazlara kendi bilgisayarınız ile wifi üzerinden paylaşabilirsiniz. Aynı zamanda aynı yöntemle kablolu ethernet bağlantınız üzeriden aynı paylaşımı yapmanız mümkün. Aşağıda ilgili adımları 5 adımda en basit şekilde anlatmaya çalıştım.

1- Öncelikle administrator yetkileri ile"cmd" penceresini açın.
(Windows8'de basitçe fare imlecini ekranın en sol altına getirip, sağ tıkaldıktan sonra "Command Prompt (Admin)" dan açabilirsiniz.)


2- Bilgisayarınızın WiFi kartı bu desteği verip vermediğini kontrol etmek üzere :
netsh wlan show driver yazın ve enter'a basın.
Hosted network supported : Yes şeklinde ibareyi görmeniz gerekiyor.


3- Ardından kablosuz iletişim alanı (hotspot) oluşturmak üzere aşağıdaki komutu girin :
netsh wlan set hostednetwork mode=allow ssid=ISIM key=SIFRE_8_KARAKTER
Yeşil ile gösterdiğim kısımlara arzu ettiğiniz isim ve en az sekiz karakterli şifrenizi girin.


4- Şimdi de kablosuz iletişim alanınızı (hotspot) aktive etmek üzere aşağıdaki komutu girin.
netsh wlan start hostednetwork


5- Network connections'ı (ağ bağlantıları) açın, burada bende Wi-Fi-2 olarak eklediğim hospot gözükmekte. Sizde bu isim farklı olabilir ( mesela : Local Area Connection2).

Control Panel >> Network and Internet >> Network and Sharing Center

6- Son olarak 3G VINN bağlantınızı kurduğunuz hotspot'a açmanız gerekiyor.

Bunun için Mobile broadband'a sağ tıkladıktan sonra "sharing" kısmından aşağıdaki görselde gösterildiği gibi yeni eklenen (Wi-Fi 2) adaptörü ekledikten sonra gerekli izin için ilgili alanı tiklemeniz gerekiyor.


Bundan sonra diğer cihazlarınızda her hangi bir WiFi modeme bağlanır gibi internet erişiminizi sağlayabilirsiniz. 

Monday, August 26, 2013

WireShark'ı Root Yetkileri Olmadan Çalıştırma

Uyarı Mesajı : "There are no interfaces on which a capture can be done"

Linux'da wireshark'ı yeni kurup, paketleri dinlemeye başlayacaktım ki yukarıdaki uyarı mesajı beni karşıladı.

Sorun WireShark'ın mesaj trafiğini dinlemesi için Linux üzerinde yeterli yetkilerinin olmaması, yani Root yetkileri ile çalıştırdığınızda bu sorun ortada kalkmış oluyor. Fakat WireShark 1.5 milyon satır kaynak koda sahip devasa bir program ve Root yetkileri ile çalıştırmak sisteminizi beklenmedik tehlikelere atacağı için kesinlikle tavsiye edilen birşey değil.

Bunun yerine kendi kendi kullanıcınıza belli yetkiler vererek bunu halledebilirisiniz. WireShark paket trafiğini izlemek için "dumcap" adlı ayrı bir program kullanıyor. Kendi kullanıcınıza "dumcap" için gerekli izinleri verdiğiniz taktirde WireShark'ı root yetkilerini kullanmaksızın açabilirsiniz.

 

Nasıl yapılıyor?

WireShark için dumpcap'i çalıştırmak üzere bir yetki grubu tanımlıyoruz ve bu yetki grubuna kendi kullanıcımızı dahil ediyoruz :  

$ sudo -s
# groupadd wireshark
# usermod -a -G wireshark kullanıcı_adı
# chgrp wireshark /usr/bin/dumpcap
# chmod 4750 /usr/bin/dumpcap

Yukarıda kullanıcı_adı kısmına mevcut kullanmakta olduğunuz kullanıcı hesabına ait ismi girmeniz gerekiyor. Kullanıcı isminizin ne olduğundan emin değilseniz, root terminalinden çıkıp, aşağıda belirtilen :  
>echo "$USER"
komutu ile mevcut kullacı adın öğrenebilirsiniz.

Bu komutları çalıştırdıktan sonra mevcut kullanıcınızdan çıkıp tekrar login olmanız gerekiyor.

Faydalı bağlantılar :

https://blog.wireshark.org/2010/02/running-wireshark-as-you/
http://packetlife.net/blog/2010/mar/19/sniffing-wireshark-non-root-user/

Linux'da ekran parlaklık ayarı problemi

Geçen hafta kurduğum Debian üzerinde böyle bir sorunla karşılaşmıştım. Ekran parlaklığı hiç bir şekilde değiştirilemiyordu. Bir süre araştırma yaptım ve bu sorunun sıkça karşılaşıldığını gördüm. Sorun bilgisayar açılırken işletim sistemini yükleyen GRUB bootloader'dan kaynaklanıyormuş. Çözüm basit. Üç adet terminal komutunu çalıştırdıktan sonra bilgisayarınızı tekrar açarak (reboot yaptırarak) halledilebiliyor. Aşağıda en basit şekilde anlatmaya çalıştım.

  • Terminali açın ve altaki komut'u komut satırına kopyalayıp-yapıştırın, enter'a basın.
    sudo sed "s/\(GRUB_CMDLINE_LINUX=\)\"\"/\1\"acpi_osi=Linux acpi_backlight=vendor\"/" /etc/default/grub -i 
  • Şifrenizi girin ve tekrar enterlayın. (Root Terminal'deyseniz bu adıma gerek yok)
  • Ardından aşağıdaki komutu yapıştırıp, enterlayın.
    sudo update-grub
  • Son olarak alltaki komutu çalıştırın ve işletim sisteminin tekrar yüklenmesini bekleyin.
    sudo reboot

Friday, February 15, 2013

CSS ile Metin Kutusuna Resim Koyma

Sitenizde kayıt formlarında javascript ve Ajax ile (email,username,password confirm gibi) belli kontroller yapıp, kullanıcıya geri bildirim yapmak isteyebilirsiniz. Ben istiyorum en azından ve bunu formun sağına soluna köşesine taşırmadan direk text box'ın üzerinde bir resimle göstermek tasarımınıza daha şık bir görünüm katacaktır.

"no-repeat" ile resmin tekrarlaranarak tüm metin kutusunu doldurmasını engelleniyor.
170px resmi metin kutusu içerisinde soldan kaydırılma miktarı,
0px ise metin kutusunun üst hizası göre mesefe miktarı oluyor.
height ile de resmin boyutune uyumlu olarak metin kutusunun yükseliğini ayarlayabilirsiniz.

Yukarıdaki kod browser üzerinde derlendikten sonra aşağıdaki gibi gözükecek :




Yukarıdaki örnekte yazının boyutu metin kutusunda daha iyi durması için fontsize 14px yaptım.
Fakat resim üste dayanmış. Biraz daha aşağıda durması gerekiyor.


Bu örnekte ise fontsize'ı biraz daha büyütüp 17px yaptım ve resmi ortalamak için 0px'i 7px yaparak resmi biraz daha aşağıya çektim.

Bi ara üşenmezsem yukarıdaki gibi bir form için AJAX kodlarını ve anlatımını da paykaşırım.
Şimdlik burdaki linkten faydalanabilirsiniz.

Kolay gelsin.

Sunday, December 30, 2012

SQL Reporting Services'in Sonlandırılması

Bilindiği üzere Apache server, port 80'nin kullanımda olduğu durumlarda bloklarnır ve açılması mümkün olmaz. Aynı nedenden dolayı XAMPP üzerinden Apache server'ı çalıştırmaya kalktığımda, başka bir işlemin port 80'i kullandığı için, çalıştırmam mümkün olmadı. Bunun nedeni Skype ve benzeri bir çok program olabilir. Ben de ise bu sorun "SQL Server Reporting Services" neden olduğunu öğrendim.

Hangi işlemin port 80 meşgul ettiğini görmek için cmd arayüzünden
netstat -o -n -a | findstr "0:80"
komutunu kullarak hangi işlem ID'sine sahip programın port 80'ini kullandığını görelim.


Burda Process ID'si 4 olan bir program port 80'i meşgul ediyormuş. Port 80 kullanan bu programı bulmam uzunca vaktime aldı. Sonunda SQL'in reporting service'lerinin buna neden olduğunu öğrendim.
SQL Reporting Services'i kapatmak için:
start >> run>>services.msc 
(Eğer Windows 8 kullanıyorsanız basitçe start ekranına geçip services.msc yazmanız yeterli.)


Sizi yukarıda görülen pencerenin karışlaması gerekiyor. Daha sonra karşınıza çıkan bu pencereden SQL Reporting Services'e sağ tıklayıp "stop" diyerek sonlandırabilirsiniz. Bu sorunun tekrar tekrar karşınıza çıkmaması için sağ tıklayıp Properties'den, Startup type'ı Disabled olarak seçildikten sonra Apply diyerek pencereden çıkılabilir.



Tekrar CMD'ye geçip port 80'ni kontrol ettiğimizde bu sefer bu portu meşgul eden her hangi bir işlemin olmadığınız göreceğiz.


Apache Server'ı çalıştırğımızda ise bu sefer port 80'nin apache server'a ait PID 1100 tarafından kullanıldığını görülecektir.


Umarım karşılaştığınız sorunu gidermenizde yardımcı olabilmişimdir. Kolay gelsin.



Wednesday, July 13, 2011

ABAP - Debug Yaparken Data Explorer'ı Kullanmak






Arka Planda Program Çalıştırmak ve Görüntülemek

Derlenmesi uzun süren programların biz başka işle meşgulken arka planda çalışmasını isteyebiliriz. Bu durumda aşaüğıdaki adımlar izlenerek programın arka planda çalışması sağlanır.
1- Derkenmek üzere SE38 (ABAP Editor) açılır.


2 - Arka planda çalıştırmak istediğimiz program seçilir. Ben burda daha önce hazıladğım Z_BACKGROUND_PROGRAM 'ı  seçiyorum.


3- Daha sonra direk display demek yerine yukarıda görüldüğü üzere Program>> Execure >> Background Seçilir.


4- Çıkan ekranda "Execute Immed." butonuna basılarak derlenme işlemi gerçekleştirilir.


5- Arka planda çalıştırdığımız prgoramı görüntülemek için ilk menüden SM37'ye girilir.


6- Çıkan ekranda üst menüden Execut butonuna basılır.


7- Arka planda çalıştırdığımız program seçilir.


8- Çıkan ekranda TYPE 'ın altındaki ikona taklanarak programımızın derlenmiş halini görüntüleyebiliriz.


9- Üstte daha önceden yazdığımız program derlenmiş olarak gözükmekte. 
Ben basitçe WRITE:/ 'backgorunda çalışan program görüntüleniyor.'. yazmıştım.

Tuesday, July 12, 2011

ABAP - Subroutine Kullanarak Recursive Program Yapmak

ABAP'ta PERFORM ifadesi program içinde alt bir programa(subroutine) dallanmasını sağlar. Böylece uzun bir program parçasını sadece PERFORM ifadesini yazarak tekrar tekrar çağrılabilir.

Aşağıdaki örnekte SUBROUTINE kullanarak recursive bir şekilde kullanıcıdan alınan rakamdan geriye sayan bir program.



REPORT  Z_PERFORM_REC.

parameters sayi type i.
*
perform test.
*
form test.
     if sayi > 0.
        write :'sayi :'sayi .
        sayi sayi 1.
        PERFORM TEST.
     else.
         write   'islem tamamlandi'.
     endif.
endform.




Programda SAYI değişkenini kullanıcıdan alınıyor. Sonra PERFORM komutu ile TEST formunun içine giriyor. Burda SAYI değişkeni 0'dan büyükse SAYI'yi yazdırıyor, sonra '1' çıkartıp tekrar kendini çağırıyor. Ardından tekrar aynı işlem gerçekleşiyor. Bu işlem SAYI'nın değeri 0 olana kadar devam ediyor. Ardından ENDFORM ifadesiyle SUBROUTINE'den çıkılıyor.

Monday, July 11, 2011

ABAP- Dinamik ve Statik Kaynakta Belirtme

Statik veri çekme database'deki her hangi bir tablodan bir filtre uygulamaksızın belli sayıda satırın getirilmesini sağlar. Aşağıda MARA tablosundan MANDT ve ERNAM kolonlarını çeken ABAP kodları mevcut. Görüldüğü üzere "FROM mara UP TO ROWS." komutu ile tablodan sadece 4 satır çağrılmış.


REPORT demo_select_static_database.

DATA wa TYPE mara.

SELECT *
  INTO wa
  FROM mara UP TO ROWS.
  WRITE/ wa-mandtwa-ernam.
ENDSELECT.
Program çıktısı:








Dinamik'te ise WHERE ifadesi kullanılarak hedef tablo filtre edilerek getirilir. Aşağıdaki kodlarda MANDT kolonunun 800'e eşit olduğu satırlar filtre edilerek ekrana çağrılır.

REPORT demo_select_dynamic_database .

DATA wa TYPE mara.

SELECT  *
  INTO  wa
  FROM  ('mara'CLIENT SPECIFIED
  WHERE mandt '800'.
  WRITE/ wa-mandt, wa-ernam.
ENDSELECT.


Programı çıktısı:


Friday, July 08, 2011

ABAP- INNER ve LEFT OUTER JOIN

Aşağıda basit bir LEFT OUTER JOIN örneği mevcut.


REPORT demo_select_left_outer_join .
DATABEGIN OF wa,
        carrid   TYPE scarr-carrid,
        carrname TYPE scarr-carrname,
        connid   TYPE spfli-connid,
        cityfrom TYPE spfli-cityfrom,        
      END OF wa,

      itab LIKE SORTED TABLE OF wa
                WITH NON-UNIQUE KEY carrid.

SELECT s~carrid s~carrname p~connid p~cityfrom
  INTO CORRESPONDING FIELDS OF TABLE itab
  FROM scarr AS s
        LEFT OUTER JOIN spfli AS ON s~carrid   =  p~carrid AND
                           p~cityfrom 'FRANKFURT'.



LOOP AT itab INTO wa.

  WRITE/ wa-carridwa-carrnamewa-connidwa-cityfrom.

ENDLOOP.

Program çıktısı aşağıdaki gibidir. Görüldüğü üzere FRANKFURT ile eşleşmeyen satırlar da çağrılmış durumda.



















Aynı örnek INNER JOIN ile yapıldığında ise FRANKFURT'la eşleşmeyen satırlar gözükmeyecektir.


REPORT demo_select_inner_join .

DATABEGIN OF wa,
        carrid   TYPE scarr-carrid,
        carrname TYPE scarr-carrname,
        connid   TYPE spfli-connid,
        cityfrom TYPE spfli-cityfrom,        
      END OF wa,



      itab LIKE SORTED TABLE OF wa
                WITH NON-UNIQUE KEY carrid.

SELECT s~carrid s~carrname p~connid p~cityfrom
  INTO CORRESPONDING FIELDS OF TABLE itab
  FROM scarr AS s
        INNER JOIN spfli AS ON s~carrid   =  p~carrid AND
                           p~cityfrom 'FRANKFURT'.

LOOP AT itab INTO wa.
  WRITE/ wa-carridwa-carrnamewa-connidwa-cityfrom.
ENDLOOP.

Program çıktısı aşağıdaki gibidir.

ABAP - TYPES ve DATA ifadeleri kullanımı

TYPES ifadesi programda yerel veri TYPE'ları oluşturmak için kullanılır.
DATA ise programda yeni bir veri objesi oluşturmak için kullanılır.

Aşağıda basit bir örnek mevcut.



REPORT demo_types_statement.

TYPES yazi(10TYPE c.

TYPES sonuc   TYPE DECIMALS 2.

DATA text        TYPE yazi.

DATA amount      TYPE sonuc.

text ' 4 / 3 = '.

amount .

WRITEtextamount.



Program çıktısı aşağıdaki gibidir.

Bu programda yazi ve sonuc, yerel data Type'ları olarak tanımlanmış. Böylelikle amount ve text gibi yeni data objeleri tanımlarken 'c' veya 'p' yazmak yerine bu yerel ifadeler kullanılır. Bu programı aşağıdaki gibi de yazsak bir şey fark etmeyecekti.

REPORT demo_types_statement.

*

*TYPES yazi(10) TYPE c.

*TYPES sonuc   TYPE p DECIMALS 2.

DATA text(10)        TYPE c.
DATA amount      TYPE DECIMALS 2.

text ' 4 / 3 = '.
amount .
WRITEtextamount.



Aşağıda başka bir örnek daha mevcut. Bu örnek biraz daha amaca uygun, tekrar tekrar uzun bir şekilde TYPE yapısı yazmak yerine önceden tanımlanmış yerel TYPE'ı kullanarak DATA objelerine referans veriyor.

REPORT demo_structure.

TYPESBEGIN OF name,
         title(5)       TYPE c,
         first_name(10TYPE c,
         last_name(10)  TYPE c,
       END OF name.


TYPESBEGIN OF mylist,
         client         TYPE name,
         number         TYPE i,
       END OF mylist.



DATA list1 TYPE mylist.
DATA list2 TYPE mylist.
DATA list3 TYPE mylist.


list1-client-title 'Lord'.
list1-client-first_name 'Howard'.
list1-client-last_name 'Mac Duff'.
list1-number 1.



list2-client-title 'Mr.'.
list2-client-first_name 'Kerem izzet'.
list2-client-last_name 'Atam'.
list2-number 2.



list3-client-title 'Sir'.
list3-client-first_name 'Hasan'.
list3-client-last_name 'Huseyin'.
list3-number 3.





WRITE list1-client-title.
WRITE list1-client-first_name.
WRITE list1-client-last_name.
WRITE 'Number'.
WRITE list1-number.
skip.



WRITE list2-client-title.
WRITE list2-client-first_name.
WRITE list2-client-last_name.
WRITE 'Number'.
WRITE list2-number.
skip.



WRITE list3-client-title.
WRITE list3-client-first_name.
WRITE list3-client-last_name.
WRITE 'Number'.
WRITE list3-number.



Program çıktısı aşağıdaki gibidir.


Yukarıdaki örnekte name ve mylist yapıları yerel TYPE olarak tanımlanarak programın sonraki parçalarında list1, list2 ve list3; DATA yapılarına tek bir ifade olarak referans gösterilmiş. Daha sonraki adımlarda ise list1, list2 ve list3 DATA yapısına veriler girilmiş ve yazdırılmış.



LIKE ve TYPE 'ın kullanımı


Yukarıdaki örnekteki gibi yerel TYPE tanımlamayıp, aynı yapıyı tekrar tekrar kullanmak isteseydik. Bu durumda ilk DATA yapısını tanımlayıp sonraki yapılarda LIKE ifadesini kullanarap ilk DATA yapısı referans alınabilir. Aşağıdaki örnkte TYPES ifadesi kullanılmadan aynı program  derlenmiştir program çıktısı yukardakinin aynısı olacaktır.


REPORT demo_structure.


DATA BEGIN OF name,
         title(5)       TYPE c,
         first_name(10TYPE c,
         last_name(10)  TYPE c,
       END OF name.



DATA BEGIN OF list1,
         client         LIKE name,
         number         TYPE i,
       END OF list1.



DATA list2 LIKE list1.
DATA list3 LIKE list1.



list1-client-title 'Lord'.
list1-client-first_name 'Howard'.
list1-client-last_name 'Mac Duff'.
list1-number 1.



list2-client-title 'Mr.'.
list2-client-first_name 'Kerem izzet'.
list2-client-last_name 'Atam'.
list2-number 2.



list3-client-title 'Sir'.
list3-client-first_name 'Hasan'.
list3-client-last_name 'Huseyin'.
list3-number 3.


WRITE list1-client-title.
WRITE list1-client-first_name.
WRITE list1-client-last_name.
WRITE 'Number'.
WRITE list1-number.
skip.



WRITE list2-client-title.
WRITE list2-client-first_name.
WRITE list2-client-last_name.
WRITE 'Number'.
WRITE list2-number.
skip.


WRITE list3-client-title.
WRITE list3-client-first_name.
WRITE list3-client-last_name.
WRITE 'Number'.
WRITE list3-number.

Thursday, July 07, 2011

ABAP'da basit INNER JOIN Uygulaması

SAP GUI'de MARA ve MAKT tabloları arasında basit bir INNER JOIN uygulaması kodlar aşağıdaki gibidir. matnr ve mandt iki tabloda da bulunan key attribute'lar oldukları için JOIN'de tabloları bağlamak için kullanılır.


REPORT demo_select_left_outer_join .



DATABEGIN OF wa,

        matnr   TYPE MARA-matnr,

        ersda   TYPE MARA-ersda,

        spras   TYPE MAKT-spras,

        maktx   TYPE MAKT-maktx,

      END OF wa,

      itab LIKE SORTED TABLE OF wa

                WITH NON-UNIQUE KEY matnr ersda spras maktx.



SELECT MR~matnr MR~ersda MK~spras MK~maktx

  INTO CORRESPONDING FIELDS OF TABLE itab

  FROM MARA AS MR

       INNER JOIN MAKT AS MK ON MR~matnr =  MK~matnr AND

                                MR~mandt =  MK~mandt.



LOOP AT itab INTO wa.

  WRITE/ wa-matnrwa-ersdawa-spras ,wa-maktx.

ENDLOOP.
Programın derleme ekranı şekildeki gibidir.

Saturday, August 28, 2010

TC Kimlik No Algoritması

Bilindiği üzere TC No toplamda 11 haneden oluşuyor. Fakat en sağdaki iki hane kendisinden önceki dokuz haneden belli bir algoritmaya göre türetiliyor. Böylelikle herhangi bir 11 haneli sayı TC kimlik no özelliğini taşımamış oluyor.

Kimlik numarasının 10'uncu hanesi;
kimilk numarsanın 1'inci, 3'üncü, 5'inci, 7'inci ve 9'uncu hanelerindeki rakamların toplamının 7 ile çarpımından,
kimlik nurasanın 2'inci, 4'üncü, 6'ıncı ve 8'inci hanlerindeki rakamların çıkarılmasından elde edilen sayının 10'a bölümünden kalan ile elde ediliyor.

10uncu= mod 10 [ 7x (1inci + 3üncü + 5inci + 7nci + 9uncu) - ( 2inci + 4üncü + 6ıncı + 8inci ) ]

Kimlik numarasının 11'uncu hanesi;
kimlik numarasının kendisinden önce gelen 10 hanedeki rakamların toplamının 10'a bölümünden kalan ile elde ediliyor.

11inci= mod 10 [ 1inci + 2inci + 3üncü  + 4üncü + 5inci + 6ıncı + 7nci + 8inci + 9uncu  + 10uncu ]

Akraba kimlik numarası elde etmek için de, (sizinle aynı soyadını paylaşann başka birinin kimlik numarasına ulaşmak için);
Kimlik numarasının anlamlı dokuz rakamı alınır ve baştan dört hane ve sonraki beş hane olmak üzere ikiye ayrılır.

Örnek(1) 1111 - 11111- 10 gibi...

Ardından 5 basamaklaı kısma 3 ekleyip, 4 basamaklı kısımdan 1 çıkarıldığında elde edilen yeni dokuz haneli sayıydan yukarıda belirtildiği gibi 10'uncu ve 11'inci hanelerin hesaplanması ile yeni kimilk numarası elde edilmiş olur.

Örnek(2):  11114- 1110 - 56

Bu şekilde genelde sizden yaşça daha büyük bir akrabalarınızın kimlik numarasına ualşırısnız.
Aynı şekilde 3 çıkartılıp, 1 eklediğiniz taktirde tam tersi gerçekleşir.

Yukarı da bu hesaplamaları kolaylaştırma amacıyla JavaScript'te bu algoritmayı uygulamaya çalıştım. Program şuan dört dörtlük çalışmasa bile aşağı yukarı istenileni veriyor. Hataları düzeltmeye çalışıyorum henüz.

Ben bu yolla en son 1903 doğumlu babamın halasının kimlik numarasına kadar yaklaşık 40 akrabamın kimlik numaralarına ulaştım. Çoktan vefat etmiş kişilerin bile kimlik numaralarının çıkarılması ilginç.

Üretilen Kimlik no'larının sahiplerini https://secure.kamilkoc.com.tr/YolKartBasvuru.aspx adresinden öğrenebilirsiniz.

Kişi hala yaşıyorsa ikamet ettiği adres bilgilerini http://www.ysk.gov.tr/ysk/index.html adresinden elde edebilirsiniz.