15 Ocak 2014 Çarşamba

MVC ile kaynaşma bahanem : Ticket System :PP


Dün gece uzun bir gece oldu.. İşten eve döndüm ve Boss umla beraber teamviewer üzerinden ticket sistemimizin startını verdik. :) Kendisi çok heyecanlı projeyle alakalı,, halbuki ben o projeyi kulağıma en kolay ve öğretici geldiği için seçmiştim. Meğersem buz dağının bir de görünmeyen kısmı varmış..


(Burada bir karikatür vardı ama telif yerim diye kaldırdım. Herkese dava açıyorlarmış karikatür paylaşılıyor diye. Karikatürün doğasına hiç uymuyor bence bu tavır :-/ Merhaba Fıstık (Şişman penguen))

Şöyle ki; ben sadece insanlar gelecek ben projeme şunu istiyorum diyecek, şu sorun var diyecek destek elemanları da bu istekleri öncelik sırasına göre yapacak sonra sorunu kapatacak ve herşey olup bitecek,, kullanıcılar ve destek elemanları güzeel güzel geçinip gidecekler zannediyordum. :) Evet başlangıç olarak hemen hemen böyle,, ama benim öylesine seçtiğim bu projenin bir de birkaç fazladan fazı olacak gibi görünüyor.( fazla ve faz kelimelerini bilinçli olarak yan yana kullandım. :P geyik ruhum sınır tanımıyor. Çok çılgınım. ) Neyse işte böyle birşeyler, bu fazla fazları sırası gelirse yazacağım inşallah. Olur da yaşarsam o zamana kadar. :)

İlk yaptığımız işlem Navicat üzerinde MySQL kullanarak database imizi modelledik. İlk aşamada kullanıcılar, şirketler, sorunlar, sorun nesneleri, dosyalar gibi temel tabloları oluşturduk. Bossum proje sonradan büyüyeceği için yapıyı alabildiğine esnek tuttu. Sonrasında pek çok yeni tablo ekleyeceğiz gibi görünüyor.
Sonrasında ise VisualStudio üzerinde boş bir proje oluşturup içine Entity, web ve resources projelerimizi ekledik. Ve tabii ki benim için ana amaç olan MVC yi seçtik. Bu arada sanırım Bossum beni kıskanıyor.(aramızda kalsın) Çok şanslı olduğumu yineleyip duruyor. Yazık çok sıkıntı çekmiş kendisi öğrenirken benim ise onun gibi büyük bir nimetim var. :)) Ne yapalım rızk Allah tan .. Ben de pek çok başka yerde kaybetmişimdir muhtemelen.. 

Neyse yine araya salata soktuğumun farkındayım. :) Gelelim en eğlenceli kısma.. Kullanacağımız template. Daha önce UI dan nefret ettiğimi söylemiştim ya. Sanırım nefretim bu işi çok güzel yapanlara olan kıskançlığımdan kaynaklanıyordu. Ve onlardan birisine daha template arayışımız esnasında denk gelmiş oldum.
Yine bootstrap kullanacağız elbette. Template işini de https://wrapbootstrap.com/ daki templatelere bakarak halletmiş olduk. Seçtiğimiz template şu; http://wrapbootstrap.com/preview/WB0573SK0
Bizi template i incelerken görmeniz lazım. Yapan adama küfürler mi etmedik ( tabii ki lafın gelişi, ben hiçbir zaman kötü kelime kullanmam,, belki bazen ima ederim :P ) yuhalamadık mı, anormal gözüyle mi bakmadık. En sonunda baktık olmayacak,, işini bu kadar harika yaptığı için teşekkür maili atmaya karar verdik. =) Hihi. Ne kadar da şiriniz. 

Neyse template imizi aldıktan sonra projemize bunu dahil ettik, ve Home page imizi de Menu, header gibi parçalara ayırdık Partial ekleyerek. Sonra ben esnemelere başladım ve susadım. Boss umdan zar zor izin alıp (:p abartık cümle başlangıcı)  mutfağa gittim ki annemle karşılaştık. Yok efendim bu neymiş, böyle iş mi olurmuş, kaç saattir çalışıyormuşuz, sonra uyanamıyormuşum, hemen bırakacakmışım çalışmayı fln (abartık cümle bitişi :p) Hep ben suçluydum zaten.(duygu sömürüsü cümlesi B) ) Neyse bu olanları Bossuma duygu sömürüsüyle anlattıktan sonra tüm heyecanına rağmen ve hala çalışmak istemesine rağmen bıraktı.. 

Bu yeni proje beni de heyecanlandırıyor. Umarım öz güven sorunumu da yenip hızlı bir şekilde adapte olabilirim. Geç kalmışlığımın ezikliğinden kurtulup Allah ın bana Bossumun vesilesiyle bahşettiği bu fırsatı değerlendirebilme ümidiyle, esen kalın. ;)

11 Ocak 2014 Cumartesi

MVC ile kaynaşma bahanem : Ticket System :P


Eveeet..
Yeni bir başlangıçla daha karşınızdayım. :) Devamıyla da karşınızda olmaya devam edeceğimi umuyorum sayın cinlerim. Biliyorsunuz,, yeni başlangıçları severim ( mecburen :p ).. Bitişini genelde beceremesem de "Önemli olan katılmaktı." cümlesinin verdiği teselli bana her zaman yeni başlangıçların cesaretini de vermiştir. Hı sadece o cümlecik mi cesaret veriyor derseniiz ve ben de evet dersem "pis mikrop nankör" diye bir serzeniş de alabilirim asıl cesaret kaynağımdan. Ama bu kaynağım şu anda bir sır. Onu henüz açıklamayacağım.. Bu nedenle o cümleciki neden gösterip yoluma devam edeyim. Hem zaten neden neden göstermem gerekiyormuş ki? Hesap mı vericem gelmişim 4972 yaşıma. Etrafta cirit atmaktan ve inlerle top oynamaktan vaktiniz kalırsa katılırsınız başlangıcıma. Kendi kendime atarlandım durup dururken iyi mi. :P 

Her zamanki gibi laf salatasıyla girişimi yaptıktan sonra gelişme kısmıma da yine farklı bir laf salatası türüyle devam edeceğim. Sonuçta otobur bir cinsim. Salatayı severim. Geyiği de seviyorum sanırım. Yine geyiklik çanlarım çalmaya başladı. Ama üzgünüm. Artık "Take it serious." zamanındayım. :(

Başlık belli. MVC ile kaynaşma bahanem.. Neden mi bahaneye ihtiyaç duydum? Çünkü MVC biraz korkutuyor beni, sanki biraz soğuk bir tip.. :-/ önceden beri de beni korkuttular hep MVC çok karışık çok zor diye.. Tanışmamız çok kötü olmadı aslında,, basit bir mobil uygulama geliştirdim Boss umla beraber. Kaynaşmamda da Boss um yanımda olacak ve siz cinlerimle de beraber daha iyi öğreneceğim inşallah. Bahanem ise MVC mimarisini ve .Net'i kullanarak Ticket/Support System yapmak.. Bu sistemle geliştirdiğimiz uygulamalardaki hataların, müşterilerin yeni isteklerinin vs yönetimini hedefliyoruz. MySql, MVC ve biz bu işi hallederiz. Ama UI'dan nefret ediyorum. :S (söyleyesim geldi.)

Bu sadece bir başlangıç yazısıydı dediğim gibi.. Bu yüzden herhangi bir bilgi barındırmıyor. Bundan sonraki her aşamayı yazmaya çalışacağım. Böylece bilgi barındıran yazılar yazmış olacağım. "Take it serious." yapmış olacağım. Bu iyi birşey. :P

Bu yazı bana çok boş göründüğünden bir iki link paylaşsam olur.
  
http://mvc.nedir.com/

http://www.ahmetcigsar.com/yazilim/yazilim-muhendisligi/mvc-nedir/

Oldu. :)

6 Aralık 2013 Cuma

Microsoft SharePoint is not supported in 32-bit process. Please verify that you are running in a 64-bit executable.



Bir Mono klasiği daha vuku buldu ve bloguma yazacaklarım biriktiii, dağ gibi oldu ve haliyle hiçbiri yazılmadı. :D işlerimi biriktirmeye bayılırım. Hele yetiştiremediğim zaman hissttiğim şey paha biçilemez :P Neyse ki bu o kadar da elzem bir mevzu değil. Ya da ben farkında değilim :)

Şimdi,, hatamız başlıkta görünmekte. Bir web projesi üzerinde çalışıyorum ve yukarıdaki hatayı aldım. Aslında bu 2. alışım. Ama bu ne biçim hataymış yaa bir daha almam herhalde diye mi düşündüüüm ya da bizim "boss"un (ki ben ona temel reis diyorum kısaca, tabi genelde içimden,, :P) hıphızlı bir oraya bir buraya girerek yaptığı ayarları not almayı başaramadığımdan mı öğrenememiş oldum çözümünü bilmiyorum. Ama sonuçta ikinci sefer sormak zorunda kaldım mıı,, kaldım. :)) Artık üçüncüsü olmasın diye çözümü siz sayın canım cinlerimle de paylaşayım ki bilgi çoğalsın. Google amca pek yardımcı olamadı bu hususta bana keza.. (Bu arada bayağıdır yazmadığımdan herhalde hemen körelmişim haaaaaaa....)

Lafı her zamanki gibi çok uzattığımdan kaynaklanan bir cümle kirliliğinden çıkarken çözüme geçmeyi kendime görev bilirim. :P Alkışa lüzum yok.

İlk olarak Regedit imize giriyoruz.

HKEY_CURRENT_USER -> Software -> Microsoft -> VisualStudio -> 12.0 -> WebProjects -> Use64BitIISExpress i çalıştırıyoruzz.. 

Artık böyle bir hata yok. Yeni hatalara yelken açabiliriiiz,, çalışmaya da geçebiliriz.. ;)


9 Ekim 2013 Çarşamba

Sade ve Şık tasarım ; Bootstrap.. / Kesikli iş hayatı grafiği ; Mono's :D


Hayatım her hayat gibi ilkleer ve sonlar dolu.. Ama sanırım iş konusunda diğer hayatlara göre biraz daha fazla ilke ve sona sahibim :P  İlk işten çıkarılışımın üzerinde 1.5 ay geçti ve bugün yeni işimdeki ikinci haftam..

Yazmadığım zaman zarfında tahmin edersiniz cinlerim ki; hem yoğun hem depresiftim :)) 

Bazen acaba iş mevzusundaki bu bol bol ilkli sonlu, kesikli grafiğimin bana anlatmaya çalıştığı birşeyler var da ben mi göremiyorum diye düşünmüyor değilim.. Bakalım hayırlısı,, belki birgün görürüm, görürsem söylerim.. :P Bana dayatılan bu özgürlük hapishanesinde geçecekse de ömrüm asıl hedeften şaşmamak asıl hedef. (Bu ilkler sonlar bana duygusallık mı katıyor ne :P)

Yeni işime girmemle birlikte bayağı yoğun bir tempoya da giriverdim.. Bu sene bilgisayar mühendisliği okumaya başladım, derslerim akşamları.. İşten çıkışta eve derse yetişme telaşı oluyor ve çok ara verdiğimden unutmuş olduğum matematiğin sancısı bile beni yormaya yetiyor :) Yine de bloguma yeni şeyler girebilecek malzemeyi ancak işten ve okuldan edinebilirim sanırım :))

Yeni işimle birlikte WCF'le de ayrılık kararı almış olduk. Ayrılık şarkıları eşliğinde ayrılığımın acısını yaşıyorum. Belki birgün başka bir projede, başka bir platformda.. Kimbilir.. Yine de bu ayrılık beni hayattan koparmadı. Yeni bir framework var tanıştık işte.. Bakalım heyecanlıyım,, hayırlısı diyoruuumm ;) 

Bizim bu frameworkle haşır neşir olurken hazırladığım sayfaların sade bir tasarıma ihtiyacı oldu. Aramıza tasarım girdi yani.. -_- .. Ama olsun,, iyi bir dost edindiğimi düşünüyorum.. Ne mi? BootStrap :) 

BootStrap çok güzel birşeymiş yaa.. Sade, şık, kullanıcı dostu.. Sadece indirip projeme dahil ettim ve tasarımlarını çok kolay bir şekilde kullanmaya başladım. Dökümantasyonu, örnekleri çok basit, anlaşılır. 

Linki;
http://getbootstrap.com/

Hali hazırda bir tasarımcısı olmayan ve tasarımın kodlarını yavaşlatmasını istemeyen herkese tavsiyem,, uğraşmayın bootstrap büyük ölçüde işinizi görür :) 

Rreekklamm kokan iletiler bunlaaaarrr :D

Haydi hayırlı işler ;)

21 Ağustos 2013 Çarşamba

Transaction (Process ID ...) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.



Bir varmııış bir yokmuuş.. Sürekli veri çeken, veri yazan, listeleyen bir ajax wcf servis varmış.. Gel verii git verii, yorulmuş bir gün vee "Transaction (Process ID ...) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction." hatasına düşer olmuuş.. :P

Sonra süper kahraman Mono çıkagelmiş vee servisini bu zulden kurtarmak için başlamış çalışmalara.. Çalışınca da kazanmış haliylee :) Burda da masal bitmiiiş..

Tüm postu masallaştırabilme kabiliyetimden şüphem yok ama işte yine o malum üşengeçlik :P

Hikaye anlaşılmış olmalı, sorunumuz transactionların hızlı hızlı çalışırken çakışması.. :) Elbette derinlemesine manasını bilmiyorum ama tahminimce ve internetten okuduklarımla böyle olduğunu tahmin ettim. Böyle de zekalı bir insanım :P

Neyse naçizane bulduğum çözüme geçeyim.. Çözüme kullandığım transactionlara bir ayar nakşederek ulaştığımmı zannediyorum. O ayarı yaptığımdan beri o hatayı almadım ama umarım mahcup olmam :P

Çözümü şurada buldum;
http://forums.asp.net/post/4141266.aspx

Orada ReadCommitted yazmış IsolationLevel a, ama ben onu ReadUncommitted olarak kullandım.

Çünkü, Aralarında bi fark vardı;

ReadUncommitted de, data transaction boyunca okunup düzenlenebiliyor.  (Volatile data can be read and modified during the transaction.)
ReadCommitted de ise data transaction boyunca okunamıyor, ancak düzenlenebiliyor. (Volatile data cannot be read during the transaction, but can be modified.)
ingilizcelerini yazayım da havam olsun..

O farklan çok gözel oldu..
(ya ben bu adamın sözlerini kullanıp duruyorum kaynak belirtmeden ama ilerde başıma dert olur mu bilemedim? :P )


TransactionOptions transOptions = new TransactionOptions();
transOptions.IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted;
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew, transOptions))
{
 ...
}

Gökten 3 chat penceresi düşmüüüş, biri osmanın, biri benim, biri de ayşenin başına :)
Ama sanırım tek başına birşey düşen bu 3 şahıs değil.. Asıl malum şahsın başına da osman, ayşe ve ben elmalarla beraber düşmüşüz :P ( O kendini biliyor sayın cinlerim herşeyi de merak etmeyin :) )

19 Ağustos 2013 Pazartesi

Jquery Dizileri Karşılaştırma (2 dizinin farklı elemanlarını bulma)


--Basın Açıklaması--

Geçtiğimiz günlerde tarafıma, yazılarımı özgürce yazmama engel olmak için bir komplo kurulduğu malumunuzdur. Ancak bu komploya yenilmeyip canım istedikçe canımın istediğini yazacağım "cinioyuna" duyurulur.

imza= :P

( Sadece espri YK ;) )
--

Vay arkadaş.. 2 haftayı aşıyor bir işi bitiremedik :) Sadece chatleşecektik. kulağa ne basit geliyor, ki aslında öyle de..

Ama bunu yapmayı deneyenler iki junior insanı olunca ve soru sormamıza hemen gözlerini kısan bir yazılım müdürü olunca haliyle uzun sürüyor, basit yerlerde takılınıyor, bazen mantıksız mantıklar yürütülüyor :) o da haklı, sonuçta sorduğumuz sorular çok basit geliyor olmalı. Neyse, sorularımızı bağrımıza basıp elimizden geldiğince birşeyler yapmaya çalışıyoruz işte, böyle böyle düşe kalka öğreneceğiz :)

Yine o basit takılınmış yerlerden birindeydik. Jquery de iki diziyi karşılaştırıp farklı elemanlar için yeni chat penceresi oluşturacaktık. Aaa ben bunu biryerden hatırlıyordum. önceki postumu açtım hemenn, intersecti ve excepti deneyelim dedik. Ama Jquery yle uzaktan bakışıp selamlaşıyor olsak da çok bir samimiyetim yoktu.. Araştırdık bu kodları, Jquery de kullanımlarını bulduk, ama o gün basiretimiz mi bağlanmış derler, çözümü bulmamıza rağmen sonuca ulaşamadık. Tıkanınca tıkanılıyor :) Ertesi iş günü ilk işimiz bunu halletmek oldu; basitçe çözdük ve biz nasıl geçen gün bunu çözemedik diye hayıflanmak da ikinci işimiz oldu haliyle :D Daha çok işimiz var tabi ama bu kısmı yazmış olayım..


  • Kodumuz şöyle;


var array1 = [1, 2, 3, 4, 5, 6];
var array2 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var difference = [];

jQuery.grep(array2, function(el) {

    if (jQuery.inArray(el, array1) == -1) difference.push(el);


});


alert(" the difference is " + foo);


  • Site şöyle;


http://stackoverflow.com/questions/10927722/jquery-compare-2-arrays-return-difference



  • Kullanımımız şöyle;


var windowArray = [];
for (var i = 0; i < windowsLength; i++) {

     var window = windows[i];
     var windowId = $(window).attr("id");

     windowArray.push(windowId);
}

var dataArray = [];
for (var i = 0; i < dataItems; i++) {

    dataArray.push(d[i].MessageGroupId);
}

var difference = [];
jQuery.grep(dataArray, function (el) {

var control = jQuery.inArray(el, windowArray);

 if (control === -1) difference.push(el);
 });

 for (var i = 0; i < difference.length   ; i++) {
      for (var i = 0; i < d.length   ; i++) {
          if (d[i].MessageGroupId === difference[i]) {

              OnlineChat.ChatWindow(d[i].MessageGroupId, windowUserId,"Konuşma", d[i].GroupUserIds);
                                    }
                                }

                            }


  • Can sıkıntım ise şöyle böyle değil.. 

5 Ağustos 2013 Pazartesi

ASP.NET Hazır Metodla Dizileri Karşılaştırmak


Bozuntu.. Hayal kırıklığı... Direniş... Neler yaşamadım ki o gün.. :(

Halbuki tek yapmak istediğim iki dizinin elemanlarını karşılaştırmaktı. Ve bunu yapmak için .Net'te hazır metodun mutlaka olacağını savunmaktı.. For döngülerine girmek kodlarımın yakışıklılığını bozacaktı. Buna nasıl izin verirdim? Nasıl?? (Nedense for döngülerine önceden beri gıcığım var. Elektirik uyuşmazlığı sanırım.)

İlk denediğim metot SequenceEqual  metoduydu ve ilk intibası iyiydi.. Şansına olmalı; doğru(yani istediğim gibi) çalıştı ilk başta, ama sonra veri tabanından çekip diziye attığım GUID lerin ve metoduma parametre olarak gelen dizinin GUID lerinin sırası aynı değilse SequenceEqual ın doğru(istediğim gibi :p) çalışmadığını farkettim. Yani SequenceEqual sadece sırası aynı olan dizilerde benim "istediğim gibi" çalışıyordu. (adından da belli aslında ya..)

Bu durumda ben de dizileri sıralayıp öyle SequenceEqual metodunu kullanırım diye sıralama çalışmalarına başlamıştım ki...

İlk darbe yazılım müdürümden geldi...

-Bitti mi?
-(sağa sola kafa sallayış.)
-Ne zaman biter? 
-Eee ööö.. (Ekranımda hata penceresi.)
-Bu ne, nerede takıldın?
-Yok yaa o birşey değil,, saçma birşey denedim de onun hatası.
-Bana da söyle de seninle dalga geçeyim canım sıkıldıkça. (zalımca bir sırıtış)

Ve ben kızara bozara OrderByDescending metoduyla bir türlü aynı sırada sıralanmayan GUID lerimi bir de stringe çevirip sıralamayı denediğimi açıkladım.

-Nihahaha...
-....
-.... Yoo hiç de saçma bişey denememişsin aslında ver bakayım... 
- :S
- .... Yok olmadı. Neden sıralamazsa zaten bu OrderByDescending .. Zaten sıralamak zorunda mısın ki SequenceEqual la yapma For ların içinde Contains le yap bakalım hadi. Kolay gelsin.
- :/// 

Benim Mono damarım tutmuştu bir kere, hiç öyle yapar mıydım? :P Tabii ki hayır.
Biraz daha araştırdım ve şu iki hoş metodu buldum. Bulmakla kalmadım kullandım bilee, ne haber. ;)

Şimdii, madem böyle havalanmayı başardın yine,, başlangıçta neden o kadar duygu sömürüsüylen girdin be çocuk diyebilinir.. Ama içimde kopan fırtınaları bir ben bir de Allah bilir. :( :P


  • Bulduğum metotlar;


 string[] sonuc = dizi1.Except(dizi2).ToArray();
//dizi2'de bulunup dizi1'de bulunmayan elemanları sonuç dizisine aktarır. 

string[] sonuc = dizi1.Intersect(dizi2).ToArray();
//dizi1 ve dizi2'de ortak olarak bulunan elemanları sonuç dizisine aktarır.


  • Bulduğum blog;

http://selcukpeksen.blogspot.com/2013/04/c-iki-array-karslastrlmas.html


  • Benim kullanımım;

public static Guid GetGroupId(Guid[] toPersonIdList, Guid userId)
{
   HarmonyEntities harmonyEntities = DatabaseEntities.GetEntities;

   List<Guid> allPeople = new List<Guid>();
   allPeople.Add(userId);
   foreach (var item in toPersonIdList)
   {
    allPeople.Add(item);
   }

   if (allPeople.Count == 2)
   {
   //Her grup için kişiler kontrol edilir.
   Guid[] allPeopleId = allPeople.ToArray();

   var groups = (from p in harmonyEntities.VDB_ASSET_RELATIONS
                 where allPeopleId.Contains(p.GUID_ASSET_Y) &&
                 p.GUID_RELATION_TYPE == Structs.SMSParams.EMessageGroupRT &&
                 p.PRM1 == 1
                 select p.GUID_ASSET_X).Distinct().ToArray();

   foreach (var grup in groups)
   {
    //prm1 i -1 e çekilmiş kayıt varsa 2 kişinin grubu o grup değildir..
    var peopleList = (from p in harmonyEntities.VDB_ASSET_RELATIONS
                      where p.GUID_ASSET_X == grup &&
                      p.GUID_RELATION_TYPE == Structs.SMSParams.EMessageGroupRT
                      select p).OrderByDescending(p => p.GUID_ASSET_Y).Select(p => p.GUID_ASSET_Y).Distinct().ToArray();

    //Eğer dizilerde farklı eleman yoksa o grup numarasını döndür.
    if (peopleList.Except(allPeopleId).ToArray().Count() == 0)
    {
    return grup;
    }
    else
    {
    continue;
    }
    }

    }
  //Eğer mevcut grup bulunamadıysa yeni grup insert edilir.
  return CreateNewGroup(userId, allPeople.ToArray());
}
  • SequenceEquals ın örnek kullanımı;


int[] a = new[] { 3, 5, 6, 8, 9, 3 };

int[] b = new[] { 3, 5, 6, 8, 9, 3 };


bool esitMi = a.SequenceEqual(b);


  • Postun Sonu;


Hayırlı işler, bol kazançlar, Sevgiler, Saygılar..

Bir de iyi bayramlar.
Büyüklerimin ellerinden öpüp içimden keşke hâlâ bana harçlık veren olsa diye geçirip, küçüklerimin yanaklarını sıkıp saçlarını karıştırıp, yaşıt hemcinslerimle sarılıp, karşı cinse başımı hafifçe eğip yan yan sırıtıp, yabancılara da biraz mesafeli bir tavırla bayramınız mübareeek olsunn deyiip,, bu postu noktalıyorum. :))