Django ile veritabanları arasında veri aktarma (sqlite to mysql migration)

Django ile başladığım projede veritabanını değiştirme aşamasına geldiğim zaman sqlite veritabanına bir çok veri girildiğini ve bunlarında aktarılması gerektiğini fark ettim. İnternette bir çok uygulama ile bu yapılabilir. Fakat ben bunu django ile yapmayı tercih ettim.

Sqlite veritabanından mysql veritabanına çevirme sürecinde ki deneyimlerimi adım adım aktarmak istiyorum.

İlk olarak sqlite veritabanı yapımızı mysqle aktarmak lazım. Bu süreçten önce ben yeni tablo ve sütun açma işlemlerinde django migrate işlemini kullanmıştım. Ondan dolayı kolay oldu.

Django ile mysql bağlantısı için pymysql kütüphanesini kullandım.

pip3 install pymysql 

komutu ile yükledim sonrasında settings.py içerisi

import pymysql
pymysql.install_as_MySQLdb()

satırını ekleyerek bağlantı için ilk aşamayı tamamladık. Bu arada pymysql kütüphanesi python ile yazıldığından dolayı biraz daha yavaş çalışıyor fakat MacOsX’te diğer kütüphanelerin derlenmesi sorunlu olduğundan bunu tercih ettim.

DATABASES = {
    'old': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    },

    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'localhost',
        'USER': 'root',
        'PASSWORD': '',
        'HOST': 'localhost',  # Or an IP Address that your DB is hosted on
        'PORT': '3306'
    }
}

databases parametresini üstte ki gibi yaptım. Komut satırından

python3 manage.py migrate

otomatik olarak mysql veritabanını düzenledi.

Mysql veritabanına kayıtlar atılmadan önce veritabanında ki foreign key’leri silmemiz lazım. Bunun nedeni sqlite veritabanında ki verilerin aktarılması sırasında hata oluşacağı için.

SELECT CONCAT(‘ALTER TABLE ‘, TABLE_NAME, ‘ DROP FOREIGN KEY ‘, CONSTRAINT_NAME, ‘;’)
FROM information_schema.key_column_usage
WHERE CONSTRAINT_SCHEMA = ‘DB’
AND TABLE_NAME IN (‘GEREKLI_OLAN_TABLOLAR’)
AND REFERENCED_TABLE_NAME IS NOT NULL;

komutu sonucunda oluşan satırları çalıştırınca bütün foreign key’ler silinecektir.

Şu ana kadar ki bütün aşamalar mutfakta ki hazırlık aşamasıydı. Son aşama olarak verileri aktarma kaldı.

def export(table_name):
    if table_name is not None:
        datas = table_name.objects.using('old').all()
        for item in datas:
            item.save(using="default")
export(CustomerEntity)
export(ExceptionEntity)
export(ProductEntity)
export(ProductTagEntity)
export(UserEntity)

komutlarını django projesinin içerisinde çalıştırdığınızda sqlite verilerinizi mysql’e aktaracaktır.

Üst kısımda anlatmış olduğum aşamayı diğer veritabanları arasında aktarımda da kullanabilirsiniz. Benim sorunumda aktarım sqlite ile mysql arasında olacağından ona göre anlattım.

Umarım faydalı olmuştur.

Devamını Oku

C++ ile loadmodule 126 hatası

Üzerinde çalıştığım projeyi farklı bilgisayarda kullanmak istediğimizde dll yüklenemiyor hatası ile karşılaştık. Hatayı anlamak ve bağımlılıkları tespit edip sorunu çözmek gerçekten de zamanımızı aldı. Kısaca izlediğimiz yolu anlatayım.

dependencywalker.com sitesinden uygulamayı indirip kurulumunu yaptık. Sonrasında hata ile karşılaştığımız dll dosyasını program ile açtığımız zaman bağımlılık olan dll listesini görüntüleyebiliyoruz.

Bizim yaşadığımız sorunda VCRUNTIME140 ile MSVCP dll dosyalarının eksik olmasından dolayıydı ve onları dll’in yanına kopyaladığımız zaman hatayı giderdik.

Bu tarz hatalar için bu uygulama oldukça kullanışlı ve hızlı çözüm üretmeye yardımcı oluyor.

Devamını Oku

Yeni işim ve Opencascade Kurulumu

Daha önceden bir çok kere 3D ile ilgili çalışmalar yapmaya niyetlendim ama bir türlü sonuna kadar ilerleme şansım olmamıştı. Bazen yeterli zamanı ayıramadım bazende hevesim kaçtı. Ama yeni başladığım iş tam olarak bu konuda olunca öğrenmekte zorunluluk haline geldi. Adeko’da üç boyutlu mutfak tasarım ile ilgili projede çalışmaya başladım. Önceden çalıştığım işlerden ve yaptığım projelerden daha farklı ve eğlenceli. Kendine göre zorlukları ve kolaylıkları tabikide var. Şirket sahibi Süha Aktan her konuda oldukça anlayışlı ve bilgili, sıkıştığınız yada yardıma ihtiyaç duyduğunuz her an gelip yardımcı oluyor, bilgisini sınırsızca paylaşıyor. Bu konuda ki bilgisi ve tecrübesi gerçektende muazzam denilebilir.

Şu anda üzerinde çalıştığım proje katı modelleme(solid modelling) konusunda farklı bir firma ile çalışmakta ve bunu sadece belli bir oranda kullanmaktaydı. Proje üzerinde birkaç düzenleme yaptığım sırada katı modelleme konusunda ihtiyaçlar ortaya çıktı ve bu doğrultuda çözüm arayışları içerisine girdik.

Araştırmalar sonucunda işimize geometros ve opencascade ürünlerinin çözün olacaığını konusunda hem fikir olduk ve bu iki ürün arasında seçim yapmamız gerekti. Her iki ürünü test ettiğim hangisinin ileriye yönelik olarak işimize yarayacağını ortaklaşa bir karar aldık ve yolumuza Opencascade ile devam ettik.

Opencascade öncelikle açık kaynak kodlu ve bir çok soruna çözümler sunan büyük ve kullanışlı bir kütüphane. İçerisinde ihtiyacınız olacak herşey mevcut. Katı modelleme ile yapmanız gereken herşey önceden düşünülmüş ve eklenmiş. Tabi benim önceden katı modelleme konusunda bir tecrübem olmamasından dolayı yapıyı anlamak ve birşeyler yapmak biraz zaman aldığı doğru.

Öncelikle şunu belirteyim Opencascade ürününü normalde Windows üzerinde  kullanıyoruz fakat ben kişisel olarak Mac kullanmayı tercih ettiğimden dolayı kurulumu Mac Os X’e göre anlatıyorum.

Ürünü http://www.opencascade.com/content/latest-release adresinden son sürümünü indirebilirsiniz. Bu dökümanı yazarken son versiyon 6.9.1.

Kurulunu WOK ile de yapabilirsiniz ama ben onu kullanmadım.

Kodlarımızı kendimiz derleyeceğiz ve bunun için iki farklı yol var. İlk yolu kullanmanızı önermiyorum, çünkü hem daha zahmetli hemde sorun çıkma riski daha yüksek ama genede nasıl olduğunu anlatmakta fayda var.

1. Yol

Dosyaları açtığımız klasörün içerisinde xcode.sh dosyası var. Komut satırından

./xcode.sh

komutunu çalıştırıp projemizin xcode iel çalışmasını sağlıyoruz. İlk olarak FoundationClasses içerisinde TKernel derlemeyi deniyoruz. Muhtemelen
ld: library not found for -ltbb
hatasını alacaksınız. Bu kısımda işler biraz zor. Her projeye için tek tek girip düzenleme yapmak zorundayız. Projeyi seçip Build Phases altında Link Binary With Libraries kısmında bulunan libtbb.dylib ve libtbbmalloc.dylib silip hemen alt kısmında ki artı tuşuna tıklayın ve gelen ekranda libdl.tbd seçin. Bu işlemi bütün projeler için tekrarlayın. Biraz zaman alıyor ama işe yarıyor. Bütün projeleri derlemek için sol üst kısımdan DRAWEXE yi seçip derlediğiniz zaman bütün projeler derlenmiş olacaktır. Eğer bu kısımda sorun ile karşılaşırsanız bana ulaşabilirsiniz. Şu ana kadar anlattıklarım tam olarak çalışmaya bilir. Ondan dolayı uzun yol ile çalıştırmayı denemenizi tavsiye ediyorum.

2.Yol
Uzun yoldan kurulum için bilgisayarınıza CMAKE kurmanı gerekiyor. https://cmake.org adresinden onuda indirebilirsiniz.

Cmake kurulduktan ve opencascade bir klasöre açıldıktan sonra cmake uygulamasını açıyoruz. Açılan klasörün içerisine cmake adında bir klasör oluşturdum. Cmake uygulaması üzerinde ki dizin bilgisini aşağıda ki gibi ayarladım.

Where is the source code : /Users/erhanbaris/Downloads/opencascade-6.9.1
Where to build the binaries : /Users/erhanbaris/Downloads/opencascade-6.9.1/cmake

Sol alt kısımda ki configure butonuna tıklıyoruz ve done butonuna basıyoruz. Alt kısımda bir kaçtane hata almış olmanız gerekiyor. TCL, TK ve FREETYPE yok diyecektir. Internetten freetype indirip kuruyoruz. Ben kaynak ile kurulumu yaptım. TCL ve TK ile işimiz yok. Onlar deneme yapmak için kullanılıyor. Onları kaldırmak için BUILD_draw seçimini kaldırıyoruz. Sonra INSTALL_DIR dizini seçiyoruz. Buraya derlenmiş olan dosyalarımız konulacak. Generate tuşuna basında hata almadan dosya oluşturma işlemini tamamlıyoruz. Önceden oluşturduğumuz CMAKE klasörünün içerisinde OCCT.xcodeproj isminde ki dosyayı açıyoruz ve Xcode ALL_BUILD seçeneğinde projeyi derliyoruz.

Bilgisayarınızın özelliklerine göre bu işlemin süresi değişebilir fakat 10-15 dakika sürecektir. En azından benim Mac Book Pro’da o kadar sürüyor :)

Bütün bu işlemler bittiği zaman cmake klasörümüzün içerisinde out isminde klasörün içerisine derlenmiş olarak dylib dosyalarımız oluşmuş olacak.

Daha sonradan örnek bir çizim ve gösterimi konusunda da bir yazı yazmayı planlıyorum ama vaktim olur mu bilmiyorum.

Umarım faydalı olmuştur.

Devamını Oku

Django, AngularJS, Ajax

Bir fikir kapsamında Django Web Framework ile geliştirmeye yapmaya başladım. Daha önceden Python ile herhangibir geliştirme yapmadığımdan dolayı öncelikle Python öğrenmem ondan sonrada Django öğrenmem gerekti. Doğruyu söylemek gerekirse ilk başlarda oldukça itici geldi. Ama bir süre kullandıktan sonra hızlı ve kolay geliştirme ortamı ve içerisinde gelen özellikleri hoşuma gitti.

Konu web olunca benim için artık vazgeçilmez olan AngularJS kullanmak isteiğimde bazı sıkıntılar yaşamaya başladım. Öncelikli olarak binding kısımları çalışmıyordu. Ne yaptıysam çalışmadı. Kısa bir araştırma sonucunda html içerisinde veri gösteriminde kullandığım süslü parantezlerin template kısmında binding için kullanıldığını öğrendim. Angular kısmında bu tarz şeyler için bazı ayarlamalar yapılabiliyor.

Daha sonra verileri POST etme aşamasında csrf güvenlik hatası almaya başladım. csrf hatası için template ve AngularJS kısmında düzenlemeler yapmak zorunda kaldım. Tabi bunu decorator(attribute) ilede yapmak mümkün ama bunu yapmak güvenliği bir nebze bile olsa azaltacağından dolayı AngularJS tarafında çözüm bulmak istedim. Bu arada template kısmında {% csrf_token %} komutunu kullanmamız şart.

Son olarak Ajax ile gönderdiğim verileri okumakta sorun yaşadım. Sunucu tarafında gelen istediğin Ajax mı yoksa normal bir istek mi olduğunu request.is_ajax() ile sorguladığım zaman sürekli olarak False yanıtını aldım. Tabi bunun içinde AngularJS kısmında bir çözüm mevcut.

Sonuç olarak henüz projenin başındayım. İlerleyen süreçte daha ne gibi sürprizler ile karşılaşacağımı bilmiyorum ama ilginç olanları burada yazmaya niyetliyim. Bu arada AngularJS kısmında kullandığım düzenlemeler aşağıda mevcut. Umarım sizede bir faydası dokunur.

 

angular.module('ProejectApp', ['ngRoute', 'ngCookies']
.config(['$httpProvider', '$interpolateProvider', function ($httpProvider, $interpolateProvider) {

    /* template içerisinde bind işlemini yapmak için {$ BunuEkranaBas $} */
    $interpolateProvider.startSymbol('{$');
    $interpolateProvider.endSymbol('$}');

    
    /* csrf çerezi için gerekli olan kodumuz */
    $httpProvider.defaults.xsrfCookieName = 'csrftoken';
    $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
    
    /* Sunucu tarafında Ajax sorgunu tanımlamak ve veriyi okumak için kullandığım kod */
    $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
    $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
}])

Devamını Oku

Model Kimin Umurunda ki!

model_1MVC, MVP, MVVM olsun hangi tasarım şablonu olsun fark etmez en önemli elemanlarından birisi olan MODEL ne yazık ki ne yeteri kadar önem veriliyor nede bir sorun olduğu zaman çıkartabileceği sıkıntılar akıllara geliyor. View, Controller yada Presenter’e verilen önemin Model’e verilmemesi bazen hiç hoş olmayan hatalara sebep oluyor. Bu hatalar bazen bir sunum esnasında, denemeler yaparken yada en kötüsü son kullanının kullanımı esnasında oluyor. Geliştirme esnasında oluşan hatalar doğal olarak karşılanır, çünkü halen geliştirme ve iyileştirme süreci olduğundan dolayı değişiklikler sıklıla yapılır ve hata çıkma oranı oldukça yüksek olur. Sunum ve gösterim zamanında ise hataların çıkması biraz can sıkıcı olur. Örnek vermek gerekirse projenin durumu hakkında bilgi almak isteyen proje yöneticiniz yada daha kötüsü patronunuza yaptığınız bir sunum esnasında açılmayan bir ekran yada çalışmayan bir buton o an için sizi soğuk kış günlerinde deniz kenarında güneşleniyormuş gibi ısıtabilir. Ama en kötüsü ve ne istenmeyeni artık proje bitip arkanıza yaslanıp son kullanıcılara gönderildiğinde çıkan hatalar oluyor. Bu hatalar bazen bir tatil gününüzü yarım bırakmanıza, bazen uykudan uyanmanıza en kötüsüde işinizden olmanıza sebep oluyor. Birde bunun düzenltme yapıp tekrar kullanıcıya sunma süreci var ki bundan ne kullanıcılar memnun olurlar nede firmalar. Çünkü bu firmaya olan güveni azaltıp sonrasında aynı ürünü kullanma düşüncesini azaltıyor. (daha&helliip;)

Devamını Oku

Nasıl Daha İyi Bir Yazılımcı Olurum?

121024122005-81-best-jobs-sas-programmer-gallery-horizontalBurada yazdıklarım tamamen uyguladıklarım değil aslında. Bir çok kısmı uygulamak istediklerim ve gayret gösterdiklerim. Ufak ufak notlar gibi bana akıl vermesi için kendimi tembihlediğim şeyler.

  • Bir blog aç ve yeni öğrendiklerinizi yada düşüncelerini yaz. Başkalarının okuması önemli değil. Önemli olan ilk olarak yeni öğrendiğin şeyleri not almış olursun böylece sonradan hatırlama derdine girmezsin. İkinci olarak elinizde seni tanıtan ve ne yapabileceğinizi gösteren bir harita olmuş olur.
  • Sadece yapmanız gereken şeyleri yap. Ek özellik yada ilerde olabileceğini düşündüğün şeyleri yapma. Çünkü çoğu zaman ya kullanılmıyor yada ihtiyaç olmuyor. Onun yerine yaptığın şeyi daha esnek ve kullanışlı yapmaya çalış. (daha&helliip;)

Devamını Oku

Peki Regex Yavaş Kalırsa? Çözüm Çoooook Yakında :)

regexRegex’i seviyorum ve neredeyse bütün projelerimde mutlaka Regex kullanıyorum. Web yada masaüstü olması fark etmiyor. Çoğunlukla doğrulama ve parçalara ayırma işlemlerinde kullanıyorum. Ama bazı özel durumlar da Regex’in yavaşlığından şikayet etmeye başlıyorum. Homurdanıyorum ama yapacak birşey yok. Çünkü alternatifi yok. 

Mesela çok yoğun bir veri işleme sürecinde (ki burada sözü geçen yüzbinlerden başlıyor) Regex kullanıldığında belli oradan yavaşlama sıkıntıları ile karşılaşıyorum. Çoğu zaman bu yavaşlama benim için o kadar sorun yaratmasa da buna benzer bir kaç iş olduğu zaman performans sıkıntıları ile uğraşmak bayağı can sıkıcı oluyor. Böyle durumlarda eski usul ile çalışmak çok daha kolay ve hızlı oluyor.  (daha&helliip;)

Devamını Oku

Çoklu Dil İçin Regex

regexÜzerinde çalıştığım proje bir çok farklı dille aynı anda çalışması ve kullanıcılar kendi istekleri doğrultusunda değiştirmeleri gerekiyor. İşin kötü tarafı bir süre geliştirdikten sonra çoklu dil desteğini oturtmak gerçektende zor ve sıkıntılı bir süreç. Böyle durumlarla daha öncede bir çok kez yüzleştim. Kodların tamamını yayınlayamasamda yapı hakkında bir kaç satır bilgi vermemde bir sıkıntı yok. (daha&helliip;)

Devamını Oku

I Am Nikkor – İlk Android Uygulamam

lecturaBir süredir üzerinde çalıştığım ve hem bana Android’in ne olduğunu öğrenmeme yardımcı olan hemde sıklıkla başvuruda bulunup ahh ahhh bu lens şimdi olsa ne iyi olurdu diyebileceğim bir proje çalışması oldu. Öyle çok özellikli uçarlı kaçarlı bir tarafı olmasa da ihtiyaçtan dolayı ortaya çıktığından dolayı neredeyse nokta atışı bilgiye ulaşmamı ve kolay kullanımı olan bir uygulama oldu.

(daha&helliip;)

Devamını Oku