Öğrenmek İstiyorum!

Arkadaşlar Merhabalar;
Adım Uğur. Harita Mühendisiyim. Son 3 yıldır mesleğimi yapıyorum. Bu süre zarfında excell üzerinde yapılan sorgulamalar ile ufkum açıldı. Yine excell üzerinde yeni şeyler öğrenince yazılım merakım da arttı.
Daha önce yeni başlayanlar için önerdikleri Python için kaynak arayışlarım oldu. İstihza forumunu takip etmeye başladım fakat henüz çok geçmeden forum sayfası kapandı ve bende bugün YazBel sitesini keşfettim.
Yapmak istediğim bir projem var fakat daha önce hiçbir yazılım tecrübem olmadı.
Eğer birilerine öğreterek daha iyi öğreneceği düşüncesine sahip birileriniz varsa bu basit projemi anlatmak isterim ve bu projeyi gerçekleştirmek için neler öğrenmem ne yapmam gerektiğini sizlere sormak isterim. Şimdiden teşekkürler.
İyi çalışmalar.

Merhabalar konu ile ilgili özel ileti gönderdim bakarsanız sevinirim

Merhaba.

Eğer projenizi gizlemek niyetinde değilseniz, burada paylaşırsanız çok daha fazla yardım alabilirsiniz düşüncesindeyim.

İyi çalışmalar.

İsmail Bey;
Konuyu özelden ulaşan Worly ile paylaştım. Burada da yazmak istiyorum fakat yeni üye olduğum için tek bir resim yüklemem isteniyor. Oysa ki daha rahat anlatmam için birden fazla resim ile anlatmak istiyorum. Ne önerirsiniz. Ayrıca size mesaj da atamıyorum.
Teşekkürler.

Sahada çalışan 8 personelimiz var. Bir de ofis te çalışan personelimiz var. Bu iki kısım birbiriyle bağımlı çalışıyorlar şöyle ki;
Saha personelimiz döşenen doğalgaz borularını GPS ölçüm cihazları ile koordinatlandırıp bu veri dosyasını (txt dosyası) ofis birimi personeline ulaştırıyor. Ofis personeli de bu veri dosyasını mühendislik çalışmalarında kullandığımız programlarda işliyorlar. Bu süreç 6-7 iş kaleminden oluşuyor.
Burada şöyle birşeye ihtiyaç duyduk; saha personeli ölçümü yapıp ofise ulaştırmak için ofise gidip gelmesin. Bir portal oluşturalım bu portala işlerini yüklesin. Her personelin kullanıcı adı ve şifresi olsun. Oluşturulan her iş için benzersiz bir numarayı sistem otomatik versin(Kroki No diyelim biz buna) ve daha önce excell de doldurduğumuz bazı bilgiler vardı bu bilgileri de açılan pencerede işi açan personel doldursun
image
. Bu işi ilk oluşturduğumuzda “Ölçüm Yapıldı” adıyla kayıt altına alınsın. ve işin durumu portalda sonraki iş kalemi olan "Hesabın Doğruluk Değeri"ne atansın.


Bu arada işin içine sahada ölçtüğümüz veri dosyasını ofise ulaştırmak için dosya yükleyebileceğimiz bir alan olsun.“Dosyayı indir” komutuyla ofis personeli dosyayı bilgisayarına alabilsin.

“Hesabın Doğruluk Değeri” işinden sorumlu personel o işe “Durum Gir” komutuyla girip yaptığı işi kayıt altına alsın ve bu personel adı, tarih ve saat olarak kayıt altına alınsın. İşin altında isteyen istediği zaman log kayıtlarını görebilsin.
image
Kayıt yapıldıktan sonra iş bir sonraki iş kalemi olan “CBS İşleme” ye atansın.

Bu şekilde işler iş kalemleri olarak basamak basamak ilerleyebilsin ve tamamlanana kadar işin son durumu portalda görünsün istiyorum.
Umarım anlatabilmişimdir.
Mevcutta kullandığımız bir sistem var. Daha önce yakın arkadaşım ve iş arkadaşım olan biri tarafından yazıldı.
Fakat kendisi ayrıldıktan sonra ne geliştirme yapabildik ne de dışarıdan destek alabiliyoruz. Bunun için bütçemizde yok.
Ben hem kendim yapabilmek hemde bir başlangıç olması için öğrenmek istiyorum.
Bunun için vaktim ve hevesim var.
Umarım başarabiliriz.

Anladığım kadarıyla tek bir sorun oluşuyor Python’la ilgili. Eğer bir server’ınız yoksa internetten bunu edinmelisiniz. Diğer kısımları Python ile rahatça yapabilir deneyimli kişiler. Vize haftası yaklaştığı için ben pek yardım edemeyeceğim ama localhost üzerinden denemeler yapıp konu altında size hem nasıl yaptığımı hem de sonucu bildireceğim. Dediğim gibi vize haftası yaklaştığı için pek fazla üstünde duramam. Zaten burada benden çok daha deneyimli insanlar var. Onlar yardımcı olacaktır büyük ihtimalle.

Öncelikle ilginiz için teşekkür eder ve sınavlarınızda başarılar dilerim. Localhost üzerinden olabilir tabii ki. Diğer deneyimli arkadaşlarımızdan da konu hakkında destek beklerim.
İyi günler.

Yeni üyeler için kullandığımız forum uygulaması olan Discourse’un varsayılan olarak ayarladığı bazı kısıtlar var. Birden fazla resim yüklenememesi de bu sebeple olmalı. Bu kısıtlar yeni üyelerin elini kolunu bağlıyor gibi görünse de uzun vadede huzurlu ve spamsız bir tartışma ortamı oluşmasını sağlıyor. Merak etmeyin, yakın zamanda resim kısıtınız kalkacaktır.

Bana mesaj atamamanızı anlayamadım; atabiliyor olmanız gerekirdi. Tabii günlük özel mesaj sınırınızı doldurmuşsanız bu sabepten dolayı atamıyor olabilirsiniz; yeni üyeler için böyle bir kısıt da var.

Eski sistem ne ile yazıldı? Belki baştan yazmak yerine onu devam ettirmelisiniz. Böylece hem zamandan hem de maliyetten kar edersiniz.

İsmail Bey;
Bu konudaki ana amacım kendi yazabileceğim donanıma sahip olabilmek. Bunun için zaman konusunda bir kısıtlamam yok. Eski sistem bildiğim kadarıyla JAVA ile yazıldı. Fakat ben mümkünse Python öğrenmek istiyorum.

Anladım. Tabii ki karar sizin.

Gördüğüm kadarıyla görsel çizimler tamam. Bundan sonra hangi platforma(web ya da masaüstü) gerçekleme yapacağınıza karar vermeniz gerek bana göre. Ayrıca bir de mobil uygulama olacak sanırım. Android mi, iOS mu ya da her ikisi de mi? Mobil uygulamanız yerel(Java ve Swift ile) olarak mı yoksa platformlar arası(Python ile programlama yapabileceğiniz Kivy çatısı ile) mı yazılacak?

İyi çalışmalar.

Uygulama tamamen web platformu üzerinde yer alacak. Kullanıcılarımız olacak olan saha personellerinde windows işletim sistemine sahip tabletler var. SIM Cardları ile internet bağlantısına sahip olacaklar. Mobil uygulama v.b. belki sonrası için düşünülebilir. İşin tasarım kısmını da şu an için önemsemiyorum. Yalnızca kodlamaya geçmek istiyorum.
Teşekkürler.

Anladım. O zaman sizin için, grafiksel arayüzün basit olduğunu düşünürsek, Python + Tkinter yeterli olacaktır diye düşünüyorum. Peki veritabanı olarak ne kullanacaksınız? Halihazırda kullandığınız veritabanına entegre mi olacak yeni uygulama yoksa onu da mı baştan yapacaksınız? Baştan yapacaksanız verinizin büyüklüğünü düşünmeniz ve ona göre bir veritabanı çözümü seçmeniz gerekecek.

Tkinter i daha önce duymamıştım bile İsmail Bey :slight_smile: Veritabanı da sıfırdan olacak. Çok büyük bir veri alışverişi olmayacak zaten gelen dosyalar max. 2kb ort. 1kb boyutunda.

Kütüphanelerde kullanılan bir web site yapsanız tarayıcı olan her ortamda çalışsa daha iyi olmaz mı?Böylece zaten server kısmını yazmak için öğrenmek zorunda olduğunuz django ile bütün meseleyi halledebilirsiniz.

Pardon, web platformu dediğiniz halde sonradan Windows tableti okuyunca kafam masaüstüne gitmiş. Bahsettiğim Tkinter bir masaüstü grafiksel arayüz programlama kütüphanesi; yani sizin işinizi görmez. Bunun yerine @hasser’in de bahsettiği Django önerebilirim. Veritabanının büyük olması gerekmiyorsa, Python’da ve Django’da öntanımlı olarak gelen ve kullanılan sqlite işinizi görecektir.

Merhabalar,

Daha önce Django ile ilgilenmediğim için bahsedeceğim dosya gönderimi yöntemine göre avantajları ve dezavantajları nelerdir bilemiyorum.

Mesela benim aklıma şöyle bir yöntem geldi:

Kullanıcılarda tkinter ile yapılmış GUI uygulamalar bulunur. Bu GUI uygulamalarına girilen veriler, sqlite3 ile bir veritabanına aktarılır… (Tercihe bağlı olarak Tkinter veya sqlite3 kullanılmayabilir. Bütün işlerin konsolda yürütüldüğü bir program da kullanılabilir. Yani alternatifleriniz var.)

Dosya gönderimiyle alakalı bahsetmek istediklerim ise şunlar:

Modem arayüzü üzerinden sunucu bilgisayarın kullandığı modemde bir port yönlendirilir. Sunucu bilgisayarın bağlandığı modemin harici ip adresi ve yönlendirilen port numarası istemcilere dağıtılır. İstemciler; dosya gönderirken, bu ip adresini ve portu kullanırlar.

Python’ın socket modülüyle oluşturulan sunucu (server) program, tanımlanıp çalıştırıldığında, bu sunucuya, örneğin, aynı anda 10 tane istemci (client) bağlanabilir. Sahadaki istemci makineler sunucuya bağlanır bağlanmaz, dosya gönderimi işlemi başlar ve tamamlandığında istemciler otomatik olarak sistemden düşer. Sunucu makine dosyaları alır ve bir sonraki bağlantıyı beklemeye başlar…

İstemci programların çalışabilmesi için Tabletlerde python yüklü olabilir. Bu tabletlere python yüklenmeyecekse, programların windows’da çalışabilmesi için; python’ın pyinstaller modülü kullanılarak, exe türü dosyalar oluşturulabilir.

Django, Tkinter, Pyinstaller, Socket, sqlite3… bunların hepsi Python kütüphanesidir. Python’ın standart ve 3. parti olmak üzere iki tür kütüphanesi var. 3. kullanıcılar tarafından yazılmış kütüphaneler; kendisi bir standart kütüphane olan pip kullanılarak python’ın kütüphane deposundan veya github’dan indirilebilir.

Bu kütüphaneleri kullanabilmek için Python’ın temel programlama bilgilerini de az çok öğrenmenizi tavsiye ederim. Yoksa Python öğrenmeye doğrudan Django veya tkinter veya herhangi bir modül (kütüphane) ile başlarsanız… nasıl söylesem… denenebilir tabi ama aynı zamanda algoritma oluşturmanın da sorun olmaması gerekiyor. Yani demek istediğim, karşınızdaki veri bir karakter dizisi mi, bir sayı mı, bir zaman verisi mi, bir byte verisi mi, nedir? Her bir veri sınıfının kendine has özellikleri ve yöntemleri var. Verileri bu sınıf yöntemleriyle değiştirmek, dönüştürmek gerekebilir. Nerede hangi döngüyü kullanacaksınız, değişkenleri nasıl tanımlayacaksınız, yöntemleri ve kendi yazdığınız fonksiyonları nerede nasıl çağıracaksınız, bütün bunlar ayrıntı gibi görünüyor ama zaten programlar, bu ayrıntılar uygun şekilde birleştirildiğinde oluşuyor.

@dildeolupbiten, bence masaüstü program yapılması yerine bir web uygulaması yapılması hem zamandan hem de maliyetten tasarruf sağlayacaktır. Django gibi bir web çatısı ile hem sunucu hem istemci uygulamalar aynı anda oluşturulabilir. Diğer türlü bir sunucu bir de masaüstü uygulaması olması gerekecek.

Dosya, vb. göndermek Django gibi bir web çatısı ile gayet kolay. Bunlar için Python’ın daha düşük seviye kütüphanelerini kullanmanın gereksiz yük olacağını düşünüyorum.

İyi çalışmalar.

@ismailarilik, socket modülünü kullanmanın mali bir yükü yok, Ayrıca sunucu ve istemci programlar toplamda en fazla 50 satırlık kodlardan oluşabilir, yazılmaları çok da bir zaman almaz. Ama dediğiniz gibi bahsettiğim yönteme göre, ofisteki bilgisayarda, istemcilerin gönderecekleri dosyaları alabilmek için sadece bir tane sunucu program oluşturulmalı. Sahada kullanılan tabletlerde ise hem istemci program hem de veri girişlerini sağlayacak programlar oluşturulur. Yine dediğiniz gibi socket modülü djangoya göre düşük seviye bir ağ kütüphanesi. Daha önce django kullanmadığım için avantajları hakkında birşey diyemiyorum. Ama arkadaş hangi modülü kullanmak isterse istesin, önce temel programlama bilgilerini öğrenmesini tavsiye ediyorum.

@dildeolupbiten, veri akışı sadece dosyalardan ibaret olsa dediğiniz doğru. Ancak kullanıcı girişi, güncel verileri alma, değişiklikleri gönderme, verileri güncel tutma derken arada bir sürü veri trafiği olacak. Bu durumda daha üst seviye bir kütüphane çok daha uygun olur görüşündeyim.

Temelleri öğrenmek elbette önemli. Ancak Django kullanmak için socket modülünü bilmeye gerek yok. Çünkü Django çok daha üst bir seviyeden veri gönderme ve alma desteği sunuyor. Bir örnek için şu adresteki bölüme, bir altındakiyle birlikte göz gezdirebilirsiniz: https://docs.djangoproject.com/en/1.11/intro/overview/#design-your-urls

İyi çalışmalar.

@ismailarilik
Django bilmek için socket modülünü bilmeye gerek yok evet. Söylemeye çalıştığım ise, Python’ın temel programlama bilgileri öğrenilmeden, kütüphane öğrenmeye çalışmanın biraz işleri zora sokacağı yönünde. Yani arkadaş ister projesinde django kullansın, ister başka bir kütüphane kullansın, buna sonra da karar verebilir. “Yapmak istediğim bir projem var fakat daha önce hiçbir yazılım tecrübem olmadı.” diyen bir insana, şayet acelesi yoksa, önce temel programlama bilgilerini öğrenmesini tavsiye ederim.

1 Beğeni