Ünlem Bilişim: Mobil Envanter & Barkod Takip Uygulaması
Quick Facts
- Şirket: Ünlem Bilişim Teknolojileri A.Ş.
- Rol: Stajyer Mobil Uygulama Geliştiricisi
- Proje Dönemi: 2015-2016
- Sayfa Yayın Tarihi: 2024-08-01
- Platformlar: iOS, Android
- Teknoloji: Delphi RAD Studio, FireMonkey, Object Pascal, SQLite, FireDAC, ZXing
- Kısıtlar: Offline kullanım, düşük cihaz kapasitesi, hızlı barkod okuma
Bu çalışma, staj programının final projesi olarak sahada kullanılabilir bir mobil envanter uygulaması üretmeyi hedefledi. Odak, tek codebase ile iOS/Android dağıtımı, offline çalışma ve barkodla hızlı işlem akışıydı. Çıktı, saha ekiplerinin sayım ve zimmet işlemlerini tablet/telefon üzerinden yapabildiği bir pilot ürün oldu.
Timeline
- 2015: Staj başlangıcı, saha ihtiyaçlarının toplanması ve ilk prototip.
- 2016: Uygulama geliştirme, saha denemeleri ve teslim.
- 2024-08-01: Sayfa yayın tarihi (datePublished).
Problem ve Kısıtlar
KOBİ’lerde envanter sayımı ve stok güncellemesi sahada, düşük bağlantı kalitesiyle yapılıyordu. Masaüstü sistemler taşınabilir değildi; mobilde ise barkod okuma, offline çalışma ve hızlı veri erişimi aynı anda sağlanmalıydı. Cihaz çeşitliliği, düşük ışık ve sınırlı donanım kaynakları tasarımın ana kısıtlarıydı. Depo içlerinde Wi-Fi kesintileri, barkodların yıpranması ve farklı cihaz kameraları ürünün stabil çalışmasını zorlaştırdı. Ayrıca mevcut ERP servisleriyle uyumlu veri modeli korunmalıydı.
Çözüm Özeti
Delphi/FireMonkey ile tek codebase üzerinden iOS ve Android için offline-first bir mobil envanter uygulaması geliştirdim. Barkod tarama, GPS etiketleme, lokal SQLite veri tabanı ve REST senkronizasyonu bir araya gelerek saha ekiplerinin hızlı ve hatasız işlem yapmasını sağladı. Uygulama, bağlantı yokken tüm kritik işlemleri tamamlayacak şekilde kurgulandı; bağlantı geldiğinde değişiklikler kuyruktan sunucuya gönderildi. Barkod tarama, sayım ve zimmet akışları minimum dokunuşla tamamlanacak şekilde tasarlandı.
Architecture at a Glance
- Local SQLite + FireDAC ile offline veri saklama.
- REST API ile periyodik senkronizasyon ve delta güncellemeler.
- Değişiklik günlüğü (change log) ile güvenli veri gönderimi.
- Basit conflict policy: last-write-wins + manuel kontrol.
- Retry/backoff ile senkronizasyon dayanıklılığı.
- Yetkilendirme için hafif token kontrolü.
Bu yapı, düşük bağlantı koşullarında veri kaybını azaltırken merkezde tekil kayıtla uyumlu kalmayı hedefledi.
Data Model & Sync Strategy
Veri modeli; Products, Inventory, Location ve TransactionLog tablolarından oluştu. Her kayıt için last_modified ve cihaz kimliği tutuldu; böylece hangi değişikliğin nereden geldiği izlenebildi. Ayrıca SyncQueue tablosu ile bekleyen güncellemeler kuyruklanıp güvenli şekilde gönderildi.
Senkronizasyon, push/pull akışıyla ilerledi. Uygulama, önce yerelde biriken değişiklikleri küçük paketler halinde sunucuya gönderdi, ardından sunucudan sadece değişen kayıtları çekti. Ağ kesilince queue korunarak yeniden denemeler otomatikleştirildi.
Key Features
- Barkod tarama (ZXing) ile hızlı ürün bulma ve sayım.
- GPS etiketleme ile konum bazlı envanter doğrulama.
- Offline-first çalışma ve ağ gelince otomatik sync.
- Basit ve hızlı arayüz: listeleme, detay, sayım, arama.
- Zimmet ve depo hareketi kayıtları.
- Hızlı arama/filtreleme (barkod, ad, lokasyon).
- Rol bazlı ekran erişimi ve temel yetkilendirme.
İş akışları, depo personelinin eldivenle kullanımı düşünülerek büyük buton ve kısa formlar üzerinden sadeleştirildi.
Engineering Trade-offs
- Tek codebase hızı, bazı platform-özel optimizasyonların sınırlanmasıyla dengelendi.
- Last-write-wins kolaylığı, kritik alanlarda manuel onay ihtiyacı doğurdu.
- Offline-first yaklaşım, veri tazeliği yerine sürekliliği önceledi.
- Yüksek çözünürlük, barkod okuma hızını düşürdüğü için örnekleme uygulandı.
- GPS hassasiyeti, batarya tüketimiyle dengelendi.
Conflict Resolution & Data Integrity
Saha çalışanlarının aynı ürünü farklı zamanlarda güncellemesi olasılığı için last-write-wins yaklaşımı kullandım. Kritik çakışmalar için kullanıcıya “son güncelleme uyarısı” verip manuel doğrulama akışı ekledim. SQLite transaction yönetimi ve FireDAC ile veri bütünlüğünü korudum. Çakışma oranını azaltmak için senkronizasyon aralığını kısa tuttum ve değişiklik paketlerini küçük gruplar halinde gönderdim.
Performance Notes
- Barkod taramada frame sampling ve görüntü küçültme ile CPU yükü düşürüldü.
- SQLite indeksleri ile barkod ve ürün adı araması hızlandırıldı.
- Arka plan senkronizasyonu, UI thread’i bloklamayacak şekilde tasarlandı.
- Listeleme ekranlarında sayfalama ile bellek kullanımı dengelendi.
- Kamera önizlemesinde düşük ışık için otomatik pozlama tercihleri kullanıldı.
Bu optimizasyonlar, özellikle eski Android cihazlarda uygulamanın akıcı kalmasını sağladı. Sahada hızlı sayım için tarama ekranı ve liste ekranı arasında gecikme yaşanmaması temel hedefti.
Results / Impact
- Pilot kullanımda süreç hızlanması - %20 - dönem: 3 hafta pilot - kaynak: saha geri bildirimi (client-reported).
- Kullanım kolaylığı ve mobil erişim - niteliksel iyileşme - kaynak: kullanıcı yorumları (internally observed).
- Staj sonrası part-time teklif - proje çıktısına dayalı geri bildirim (anecdotal).
- Offline kullanım memnuniyeti - niteliksel iyileşme - kaynak: saha notları (internally observed).
Lessons Learned
- Offline-first mimari, saha senaryolarında en büyük değer.
- Basit UI, teknik olmayan kullanıcılar için kritik.
- Mobilde performans, doğru örnekleme ve indeksleme ile korunuyor.
- Staj projelerinde ölçüm bağlamı ve kayıt tutmanın önemi çok yüksek.
- Senkronizasyon stratejisi, veri tutarlılığını doğrudan etkiliyor.
- Gerçek kullanıcı geri bildirimi, tasarımın en hızlı doğrulaması.
Bu deneyim, mobil ürün geliştirmede uçtan uca sorumluluk almayı öğretti.
Project Snapshot
- Şirket: Ünlem Bilişim Teknolojileri A.Ş.
- Proje Tipi: Staj final projesi
- Rol: Mobil Uygulama Geliştiricisi
- Proje Dönemi: 2015-2016
- Tamamlanma Tarihi: Ağustos 2016
- Sayfa Tarihi: 2024-08-01
- Platform: iOS, Android
- Teknoloji: Delphi RAD Studio, FireMonkey, Object Pascal
- Veritabanı: SQLite + FireDAC
- Entegrasyon: REST API, JSON, ZXing, GPS
SSS
Delphi ile mobil uygulama performansı nasıldı?
FireMonkey ile native derleme sayesinde performans yeterliydi; kritik noktalarda optimizasyon uygulandı.
Offline senaryolar nasıl yönetildi?
SQLite ile lokal kopya tutuldu, ağ gelince REST üzerinden senkronizasyon yapıldı.
Barkod okuma stabil miydi?
ZXing ile örnekleme ve çözünürlük düşürme teknikleriyle stabil okuma sağlandı.
Neden FireMonkey tercih edildi?
Tek codebase ile iOS ve Android’e çıkmak ve mevcut Delphi ekosistemiyle uyum sağlamak için.
Çakışmalar nasıl çözüldü?
Last-write-wins uygulanıp kritik durumlarda kullanıcıya doğrulama sunuldu.
GPS etiketi ne için kullanıldı?
Saha işlemlerinde ürün konum doğrulaması ve depo içi kayıt için.