folder Tahribat.com Forumları
linefolder Android - IOS Programlama
linefolder Github Daki Projem İçin Öneriler



Github Daki Projem İçin Öneriler

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MhmdAlmz
    MhmdAlmz's avatar
    Kayıt Tarihi: 09/Ağustos/2015
    Erkek

    Mürit ve Müridelerim, 

    1-2 ay önce yazdığım android den gönderilen API isteklerini şifrelemek adlı programımı github'a koydum. 

    Projeyi detaylı bir şekilde http://mhmdalmz.com/index.php/2017/06/24/android-php-veri-trafigini-sifreleme/ burada anlattım.

     

    Github Link (Php): https://github.com/MhmdAlmz/SecurePhpRestAPI

    Github Link (Android): https://github.com/MhmdAlmz/SecureAndroidRestAPI

     

    Linkler buradadır. Önerileriniz benim için önemli şurayı veya şurayı düzeltebilirsin veya şu kodu şöyle yapsan daha iyi olur senin için gibi önerileriniz nelerdir ?

    Atış serbest. Github'a projeyi koyarken bir hayli zorlandım projeyi sanırırm doğru bir şekilde ekleyebildim.

     Mod: Konuları doğru kategorilere açmaya özen gösterelim.

     


    Andolsun kuşluk vaktine ve dindiği zaman o geceye ki, Rabbin sana veda etmedi ve darılmadı! Ve kesinlikle senin için sonu önünden (ahiret dünyadan) daha hayırlıdır. ileride Rabbin sana verecek de hoşnut olacaksın! O, seni bir yetim iken barındırmadı mı? Seni, yol bilmez iken (doğru) yola koymadı mı? Seni bir yoksul iken zengin etmedi mi? Öyle ise, sakın yetime kahretme (onu horlama)! El açıp isteyeni de azarlama! Fakat Rabbinin nimetini anlat da anlat!
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YeniHarman
    YeniHarman's avatar
    Kayıt Tarihi: 17/Haziran/2012
    Erkek

    Oy oy oy. 15 sene öncesi PHP yazımı.

    1. Sınıf ismiyle dosya ismi aynı olsun ki autoloader kullanabilesin.

    1,5. Klasör hiyerarşisini oluştur.

    2. Autoloader kullan.

    3. Design patternleri kullan.

    4. Sınıf dışında fonksiyonun olmasın. Hangi sınıf kullanıyorsa onun elemanı olsun ya da genel bir kullanımı varsa ilgili sınıfın ya da util sınıfının statik elemanı olsun.

    5. MB stringlerle düzgün çalışıyor mu? PHP ile ne zaman mb string uğraşsam sıkıntı yaşadım.

    6. Sistemin benim sunucumda çalışıp çalışmayacağını denetleyen bir test yazsan iyi olur (şu eksik, şu php konfigurasyonunda kapalı...).

    7. Proje adı, yaptığı iş ile uyumlu değil. RestAPI'yi görünce bayağı bi uyarlama sandım ben. Seninki sadece şifreleme yapan bir proksi. Ona göre isim versen çok daha güzel olurdu.


    Olaylara karışmayın!
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    JPriest
    JPriest's avatar
    Kayıt Tarihi: 09/Mart/2007
    Erkek

    -> Githup link yazmışsın, github olarak değiştirmelisin.

    -> Secret Key'i kod içine hardcoded yazmışsın ve onu github'a commitlemişsin. Pek doğru bir yöntem gibi görünmedi bana.

    -> Proje, Class, Method, değişken... isimlendirmelerine daha fazla zaman ayır, isimlendirme çok önemli.

    -> Kodda standardın yok gibi. Daha düzgün görünen kod yazmalısın. Linter kullan mesela. IDE'lerin neredeyse tamamında kod formatlayan araçlar var:

    -> Java tarafında şu şekilde notasyon kullanma, git C# yazarken kullan ama Java'da kullanma :)

    static String _URL;
        static String _SecretKey;
    
        public static String get_SecretKey() {
            return _SecretKey;
        }
    
        public static void set_SecretKey(String _SecretKey) {
            Options._SecretKey = _SecretKey;
        }
    
        public static String get_IVKey() {
            return _IVKey;
        }

     

    -> Java'da package isimleri küçük harflerle yazılır, sendeki geleneğin dışında olmuş: 

    package com.example.mhmdalmz.SecureTheApi.Security;

    -> APK dosyasını da commitlemişsin. .gitignore dosyasını daha efektif kullanmalısın.

    -> Madem ki unit test yok, isimlendirmeler düzgün değil, comment de yok, bari JavaDoc yaz.

    -> Hardcoded String kullanmaktan kaçın:

    Toast.makeText(getApplicationContext(), "Please Check UserName or Password", Toast.LENGTH_SHORT).show();

    ->Bir de kullandığın dilin (Türkçe / İngilizce) yazıım kurallarına uymaya çalış.


    Sen hiç kaval çaldın mı?
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    dhmm
    dhmm's avatar
    Kayıt Tarihi: 15/Eylül/2011
    Erkek

    @MhmdAlmz kardesim. PHP-PSR a bir goz at. 

    http://www.php-fig.org/psr/

    Burada PHP icin bir nevi standartlar vardir. Autoload ve v.s. buradan bakarak uygulayabilirsin.

    Autoloader kullanirsan dependency manager ile istedigin package'i ekleyebilirsin projelerine.

    Ayrica namespace kullan PHP de. Daha duzenli klasor hiyerarsin olur.

     


    Ozgurluk aslinda her istedigini yapabilmek degildir, istemedigini yapmamaktir. // Verdigin degeri gormeyince, gordugun degeri ver !!! // Hayatin herkes icin bir bavulu vardir !!! // Dusmek gerekir bazen hayatta; kalkmayi ogrenebilmek icin
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MhmdAlmz
    MhmdAlmz's avatar
    Kayıt Tarihi: 09/Ağustos/2015
    Erkek

    @YeniHarman , 

    FİKİR : Sınıf ismiyle dosya ismi aynı olsun ki autoloader kullanabilesin.

    AutoLoader nedir bilmiyorum.

    FİKİR : Klasör hiyerarşisini oluştur.

    Klasör hiyerarşisini php de genelde kendim elle veriyorum örneğin stok lar ile ilgili işlem yapacaksam

    ajax/StokAjax/StokEkle.php şeklinde devam eden bir hiyerarşi yaparım genellikle. 

    FİKİR : Autoloader kullan.

    Autoloader nedir bilmiyorum. 

    FİKİR : Design patternleri kullan.

    Design patternde genellikler AhmetTopuTut şeklindedir static olan değişkenlerime _ koyarım Interface de varsa I ile başlarım başka bir özelliği yok . Yani uzun zamandır yazdığım kod stilim bu şekildedir. Kendi Stillerinize örnek verir misn abi ?

    FİKİR : Sınıf dışında fonksiyonun olmasın. Hangi sınıf kullanıyorsa onun elemanı olsun ya da genel bir kullanımı varsa ilgili sınıfın ya da util sınıfının statik elemanı olsun.

    Örnek bi kod alabilir miyim anlamadım :(

    FİKİR : MB stringlerle düzgün çalışıyor mu? PHP ile ne zaman mb string uğraşsam sıkıntı yaşadım.

    Abi sadece rusçanınkini denedim sanırım o da çalışıyordu fakat küçük birşey denedim  Спасибо ,  Добрый день.  bunlar calısıyordu bir test ederim abi.

    FİKİR : Sistemin benim sunucumda çalışıp çalışmayacağını denetleyen bir test yazsan iyi olur (şu eksik, şu php konfigurasyonunda kapalı...).

     Bunun için Maven'in nasıl yapıldığını android'e projeyi nasıl compile ettirebleceğimi pek bilmiyorum github kullanmayı da yeni yeni öğreniyorum.

    FİKİR : Proje adı, yaptığı iş ile uyumlu değil. RestAPI'yi görünce bayağı bi uyarlama sandım ben. Seninki sadece şifreleme yapan bir proksi. Ona göre isim versen çok daha güzel olurdu.

     Geliştireceğim abi projede bir takım eksiklikler var benim de gördüğüm onları da zamanla güncelleyeceğim. Uyarlamadan kastın nedir abi biraz aydınlatır mısın :) (Ekleme çıkarma olarak)

     Çok teşekkür ederim .

    @JPriest , 

    -> Githup link yazmışsın, github olarak değiştirmelisin.

     Sorarlar likteki p yi hiç mi görmedin be adam diye :)

    -> Secret Key'i kod içine hardcoded yazmışsın ve onu github'a commitlemişsin. Pek doğru bir yöntem gibi görünmedi bana.

     Secret Key'i başka bir şekilde saklayamam ki abi ? Sanırım XML De saklı lan SecretKey den bahsediyorsun. Yada keylerin public olarak dışarıya erişime açık olması yani bunu kullanacak kişinin key'i değiştirmesi veya okuyabilmesinden bahsediyorsun tam anlamadım.

    -> Proje, Class, Method, değişken... isimlendirmelerine daha fazla zaman ayır, isimlendirme çok önemli.

     Genelde Türkçe yazdığımdan mecburen alıştım türkçe yazmaya çok fazla ingilizce kelime de bilmiyorum. Isimlendirmelerim de bu yüzden kötü olabilir. Şayet still den bahsediyorsan buna alıştığım için böyle yazmaya devam ediyorum . Kendi kod stilini atarsan inceleyebilirim ve çok sevinirim :)

    ->Kodda standardın yok gibi. Daha düzgün görünen kod yazmalısın. Linter kullan mesela. IDE'lerin neredeyse tamamında kod formatlayan araçlar var:

     Design Patternlere göz atacağım gibi görünüyor :) Bunu YeniHarman, JPriest ve dhmm söylüyorsa vardır bi bildikleri :)

    -> Java tarafında şu şekilde notasyon kullanma, git C# yazarken kullan ama Java'da kullanma :)

    :((( Dikkat edeceğim abi peki nedeni nedir :) 

    -> Java'da package isimleri küçük harflerle yazılır, sendeki geleneğin dışında olmuş: 

    Bilmiyordum

    -> APK dosyasını da commitlemişsin. .gitignore dosyasını daha efektif kullanmalısın.

    Direk Allah ne verdiyse upload ettim Android studio hata verdiğinden tüm proje dosyalarını github içerisine attım Github desktop ile. Github da yeniyim bilmiyorum

    -> Madem ki unit test yok, isimlendirmeler düzgün değil, comment de yok, bari JavaDoc yaz.

    JavaDoc hiç aklıma gelmemişti :) Unit test ve bir çalışan android uygulaması ekleyeceğim çalışır bir sisteme entegre edip. 

    -> Hardcoded String kullanmaktan kaçın:

    Projelerimin hepsinde XML dosyasındadır isimler vs. Yarın öbürgün türkçeleştirilirse veya japonlar kullanmak isterse dili rahatlıkla değiştirebilmek için. Bunda gerek duymadım sadece

    ->Bir de kullandığın dilin (Türkçe / İngilizce) yazıım kurallarına uymaya çalış.

    UserName Benim değişken ismim hangi kafayla yazdıysam hiç dikkatimi çekmedi :) teşekkür ederim abi sanada herşey için.

     

    @dhmm, 

     her dilin kendine has standartları mevcut sanırırm . Yazım şekli bakımından. Ek olarak özelden birkaç soru soracağım sana :)

     

     

     

     

    MhmdAlmz tarafından 24/Haz/17 18:09 tarihinde düzenlenmiştir

    Andolsun kuşluk vaktine ve dindiği zaman o geceye ki, Rabbin sana veda etmedi ve darılmadı! Ve kesinlikle senin için sonu önünden (ahiret dünyadan) daha hayırlıdır. ileride Rabbin sana verecek de hoşnut olacaksın! O, seni bir yetim iken barındırmadı mı? Seni, yol bilmez iken (doğru) yola koymadı mı? Seni bir yoksul iken zengin etmedi mi? Öyle ise, sakın yetime kahretme (onu horlama)! El açıp isteyeni de azarlama! Fakat Rabbinin nimetini anlat da anlat!
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    nickalti
    Lightsaber
    Lightsaber's avatar
    Kayıt Tarihi: 29/Ağustos/2012
    Erkek
    MhmdAlmz bunu yazdı

     

    FİKİR : Design patternleri kullan.

    Design patternde genellikler AhmetTopuTut şeklindedir static olan değişkenlerime _ koyarım Interface de varsa I ile başlarım başka bir özelliği yok . Yani uzun zamandır yazdığım kod stilim bu şekildedir. Kendi Stillerinize örnek verir misn abi ?

     

     

    yok design pattern o değil, kod stilin değil. programlamada bazı sık karşılaşılan senaryolar için geliştirilmiş yaygın ve genelleşmiş çözüm teknikleridir design patternler. repository pattern, singleton patter vs gibi tonla örneği var.

    bir de anti-patternler vardır, bunlar da yine bazı senaryolar için ibret olabilecek kötü pratiklerdir.


    İnsan; insan olsaydı,insan olmazdı..
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    TeRRoR
    TeRRoR's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Erkek

    Bence onerileri pull requestle yapalim 😀 


    herkes programcı olmak zorunda değildir, lütfen bir zorunluluk gibi programlama dilleri öğrenmeye çalışmayın. yabancı dil filan öğrenin amq.// s.kimin etini yerim, kasaba minnet etmem.// ince düşünene kalın girer.//
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MhmdAlmz
    MhmdAlmz's avatar
    Kayıt Tarihi: 09/Ağustos/2015
    Erkek

    @Lightsaber , hocam baktım da sanırım UML ve USE CASE diagramı kapsayan birşey bu . Kodun işlevini falan açıklamak için sanırım bunları da belirli standartlara uydurmuşlar . Doğru mu ?

    repository pattern, singleton patter de araştırayım

    @TeRRoR olabilir hocam :)

     

    MhmdAlmz tarafından 24/Haz/17 21:38 tarihinde düzenlenmiştir

    Andolsun kuşluk vaktine ve dindiği zaman o geceye ki, Rabbin sana veda etmedi ve darılmadı! Ve kesinlikle senin için sonu önünden (ahiret dünyadan) daha hayırlıdır. ileride Rabbin sana verecek de hoşnut olacaksın! O, seni bir yetim iken barındırmadı mı? Seni, yol bilmez iken (doğru) yola koymadı mı? Seni bir yoksul iken zengin etmedi mi? Öyle ise, sakın yetime kahretme (onu horlama)! El açıp isteyeni de azarlama! Fakat Rabbinin nimetini anlat da anlat!
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YeniHarman
    YeniHarman's avatar
    Kayıt Tarihi: 17/Haziran/2012
    Erkek

    Kesin doğru ya da kesin yanlış kod olmadığı için bilindik design patternin kullanıp kullanılmaması gereği tartışılabilir fakat şöyle bir şey düşün:

    Kodunda şifreleme yapan sınıfın sadece bir kopyasını kullanman lazım (her seferinde secret key ile ilklendirmemen için). Yani o sınıfın her zaman bir tane örneğinin yaşadığından emin olmalısın. O zaman singleton pattern'i kullanabilirsin. Singleton patternin gerekliliği konusundaki tartışmayı geçiyorum (madem bir tane lazımsa, sadece bir tane create et gibi). 

    Kodun doğru çalışması için Secret key'inin 50 karakter uzunluğunda olmasının zorunlu olduğunu düşünelim. Yani kurucu metod 50 karakter uzunluğunda bir katar almalı. 

    function __construct($SecretKey)

    {

       if (count($SecretKey) != 50)

       { ... // eee burada ne olacak?

    ...

    O zaman şu çıkıyor? Exception mı fırlatmalıyım? Olabilir fakat benim ilk tercihim olmaz. Neden bilmiyorum. Belki C kökenli olduğumdan belki de exceptionların C++'ta sıkıntılı olduğunu bildiğimden. Exception handling bana göre değil:) Çok daha kolay olduğunu düşündüğüm yöntemler var.

    Ayrı bir init() metodu mu yazmalıyım? Olabilir fakat benim yine tercih edeceğim bir şey değil. Neden ikinci bir metot çağrısına ihtiyaç duyuyorum ki? C++ ile kod yazsam tercihim bu olurdu ama.

    Üçüncü şık olarak ben bunu bir statik sınıf metodu ile üretsem ve sınıfın kurucu fonksiyonuna her zaman gereken değerleri yollasam? Bence uygun bir çözüm. Oldu mu sana factory pattern.

    Yine koduma dönüyorum. Bana işimi yapabilmem için rastgele sayılar gerekiyor. Rastgele sayı üreten birden fazla sınıf var fakat bunların bazıları PHP X sürümünde yok. Ben Y sınıfını direkt kodumda kullansam bu sefer X+1 sürümüne tek bir iş için gebe kalacağım. Bunun yerine A, B, C sınıflarını aynı interface'i (arayüzü) uyarlayacak şekilde genelleştiririm ve bu arayüzü sınıfımın kurucusuna parametre olarak alırım. Artık sınıfımın değişkenleri arasında o arayüzün referansı dışında bir şey tutmama da gerek kalmaz. Bu da etti mi sana dependecy injection. 

    Daha adını bilmediğim ama kullanmış olduğum (tamamen öylesine) patternler de var. Mesela Facade. Hatta mvc kodlar yazıp (öyle mvc fw deki gibi değil tabi ama yakın) sonradan mvcnin ne olduğunu öğrenmişliğim var.

    %100 gerekli mi? Bence hayır. Kullanmalı mıyım? Kullansam iyi olur. Tabi iyi öğrendikten ve gerçekten işimi kolaylaştıracağına inandıktan sonra. Yoksa acele işe anti-patternler karışır. En basitinden hebele hübele yazdığım bir kodda gayet rahat god object (haşa, bu ismi kullanmayı sevmiyorum fakat araştırma yapılabilir diye verdim) oluşabiliyor. Bu en basit tanımıyla birden fazla işi yapan bir nesne oluşturmak anlamına geliyor. Bir fonksiyon birden fazla işi yapmaması gerektiği gibi bir nesne de mantıksal olarak birden fazla görevi gerçekleştirmemeli. Örneğin senin sınıf hem http requesti alıp hem işleyip hem de ekrana bastırmamalı.

     

    Sözün özü, yukarıdaki işlemler çoğu zaman 100 satırda yapabileceğin işi 300-400 satıra da çıkarabilir. Mantık çerçevesinde buna karar vermen lazım. En önemlisi de koduna dökümantasyon ve açıklama yazmadığın zaman kodunu kullanacak yazılımcıdan sağlam küfürler yiyebileceğindir. Yani dökümantasyonsuz kod, en güzel kod olsun, bir işe yaramaz.


    Olaylara karışmayın!
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MhmdAlmz
    MhmdAlmz's avatar
    Kayıt Tarihi: 09/Ağustos/2015
    Erkek

    @YeniHarman , Açıklamalar için öncelikle çok teşekkür ediyorum zaten teşekkür ede ede bi hal olduk orası ayrı.

    Söylediklerini Yazdım hafızamın en sağlam yerlerine. Bir sonraki projelerimi dediğin gibi yapmaya çalışacağım. Fakat PHP de daha hiç bir framework kullanmadım (codeigniter,laravel vs) Php de genelde REST API Yazıp yani gelen parametreye uygun sonuçlar üretmekdi benim işim o yüzden 10-15 yıl önceki PHP koduymuş gibi gözüküyor evet haklısın.

    Patternler konusunda genel bir araştırma yaptım Şuradaki amcalar çok iyi anlatıyor olayı ki gayet mantıklı. 

    Bir bakıma haklısın , dışarıdan bu yazacağm bir kodu kullanacak bir yazılımcı kodun ne işe yaradığını veya kendi algoritmasını ilave edip edemeyeceğini belirlemesi için patternlere ihtiyaç var. Yani Kodun okunabilirliğinin arttırılmasına ve esnekliğinin arttırılmasına.

    https://www.youtube.com/watch?v=vNHpsC5ng_E&list=PLF206E906175C7E07

    Video burdadır burada bir çok pattern anlatılıyor sanırım 2-3 video izledim dedim bu ne :) Malesef Türkiyede Üniversitelerde Code Monkey yetişiyor biz her ne kadar YOOOO desek de :D Ya bizde sıkıntı var yada Akademik .

     

    Çok çok çok çok teşekkür ederim. 


    Andolsun kuşluk vaktine ve dindiği zaman o geceye ki, Rabbin sana veda etmedi ve darılmadı! Ve kesinlikle senin için sonu önünden (ahiret dünyadan) daha hayırlıdır. ileride Rabbin sana verecek de hoşnut olacaksın! O, seni bir yetim iken barındırmadı mı? Seni, yol bilmez iken (doğru) yola koymadı mı? Seni bir yoksul iken zengin etmedi mi? Öyle ise, sakın yetime kahretme (onu horlama)! El açıp isteyeni de azarlama! Fakat Rabbinin nimetini anlat da anlat!
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YeniHarman
    YeniHarman's avatar
    Kayıt Tarihi: 17/Haziran/2012
    Erkek

    Videodan bir şey öğrenme işine pek alışamadım. Aykut Taşdelen'in Android programlama kitabını aldım ve beğendim. Yazar c ve sistem programcıları derneği bünyesinde zaten. Aynı yazarın tasarım desenleri ve uml kitabını almayı düşünüyorum.


    Olaylara karışmayın!
Toplam Hit: 2415 Toplam Mesaj: 13
şifreleme github