Yine, yeniden …

2007 yılında başladığım blog tutma olayına, 2009 yılı itibariyle ara vermiş ve daha az yazar olmuştum. 2011 yılından sonra ise neredeyse hiç yazmadım. Yazmayı istesem de vakit ayıramadım.

Bir şeyler yazabilmek için ciddi bir zaman gerekiyor. Aynı şekilde yazacağın konu hakkında tam bilgiye sahip olmalısın ki okuyanı tatmin edesin. Tatmin edici bir şeyler yazmadıktan sonra ne gerek var kasmaya deyip bloguma dokunmamıştım.

Velhasıl; yeniden blog macerasına başlamış bulunmaktayım. Ağırlıklı olarak yazılım konusunda söyleyeceklerim olacak. Teknik konularda Türkçe içerik üreterek bir bakıma vicdanımı rahatlatmak istiyorum.

Eski blog sayfam hala duruyor. İncelemek isterseniz blog.yesersin.com ‘u ziyaret ediniz.

 

Güncelleme: 25 Kasım 2016 ‘da yaptığım bir hata sonucu tüm database silmiş bulundum. Allahtan google cache var. Tüm yazıları tekrar getirerek, -ki yorumlar hariç- siteyi tekrar kurmam gerekti. Erişim problemi yaşarsanız bu yüzdendir.

İyi okumalar.

Ubuntu TortoiseSVN Kurulumu

Github başta olmak üzere, ortak çalışma alanlarına bağlanmak için kullandığım SVN programı Tortise SVN dir. Kurulumu oldukça basittir.

Ubuntu Ver: 14.04

1
2
3
4
5
sudo add-apt-repository ppa:rabbitvcs/ppa
 
sudo apt-get update
 
sudo apt-get install rabbitvcs-nautilus3

GUI ‘sini görmek istiyorsanız “Oturum Kapat” yapıp tekrar girmeniz veya;

1
sudo nautilus

Temiz kodlamalar.

Ubuntu Apachi ve PHP (LAMP) Kurulumu

LAMP: Linux, Apache, Mysql, Php isimlerinin baş harflerini alan, paket halinde bir yazılımdır. Bunu kurduktan sonra ekstra bir yazılıma ihtiyacınız olmuyor.

Ayrı ayrı da yapabilirsiniz. Amerikayı tekrar keşfetmenin lüzumu yok. O yüzden LAMP kurup gerekli ayarları yapmanız zaman tasarufu açısından önemlidir.

1
sudo apt-get install apache2 php5 mysql-server phpmyadmin #sirayı takip etmeniz faydalıdır.

Sizden bir seçim yapmanızı isterse “apache2” seçin. Şifrenizi hatırlayacağınız bir şey girin.

Her şey sorunsuz gittiyse: Tarayıcınızı açın, adres olarak “http://localhost/” yazın “It’s Work” yazısını gördüyseniz çalışıyor demektir.

Ekrana Hata Mesajı Basmak

Yeni kurulum sonrasında php ekrana hataları basmıyor. Bunu aktif etmeniz gerekmektedir.

1
2
3
4
5
6
7
8
sudo gedit /etc/php5/apache2/php.ini
#Bu satırı
display_errors = Off
#bununla değiştirin
display_errors = On 
 
#Apache Restart:
sudo /etc/init.d/apache2 restart

Temiz kodlamalar.

MSSQL, Aynı Database Dosyasının Yedeğin Farklı İsimle Restore Edilmesi

MSSQL de var olan, canlıda ki bir veritabanın üzerinde değişiklik yapmak istemediğimden, bu veritabanının bir kopyasını alıp onun üzerinde deneme yapmak istedim. Bunun içinde baktım klasik Backup/Restore yöntemleri işimi görmüyor bende şu yöntemi keşfettim.

 

1. Adım
Backup aldığınız .bak dosyasının log file ismi önemli. Öncelikle onu öğrenmeniz gerek.
 

1
2
  restore filelistonly from disk='c:\Erkan-22082016100353.bak'
--Çıktısı LogicalName yazan kısımdır. Bende 'ERP' ve 'ERP_log' yazıyor

2. Adım
Sırada bu .bak dosyasının kopyasını yaratmak var. Move komutunun oldugu yere dikkat edin. Orası 1. adımda çıkan isimdir.
 

1
2
3
4
 restore database erkanYedek From disk='c:\Erkan-22082016100353.bak'
with 
move 'ERP' to 'C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\erkanYedek.mdf',
move 'ERP_log' to 'C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\erkanYedek_log.ldf'

Artık elimde erkanYedek isimli, erkan isimli veritabanının bire-bir aynısı database mevcut.

Linux da MSSQL GUI Bağlantı, FortiClient VPN, Remote Windows Uygulaması (Ubuntu, Kali .deb destekli)

Uzun yıllar Ubuntu kullandım. Linux benim için heyecan ve hız demek. Bu yüzdendir ki yaptığım her işi Ubuntu dan halletmeye çalışırım. Ancak iş sahası Windows olunca mecburen bir çok işi windows uyumlu yapmak gerekiyor. Benim en çok aradığım 3 program vardı. Bunlar windowsta ki işlerimin yarısı demekti.
Mssql arayüzüne bağlanmak, remote server desktop, birde ağın localine bağlanmak için forticlient. Bunların 3 ü olduktan sonra heryer Paris…

Mssql için DBeaver

Bence harika bir araç. Aklınıza gelen bütün DB ‘lere bağlanıyor. Kurulumu kadar kullanımı da basit.
dbeaver indirelim Debian 64bit olanı indirdim. İndirdiğimiz dizine girip -ki benim /root/Download klasörü

1
sudo dpkg -i dbeaver-ce_3.7.2_amd64.deb

Linux Forticlient VPN Kurulumu
Vpn ile şirket içi ağa erişmek için kullandığım harkulade bir araç.
forticlient sslvpn indirelim İndirdikten sonra kurulumu yukari da anlattığım gibidir.

Windowsa uzak masaüstü bağlantısı sağlamak için kullandığım Rdesktop

1
2
3
$ sudo add-apt-repository ppa:pmjdebruijn/rdesktop-release
$ sudo apt-get update
$ sudo apt-get install rdesktop

rdesktop terminal kullanımı

1
 rdesktop -u administrator -p sifremiz 192.168.1.200

Hepsi bu kadar.

Volley ile Android Json haberleşmesi

Merhaba,

Android ile uğraşıyorsanız mutlaka bir servis kullanıyorsunuzdur. Ben servis olarak Json kullanıyorum. Bu servis ile Android tarafında Volley kütüphanesi ile haberleşiyorum. Eğer zorlanan arkadaşlar varsa Volley nasıl kullanılır ufak bir örnekle anlatmaya çalışacağım.

1. Adım Öncelikle volley.jar ‘ı indirip. Projemizde app/libs/ içine kopyalamamız gerekiyor.
2. Adım Kopyaladıktan sonra Android studio kullananlar için “proje sağ tuş – Open Module Setting – Dependencies – Add( alt+insert) – file dependencies” diyerek /libs içinde ki volleyi bağımlılıklara ekliyoruz.
3. Adım AndroidManifest.xml dosyasını açıp içersine aşağıdaki yetkiyi ekliyoruz.

<uses-permission android:name="android.permission.INTERNET"/>

4. Adım volley sınıfı olan kodları yeni bir sınıf oluşturup “AppController.java” diyerek kayıt ediyoruz. Ve bunu /src/main/java/” içersine ekliyoruz.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public class AppController extends Application {
    public static final String TAG = AppController.class.getSimpleName();
 
    private RequestQueue mRequestQueue;
 
    private static AppController mInstance;
 
    @Override
    public void onCreate() {
        super.onCreate();
        mInstance = this;
    }
 
    public static synchronized AppController getInstance() {
        return mInstance;
    }
 
    public RequestQueue getRequestQueue() {
        if (mRequestQueue == null) {
            mRequestQueue = Volley.newRequestQueue(getApplicationContext());
        }
 
        return mRequestQueue;
    }
 
    public  void addToRequestQueue(Request req, String tag) {
        req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
        getRequestQueue().add(req);
    }
 
    public  void addToRequestQueue(Request req) {
        req.setTag(TAG);
        getRequestQueue().add(req);
    }
 
    public void cancelPendingRequests(Object tag) {
        if (mRequestQueue != null) {
            mRequestQueue.cancelAll(tag);
        }
    }
}

5. Adım Her sınıf eklendikten sonra AndroidMaifest.xml ‘e bu sınıf kayıt edilmelidir. Bizde açıp aşağıdaki kodu “application” tagından sonra ekliyoruz.

  android:name=".AppController"

6. Adım Adım Son olarak json formatınıza göre sınıf yazmanız gerekiyor. Ben Array yapısını kullanıyorum, Json formatım şu:

  {
  "error": false,
  "sabitler": [
    {
      "yoneticiAdi": "Erkan Yeşersin",
      "yoneticiMail": "yesersin@gmail.com",
      "yoneticiTel": "123456",
      "yoneticiIban": "TR10200020000200002000000",
      "karOrani": "20" 
    }
  ]
}

7. Adım Veri çekmek için kullandıgımız sınıfımda şu şekilde:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
private  void JsonOrnegiFonksiyonu(){
 
        final StringRequest strReq = new StringRequest(Request.Method.GET,
                "http://erkanyesersin.com/ornekJson.php", new Response.Listener<String>() {
 
            @Override
            public void onResponse(String response) {
                try {
                    jsonResponse = "";
                    JSONObject jObj=new JSONObject(response);
 
                    boolean error = jObj.getBoolean("error");
                    if (!error) {
 
                        JSONArray questionsArray = jObj.getJSONArray("sabitler");
                        for (int i = 0; i < questionsArray.length(); i++) {
                            JSONObject c = questionsArray.getJSONObject(i);
 
                            String yoneticiAdi = c.getString("yoneticiAdi");
                            String yoneticiMail = c.getString("yoneticiMail");
                            String yoneticiIban = c.getString("yoneticiIban");
 
                            jsonResponse += "Name: " + yoneticiAdi + "\n\n";
                            jsonResponse += "Email: " + yoneticiMail + "\n\n";
                            jsonResponse += "Home: " + yoneticiIban + "\n\n";
                        } 
                        txtResponse.setText(jsonResponse); 
                    } 
 
                } catch (JSONException e) {
                    Log.i("BekleyenSiparis","Excep "+e.getMessage());
                    e.printStackTrace();
                }
 
            }
 
        }, new Response.ErrorListener() {
 
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d(TAG, "Error: " + error.getMessage());
                Toast.makeText(getApplicationContext(),
                        error.getMessage(), Toast.LENGTH_SHORT).show();
 
            }
        });
 
        AppController.getInstance().addToRequestQueue(strReq, "ConstantInfo");
    }

8. Adım Veri göndermek için kullandıgımız sınıfımda şu şekilde:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
  private void jsonSave(){
        StringRequest stringRequest = new StringRequest(Request.Method.POST,
                "http://erkanyesersin.com/test.php",new Response.Listener<String>(){
 
            @Override
            public void onResponse(String response) {
                try {
                    JSONObject jObj = new JSONObject(response);
                    Toast.makeText(getApplicationContext(),jObj.getString("mesaj"),Toast.LENGTH_LONG).show();
                } catch (JSONException e) {
                    e.printStackTrace();
                }
 
            }
        }, new Response.ErrorListener() {
 
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e(TAG, "Registration Error: " + error.getMessage());
                Toast.makeText(getApplicationContext(),
                        error.getMessage(), Toast.LENGTH_LONG).show();
 
            }
        }) {
            //Esas post işini yapan kısım.
            @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = map;
                map.put("test", "erkanssss");
                //burada put: ilk parameter $_POST["test"] olandır. Diğeride postun değeridir.
                return params;
            }
 
        };
        AppController.getInstance().addToRequestQueue(stringRequest, "ers");
    }

Piyasa Adamı Olmak

Benim yaşım kurtarmıyor ama 70’li yılları yaşayanlar bilirler: Izzet Altınmeşe diye bir sanatçı vardı. Sesi ve sözleriyle insanları mest ederdi. Şimdi kaç kişi tanır, sever bilmem. Ama döneminin adamı olmuş bir sanatçıdır kendileri.

Bir çok meslekte dönemini iyi değerlendirmiş ama sonraları unutulmuş “döneminin adamı” olmuş çok kişi sayabilirim size. Peki bu iyi bir şey mi ? Yani bir dönemde yıldız olmak mı yoksa Sezen Aksu gibi yıllara meydan okurcasına sevilmek mi daha doğru ?

Burada bahsetmek ve değerlendirmek istediğim konu aslında bu “Piyasa adamı olmak ne kadar mantıklı?”

Teknoloji, özellikle yazılım dünyası çok hızlı kabuk değiştiriyor. Bugün popüler olan bir yazılım dili 3-5 yıl sonra silinmeye başlayabiliyor. En son örneği de IOS programlamada kullanılan Objective C yerini Swing ‘e bırakmış olması.

Bunu lise yıllarından beri piyasanın içinde olan biri olarak çok iyi gözlemlediğimi düşünüyorum. Lise yıllarımda bize “Turbo Pascal 6.0” in çok iyi bir dil olduğu, bir çok yerde kullanıldığı anlatılırdı. Sonra “Visual Basic 6.0” ‘ın çok iyi olduğu, görsel olduğu için piyasaya hakım olacağı söylenirdi. Nitekim oldu da. Zamanının virüsleri Pascal ‘la tanıdım, marketlerde kullanılan fiş programları bununla yazılırdı; Masaüstü programlarını da VB 6.0 ile geliştirdim. Ciddi anlamda bir potansiyeli vardı. O zamanlar bu dili bilmek iyi bir iş sahibi olmakla eş değerdi.

Peki şimdi ne oldu ? Şuanda piyasada iş yapan çoğu kişi Turbo Pascal ‘ı bilmez bile. Çünkü daha güçlü diller çıktı. Hal böyle iken “bir programlama dilini çok iyi biliyor olmak mi mantıklı yoksa her dili azda olsa bilip işe göre yoğunlaşmak mı mantıklı ?” diye bir soru daha geliyor aklıma.

Bugüne kadar çevreme ve kendime şunu söylemişimdir “Piyasa adamı olma/olmayın”. Bu durumda piyasa adamını tanımlamak gerekir. Bence piyasa adamı demek: iş imkanlarını, aranan nitelikleri takip edip ona göre o dile yoğunlaşan adam demektir. Başka bir tabirle: fanatik derecesinde bir dile bağlı kalıp sadece onu öğrenen adamdır.

Ne kadar katılırsınız bilmem. Benim tanımım budur. Profesyonel insanlar her şarta uyum sağlayabilmelidir. Fanatik olmadan, her dilin özelliğini bilmelidir. Bir dile bağımlı kalınırsa yukarıda verdiğim örnekte olduğu gibi kendini 3-5 yılda silinip gider.

Sevdiğim bir söz vardır: “İki yılda bir yeni bir programlama dili öğrenecek cesaretiniz yoksa sizden yazılımcı olmaz” diyordu. Ne kadar da güzel bir söz. Anlatmak istediğimde tam olarak bu aslında.

Apache Maven Kurulumu ve Kullanımı -1

Maven bir proje yönetim aracıdır. “Ben projelerimi zaten kendim (ya da IDE’m vasıtasıyla) yönetebiliyorum. Bunun için bir araca ne gerek var?”, demeyin. Eğer böyle diyorsanız muhtemelen projeleriniz Maven kullanmanızı gerektirecek büyüklükte değildir. Kurumsal projeler ise bazen o kadar büyük olabiliyor ki, Maven gibi araçlara ihtiyaç duyulabiliyor.

İhtiyac duymanız halinde nasıl kurulacağı ve kullanılacağı ile ilgili bir yazı dizisi paylaşmak istiyorum. Öncelikle kurulumla başlayalım.

Adım 1: http://maven.apache.org/download.cgi adresinden apache-maven-3.3.3-bin.zipgibi son sürüme ait dosyayı indirin.

Adım 2: Arşiv dosyasını hızlı erişim için c:\maven gibi bir dosya içersine ayıklama yapın.

Adım 3: Mavenı sisteme tanıtmamız gerekiyor. Bunun içinde “Başlat > Kontrol Paneli >Sistem> Gelişmiş Sistem Ayarları > Gelişmiş > Ortam değişkenleri > Sistem Değişkenleri ” (Dikkat: Kullanıcı Değişkenleri Değil) Burada  “path” diye bir değişken adı olacak onu bulun “düzenle” yi tıklayın. Düzenle dediğinizde satırın en sonuna gidin “;(noktalı virgül)” den sonra “c:\maven\bin” yazın. Sistem tanımlaması bitti. Dikkat etmeniz gereken isimlerin dogru olmasıdır.

Adım 4: Bakalım çalışıyor mu deyip “Başlat > Çalıştır > cmd ” yazalım. Çıkan ekrana mvn -vyazın

 

Özetle yapmanız gereken için şu görseli izleyiniz: http://recordit.co/b2mtLFwIu6

 

2014 SQL Server Configuration Manager : Cannot connect to WMI provider – Invalid class [0x80041010] Hatası

Android tablet uygulaması için MSSQL ‘e bağlanmam gerekti. Bu bağlantıyı sağlarken MSSQL configurasyonu yapmak istedim. Bu Sırada bazı hatalar aldım. Biraz araştırma yapınca sorunu çözebildim. İleride böyle bir hata ile karşılaşırsanız şu adımları takip edin.

Hata Mesajı:

Cannot connect to WMI provider. You do not have permission or the server is unreachable. Note that you can only manage SQL Server 2014 and later servers with SQL Server Configuration Manager.

Çözüm:

  • Hasar gören sistem dosyalarını düzeltelim. Başlat+Çalıştır  + Cmd ekranına sfc /scannow” yazmanız yeterli
  • Winmgmt servisi durduralım Cmd ekranına “net stop winmgmt”
  • Son olarakta Cmd ekranına aynı şekilde şunu yazın. mofcomp.exe “C:\Program Files (x86)\Microsoft SQL Server\120\Shared\sqlmgmproviderxpsp2up.mof”
  • Dikkat etmeniz gereken \120\ isimli klasör sizin SQL Server sürümünüzee göre değişir. Ben SQL 2014 kullandığım için \120\

Mutlu son. Sql Server Configuration açıldı.

Gmail postalarını masaüstüne almak

Bundan bir kaç ay önce önemli gördüğüm bir dökümanı (.net ile geliştirdiğim bir modüldü) kaybolmasın diye gmail hesabımın taslak kısmına kayıt etmiştim. Amacım ilerleyen günlerde rahatlıkla ulaşabilmekti.

Bir kaç gün önce bu dökümana ihtiyacım oldum. Gmail dosya indirme politikasını değiştirdiği için taslak olarak kayıtlı maillerimi indirmeme izin vermedi. Alternatif bir yol bulmam gerekti.

İzlediğim yol şöyle oldu;

  1. Öncelikle tüm Gmail postalarınızı (Spam klasörü dahil) arşivliyorsunuz. https://www.google.com/settings/takeout
  2. Arşivi bilgisayarınıza kayıt edin. (.mbox) uzantılı bir dosyanız olacaktır.  mbox uzantısını açmak için programa ihtiyacınız var.
  3. .mbox uzantılı dosyayı http://www.aid4mail.com/ burada ki programla açtım .eml uzantılı dosyalar elde ettim.
  4. .eml uzantılı dosyaları açmak ise basit. https://www.mozilla.org/tr/thunderbird/ bunu indirerek sürükle-bırak yöntemiyle dosyalarınızı açabilir. Ekli dosyalarınızı bilgisayarınza indirebilirsiniz.