Imac için mfpdev-cli kurulum hatası

Merhabalar,
Mobilefirst 8.0 ı CLI sını kurmak için npm ile boğuşup durdum ama aşağıdaki hatayı bir türlü geçememiştim.

Sonunda https://npm.taobao.org/package/mfpdev-cli cnpm modulu sayesinde

diyerek tek seferde kurmayı başardım. Umarım birilerine faydası olur.
Saygılarımla,

WordPress-woocommerce performans sıkıntısı

Merhabalar,

En popüler içerik yönetim sistemlerinden olan wordpress ve bunun üzerine geliştirilmiş woocommerce ‘ün performansı hakkında bir şeyler yazmak istedim. Öncelikle wordpress çok amaçlı kullanımı amaçladığı için veritabanında bazı kısımlarda fedakarlık yapılması gerekmiş. Örneğin herhangi bir postun (woocommerce ile ürünün) her bir özelliği için postmeta ya bir kayıt açılıyor. Normalde projenizde 2-3 bin ürün varsa ve her bir ürünün 50 özelliğini kaydediyorsanız.100.000 row sıkıntı olmuyor. Ama sitenize 500.000 ürün eklediğiniz zaman postmeta tablonuz birden 25 milyon rowa çıkmakta buda ciddi problemlere ve yavaşlamalara neden olmakta.

Sorun performance ve yavaşlıksa ve ne yapabilirim diyorsanız adım adım atlatmaya çalışacağım.

  • Öncelikle cachlemeyle başlayalım, bu kısımı hallettiğinizde bir çok sorun düzelecektir.
    • Benim tercihim memcache kullanmaktan yana. Öncelikle sunucunuza memcache kurup test edin.
    • Memcache wordpresse entegre etmek içinse w3-total-cache eklentisini kurmanızı öneririm. Daha sonra database istekleriniz, sayfalarınız vesaire ilk kez request edildiklerinde oluşacak daha sonra ki isteklerde direk memoryden getirileceklerdir.
  • Veritabanı bakımı. 
    • ACF eklentisi kullanıyorsanız ve ürünün her türlü detayını tutayım sonra lazım oldukça kullanrıım diyorsanız (Benim gibi 🙂 ) yanlış yapıyorsunuz. 500.000 ürün örneğinde her ürünün tek bir özelliği 500.000 potmeta rowu demek. Kullanmadığınız ne varsa silin hatta kullandıklarınızıda minimize edin :). Verileri illa tutacaksanız başka bir tabloda tutup custom querylerle çekin wordpress ürünler için her haltı burada tuttuğunda açılışınız ölümcül yavaşlayabilir.
  • Yavaş sorguları bulmak ve sorunu çözmek.
    • Diğer bir adım slow_query loglamasını açıp hangi sorgu uzun sürüyor bulmanız gerekmekte. Kilit noktalardan birisi bu bence. phpmyadmin ile /phpmyadmin/server_status_advisor.php linkindeki tavsiyelere uymaya çalışın.
    • Slow query tablosundan buldunuz query diyelim. Aklınıza ilk gelen ben bunu nasıl hızlandırabilirim olacaktır doğal olarak. Oldukça kafa patlatmış biri olarak söylüyorum ki bu fikri aklınızda tutun ama vakit harcamayın 🙂 önce doğru soru şu bu query kim kullanıyor, kullanını kaldırırsam sorun düzelir mi ? 😀 Cevap evetse sorun düzeldi.
    • Gelelim benim gibi nasıl hızlandırırım, çağrılıyorsa kullanılıyordur derseniz. Öncelikle sorgunuzun başına Explain ekleyip bir bakın bakalım hangi indexleri kullanıyor. Eğer indexler yetersizse index yaratıp tekrar deneyin. Özellikle join, order, group..içeren sorgular büyük tablolarda sıkıntılara neden olmakta  bunun için şu linklere bir göz atın derim. Ama işin içinden çıkamama durumunuz yüksek bir üst madde iyidir bence 😉 .
      http://dev.mysql.com/doc/refman/5.7/en/order-by-optimization.html
    • Son olarak wordpressden bağımsız https://rpm.newrelic.com kurtarıcım oldu diyebilirim 14 günlük triali var ki günü kurtardı benim için. Kurulumu enterasan biraz server scriptlerle kurup yetki veriyorsunuz 🙂 Ne çalışıyorsa bakıp raporluyor yavaş çalışan sorgudan bu sorguyu kimin çağırdığına kadar giden bir trace veriyor. Opensource filan olsa harika olacakmış ama yine de vereceğiniz paraya değer bence.
  • Son olarak sunucu yu izlemek
    • Memcache, newrelic, ayarlar vesaire tamam diyelim ki hala sıkıntılı durumlar. Bunun için htop gibi araçla sunucuda ne olup bitiyor bakmak gerek. Sunucunuzun rami, cpusu ve diskinin herhangi birinde yetersizlik varsa diğerlerini de kilitler. Örneğin memory az kaldıysa io işlemleri ve gc işlemleri çoğalacağı için CPU da tavan yapar ve sistem yanıt vermekte zorlanır.
    • Sunucu olarak Digitial ocean ya da Amazon gibi cloudbase sistemleri tercih etmenizi öneririm. İhtiyacınıza göre CPU ve ya Ram alıp işleminiz bitince normal kullanımla daha uygun bütçeli kaynaklara dönebilmeniz harika.

 

Saygı ve sevgilerimle,

Yusuf.

Url get parameter encoding sorunu

Merhabalar,

Bir uygulamamızda urlencode olarak url parametresiyle gönderdiğimiz bir değişkende Tomcatte herhangi bir sorun yaşamazken uygulamayı websphere üzerinde çalıştırdığımızda türkçe karekterlerde encoding problemi yaşamaya başladık. Bu sorunun çözümü için daha  aşağıdaki şekilde parametre çağrılmadan önce encodingin set edilmesi gerekmektedir.

JAXB – XML den JAVA Objesi – XSD doğrulaması

Merhabalar,

Verilen XML i Java Nesnesine çevirme ve bunu yaparken de nasıl bir doğrulama (validation) uygulayabiliriz diyorsanız JAXB sanırım ihtiyacınızı karşılayacaktır.

Öncelikle koda başlamadan önce http://www.utilities-online.info/xsdvalidation/?save=44686844-29f6-4cda-ac58-1d94cf96354f-xsdvalidation linkdeki siteden XML inizi ve doğrulama için kullanacağınız XSD linizi test etmenizi öneririm. Örnekde RECEIPT xml lini doğrulayacak XSD li kabaca oluşturdum. XSD için eclipse in designer ından yararlanabilirsiniz.

Örnek olması açısından XMLi, XSDli, Java Nesnemi ve kullandığım kod parçacığını aşağıda bulabilirsiniz.

Saygı ve sevgilerimle.

Örnek Kod Parçacığım

Örnek XML

Örnek XSD

Örnek JAVA nesnem (Entity)

Apache CXF Validation

Eğer web service kütüphanesi olarak CXF i ve wsdl2Java yaklaşımını kullanıyorsanız, wsdl da belirttiğiniz restrictionların çalışması için web.xml içinde belirttiğiniz contextConfigLocation a gidip (WEB-INF/cxf-beans.xml  gibi )  aşağıdaki satırı eklemeniz gerekmektedir.

<jaxws:properties>
          <entry key=”schema-validation-enabled” value=”true” />
</jaxws:properties>

Bende ki cxf-beans.xml aşağıdadır;

Cannot change version of project facet dynamic web module to 3.0

Bu şekilde “hata” verirse eclipse, çözüm için deneyebilirsiniz. (daha çok eclipse bugı sanki)

Projenize sağa tıklayıp proporties e giriniz.
Daha sonra Project Facets kısmına gelip Dynamic Web Module kısmının checkini kaldırıp apply demeniz gerekiyor.
Dynamic Web Modulün tikini kaldırdıktan sonra istediğiniz versyona çekip apply dediğinizde ve projenizi clean ettiğinizde sorun ortadan kalkacaktır.
  

Tomcat 8, Jdbc ve java.lang.ClassNotFoundException

Merhaba arkadaşlar,

Tomcat 8 üzerinde çalışacak ve mssql den veri çekecek bir web servis yazmaya çalışırken karşılaştığım bir durumu paylaşmak istedim.

Driver olarak kullandığım jtds-1.2.5.jar ı build path e eklememe rağmen web servis le methodu çağırdığımda “java.lang.ClassNotFoundException: net.sourceforge.jtds.jdbc.Driver” hatası alıyordum. Oysa test için yazdığım java uygulaması olarak çalıştırdığım kod db ye bağlanıp verileri çekmekteydi. Biraz zaman harcayınca tesadüfen bulduğum bir yöntem sorunumu çözmüş bulunmakta. Çözüm ise; tomcat i bulunduğu klasördeki lib folderının altına jtds-1.2.5.jarı atmaktan geçti.

Bu durum için daha farklı çözümü olanlar varsa ve paylaşırsa sevinirim.

Sevgi ve saygılarımla,
Yusuf Ziya Başbuğ.

Apache Mina ve MultiThread işleyişi

Minanın 2.0 ve üstü sürümlerinde bu işi mina bizim için çözmüş bize ise sadece configurasyon işlerini bırakmış gibi gözüküyor. Mina ile yazılmış bir uygulamanın thread yönetimini

ExecuteFilter ekleyerek yapabiliyoruz. Executers filtresine önceden tanımlı default thread yönetimlerinden birini seçerek ya da özel ihtiyaçlarımıza göre kendimiz yazarak belirleyebiliriz. Benim kullanmayı tercih ettiğim method ihtiyaç oldukça thread pooldan thread alarak işlemi yapıyor eğer poolda yeterli thread yoksa yeni thread yaratıp bunları belirli bir süre havuzda (Thread pool) tutuyor. 60 sn kullanılmayan threadler ise kapatılıyor. Idle time ı , maksimum thread sayısını set edebilmek mümkün.

Bu aşamadan sonra gelen her bağlantıyı bir thread işleyecektir.

diyerek minaya gelen connectiionları nasıl handle etmesi gerektiğini yazmak kalıyor.

ConnectionHandler ise mina nın IoHandlerAdapter classını extend eden bir class.

Bu şekilde ki bir sistemle aynı anda binlerce connectiona yanıt verebiliriz. Non-block bir sistem olmasına rağmen Mina frameworku thread yönetimini kendi çözerek olayı oldukça basitleştirmiş gibi gözüküyor.

Bir diğer konu da bu uygulamaya gelen isteklerin sayısı çok fazla olacağı için tek serverın bu iş için yetersiz kalması bu durumda da devreye Load Balancerlar giriyor. Daha önce web serverların yönetiminde kullandığım ve anlık 20 bin bağlantıda sorun yaşatmaya HaProxy i kullanmayı düşünüyorum ama http de kendini ıspatlamış bu sistemi TCP de ilk defa test etmiş olacağım. Bununla da alakalı bir şeyler yazmaya çalışırım.

Yine de hem mina da hem de multithread sistemlerde çok tecrübem olmamasından dolayı bu yazı oldukça fazla revizyona uğrayacak gibi gözükmekte. Ve her türlü yoruma açık bırakıyorum.

Sevgi ve saygılarımla,
Yzbasbug.