Özgür Özvarış

Bir yazılımcının kırık dökük dünyası

Windows scroll message problem

clock Şubat 29, 2016 18:12 by author OzgurOzvaris

Merhaba, 

Eğer sizinde eski bazı kullandığınız yada yazdığınız programlarda mouse ile scroll bar problemi yaşıyorsanız işte size çok pratik bir çözüm.

Scroll Wheel Fix for VB6 (and others!) link


Sadece bir exe file ile çalışıyor. VB6ScrollwheelFix.ini dosyasına problemi programınızla ilgili bir bölüm açmanız yeterli. Örneğin bizdeki Erwin programı için şöyle bir statır ekledim. 

[Erwin]

Process=MMOPN32.exe

WindowClass=ErwDiagramView

ParentWindowClass=

VertMsgCount=3

HorzMsgCount=3

 

Process ismini almak için görev yöneticisinde uygulamanızı seçip process'e git diyerek exe sini öğrenebilirsiniz.

WindowsClass name içinde visual studionun Spy++ tool'unu kullandım. Sizde bu yoksa free bir class gösterici program kullanmanız gerekebilir.

İyi çalışmalar.



LinqKit Linq dynamic sql parameter

clock Şubat 11, 2016 13:47 by author OzgurOzvaris

Merhaba Arkadaşlar,

Kaynaklar

What is LINQKit?

Dynamically Composing Expression Predicates

How does PredicateBuilder work

linqpad - adding reference to assembly to using custom types

How does LINQPad reference other classes

Building LINQ Queries at Runtime in C#

LinqPad adds an S to the end of every table

Writing Methods and Classes in LINQPad

Entity Framework te Linq ile yapacağınız geliştirmelerde. ilk karşınıza çıkacak zorluklardan bir tanesi dinamik olarak parametre eklemek.

LinqPad malumunuz uzun süredir linq cümleleri geliştirmek için kullanılan bir araç. Gerek database bağlantılı gerekse database bağlantısı olmadan linq sorgularının çıktılarını inceleyebiliryorsunuz. Bu bloğu sanki LinqPad ile ilgili bası basamakları biliyormuşsunuz gibi bazı ön kabullerle başlayacağım. Bu Ön kabuller.

1 - Temel Linq bilgisi

2 - LinqPad download ve install edilmesi

3 - Database connection oluşturulması

Bu ön kabuller üzerinden devam ederek sizlere dinamik bir linq sorgusu nasıl geliştirilir izah etmeye çalışacağım.

LinqPad adresinden gerekli setup işlemlerini yapıyor ve LinqPad'i açıyorsunuz

 

- Öncelikli olarak Sol menüdeki Add Connection bölümünü tıklayarak connection oluşturmanız gerekmektedir.Default linki kullanarak devam et diyerek connection kurabilirsiniz. (Güncelleme 25.04.2016 )Connection oluştururken "Pluralize" seçeneğinin açık olup olmadığını dikkat edin. Ben kapalı olarak kullandığım için bir müddet neden Expandable komutum çalışmadı diye zaman harcadım. Meğerse tablo adının sonuna "s" eklemiş

 

- Şimdi sıra geldi dinamik parametreler eklememize yardımcı olan LinqKit dll'ini yüklemeye. Bu dll'i nuget yada What is LINQKit? makalesinin altındaki download linki ile yükleyebilirsiniz. 

-  LinqKit kurduğunuz yerden LinqPad'a refernce olarak eklemeniz gerekmektedir. Bunun için F4 Tuşuna basmalısınız. Karşınıza Add Reference penceresi çıkacak. Browse seçilerek LinqKit işaret edildikten sonra, Additional Namespace inmport bölümünden LinqKit adı yazılarak LinqPad'in artık LinqKit'i tanıması sağlanır.

 

- Daha sonra Language seçmelerinden c# statements seçmelisiniz.

 

Ben kendi örneğimde FSYS_USERS tabloma OnlyActive User parametresini test ettim. Siz kendi tablolarınızı çağırarak test yapabilirsiniz. Bu arada Context adı yazmadan direk olarak tablo adı yazdığıma dikkat edin.

var OnlyActiveUsers = true;
Expression<Func<FSYS_USERS, bool>> FSYS_USERSPredicate = p1 => true;

            if (OnlyActiveUsers)
            {
                FSYS_USERSPredicate = FSYS_USERSPredicate.And(z => z.FSTATUS == 'A');
            }
			
var x = from c in FSYS_USERS.Where(c => true).Where(FSYS_USERSPredicate).OrderBy(o=> o.ADSOYAD)
                    select c;

 //           x.ToList();
 
 x.Dump();

 

Yukarıdaki örnekte Eğer OnlyActiveUsers set edilirse linq cumlesine bir predicate daha ekleniyor. Run tuşuna basarak aşağıdaki tablardan dönüş değerlerini, sonuçta oluşan dinamik linq cümlesini ve sql'e giden cümleyi görebilirsiniz. Dump Komutu LinqPad'in aşağıda listeyi görebilmenizi sağlayan bir Extension komutu. ToList'ini alıp aşağıda sonuç tabloayu görmenizi sağlıyor.

Burada gerekli testleri yaptıktan sonra artık sonuç fonksyonumuzu oluşturabiliriz.

public IEnumerable<FSYS_USERS> GetActiveUsersShortInfo(bool OnlyActiveUsers)
        {
            //var FSYS_USERSPredicate = PredicateBuilder.True<FSYS_USERS>();

            //if (OnlyActiveUsers)
            //{
            //    FSYS_USERSPredicate.And(z => z.FSTATUS == "A");
            //}

            //var x = from c in MasterContext.FSYS_USERS.AsExpandable().Where(FSYS_USERSPredicate.Compile())
            //        select c;

            Expression<Func<FSYS_USERS, bool>> FSYS_USERSPredicate = p1 => true;

            if (OnlyActiveUsers)
            {
                FSYS_USERSPredicate = FSYS_USERSPredicate.And(z => z.FSTATUS == "A");
            }

            var x = from c in MasterContext.FSYS_USERS.AsExpandable().Where(c => true).Where(FSYS_USERSPredicate.Compile()).OrderBy(o=> o.ADSOYAD)
                    select c;

            return x.ToList();
        }

 

Bu şekilde tam olarak dinamik bir parametreyi Entity Framework yapımıza eklemiş olduk. Method daki AsExpandable ve Compile komutları LinqKit aracılığı ile gelen extension komutlar.

(Güncelleme 25.04.2016) Eğer c# statement linq cümlesinde bir class yada method kullanmak isterseniz. Bunuda düşünmüşler :) tek yapmanız gereken statement sonunda "}" ile linq bölümünü eklemek ve ardına istediğiniz kadar method ve class ekleyebilirsiniz. Writing Methods and Classes in LINQPad Burada detaylı bir şekilde anlatıyor. Denedim çok güzel çalışıyor.

 

İyi çalışmalar.



Sql tablo kolon listesi alma

clock Şubat 9, 2016 10:02 by author OzgurOzvaris

Merhaba Arkadaşlar,

Bir kaç pratik sql scriptini yeni açtığım kategoriye eklemeye karar verdim.

Sql server database altındaki tablo listesini almak için database seçilir.

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.Tables

Sql server tablo kolon listesini alma

 

SELECT 
    c.name 'Column Name',
    t.Name 'Data type',
    c.max_length 'Max Length',
    c.precision ,
    c.scale ,
    c.is_nullable,
    ISNULL(i.is_primary_key, 0) 'Primary Key'
FROM    
    sys.columns c
INNER JOIN 
    sys.types t ON c.user_type_id = t.user_type_id
LEFT OUTER JOIN 
    sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id
LEFT OUTER JOIN 
    sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id
WHERE
    c.object_id = OBJECT_ID('YourTableName')

 Herkese İyi çalışmalar.



Dynamic type ile json deserialize etme

clock Aralık 23, 2015 10:39 by author OzgurOzvaris

Merhaba,

Bazen size gelen json data bir servis sağlayıcıdan geliyorsa tamamını deserialize etmek nerede ise imkansız olur. Böyle bir durumda dynamic type'ini kullanarak ihtiyacınız olan veriye daha kolay ulaşabilirsiniz.

 dynamic dd = JsonConvert.DeserializeObject(txtResponseData.Text); 

 clsWeather_Forcast09_Result Weather_Forcast09_Result = new clsWeather_Forcast09_Result(); 

 Weather_Forcast09_Result.Weather_Forcast = new List<clsWeather_Forcast09_Result.clsWeather_Forcast>();  

 clsWeather_Forcast09_Result.clsWeather_Forcast   Weather_Forcast = new clsWeather_Forcast09_Result.clsWeather_Forcast(); 

 foreach (dynamic forecastday in dd.forecast.simpleforecast.forecastday) 

 { 

     Weather_Forcast = new clsWeather_Forcast09_Result.clsWeather_Forcast(); 

     Weather_Forcast.ForcastDate = forecastday.date.day.ToString() + "/" + forecastday.date.month.ToString() + "/" + forecastday.date.year.ToString(); 

     Weather_Forcast.highCelsius = decimal.Parse(forecastday.high.celsius.ToString()); 

     Weather_Forcast.lowCelsius = decimal.Parse(forecastday.low.celsius.ToString()); 

     Weather_Forcast.highFahrenheit = decimal.Parse(forecastday.high.fahrenheit.ToString()); 

     Weather_Forcast.lowFahrenheit = decimal.Parse(forecastday.low.fahrenheit.ToString()); 

     Weather_Forcast09_Result.Weather_Forcast.Add(Weather_Forcast); 

 }

Bu yöntem c# ta tamamen ihtiyaç çözüyor. Ancak vb.net te yine tökezlerseniz. şu yöntemi kullanabilirsiniz.Kaynak için http://stackoverflow.com/questions/20079177/deserializing-json-in-visual-basic bakabilirsiniz. Aşağıdaki kod bloğu size biraz uzun gelebilir. Parça paça dynamic vb typlerı ile ulaşmak istediğim noda ulaşıyorum. daha sonra bir dizi şeklindeki node dan for loop ile dönerek istediğim değerleri topluyorum. Çalışan bir koddur kendim kullandım.

Dim tempforecast = New With {Key .forecast = New Object} 

Dim sFile As String = SimpleTools.RWFile.ReadFile("c:\\testjson\\test.json") 

Dim root = JsonConvert.DeserializeAnonymousType(sFile, tempforecast) 

Dim tempsimpleforecast = New With {Key .simpleforecast = New Object} 

Dim forecast = JsonConvert.DeserializeAnonymousType(root.forecast.ToString(), tempsimpleforecast) 

Dim templstforecastday = New With {Key .forecastday = New Object} 

Dim simpleforecast = JsonConvert.DeserializeAnonymousType(forecast.simpleforecast.ToString(), templstforecastday) 

Dim lstforecastday = simpleforecast.forecastday 

'Dim com As String = post.com 

Dim Weather_Forcast09_Result As New clsWeather_Forcast_09.clsWeather_Forcast09_Result 

Dim Weather_Forcast As New clsWeather_Forcast_09.clsWeather_Forcast09_Result.clsWeather_Forcast 

'DirectCast(DirectCast(dd.forecast,Object).simpleforecast,Object).forecastday 

'For Each forecastday In dd.forecast.simpleforecast.forecastday 

For Each jforecastday In lstforecastday 

    Weather_Forcast = New clsWeather_Forcast_09.clsWeather_Forcast09_Result.clsWeather_Forcast() 

    'Dim tempforecastday = New With {Key .jforecastday = New Object} 

    'Dim forecastday = JsonConvert.DeserializeAnonymousType(jforecastday.ToString(), tempforecastday) 

    Dim tempDate = New With {Key .date = New Object, .high = New Object, .low = New Object} 

    Dim forecastday = JsonConvert.DeserializeAnonymousType(jforecastday.ToString(), tempDate) 

    Dim tempDateDetail = New With {Key .day = "", .month = "", .year = ""} 

    Dim fcDateDetail = JsonConvert.DeserializeAnonymousType(forecastday.date.ToString(), tempDateDetail) 

    Weather_Forcast.ForcastDate = fcDateDetail.day.ToString() + "/" + fcDateDetail.month.ToString() + "/" + fcDateDetail.year.ToString() 

    Dim temphighDetail = New With {Key .celsius = "", .fahrenheit = ""} 

    Dim highDetail = JsonConvert.DeserializeAnonymousType(forecastday.high.ToString(), temphighDetail) 

    Dim templowDetail = New With {Key .celsius = "", .fahrenheit = ""} 

    Dim lowDetail = JsonConvert.DeserializeAnonymousType(forecastday.low.ToString(), templowDetail) 

    Weather_Forcast.highCelsius = Decimal.Parse(highDetail.celsius.ToString()) 

    Weather_Forcast.lowCelsius = Decimal.Parse(lowDetail.celsius.ToString()) 

    Weather_Forcast.highFahrenheit = Decimal.Parse(lowDetail.fahrenheit.ToString()) 

    Weather_Forcast.lowFahrenheit = Decimal.Parse(lowDetail.fahrenheit.ToString()) 

    Weather_Forcast09_Result.Add(Weather_Forcast) 

Next 

oWeather_Forcast_09.Weather_Forcast09_Result = Weather_Forcast09_Result

İyi çalışmalar.

 



Hangi w3wp.exe hangi iis Application pool'a ait

clock Kasım 25, 2015 11:07 by author OzgurOzvaris

Merhaba Arkadaşlar,

Kaynaklar

1 -http://blogs.msdn.com/b/friis/archive/2009/10/22/which-w3wp-exe-pid-corresponds-to-which-application-pool.aspx

2 - http://forums.iis.net/t/1159427.aspx?Can+Not+Find+IISAPP+VBS+for+IIS+7

3 - http://www.iis.net/learn/get-started/getting-started-with-iis/getting-started-with-appcmdexe 

 

iis üzerindeki poollarda gözlem yapabilmeniz için öncelikle pool'un proccess id sini elde etmeniz gerekiyor.

 

Eğer windows 2012'den aşağı bir sürüm ile çalışıyorsanız 1. link işinizi görecektir.

%windir%\system32\ yada %windir%\system32\inetsrv\ klasörlerinde  iisapp.vbs scriptini çalıştırmanız yeterli olacaktır.

Eğer windows 2012 ve üzeri iseniz 2. ve 3. link işinize yarayacaktır  appcmd.exe kullanılıyor

worker process pid sini almak için kullandığım komutun son şekli

C:\Windows\System32\inetsrv>appcmd list wp

İyi çalışmalar.



Process Monitor ve Process Explorer arasındaki fark nedir

clock Kasım 25, 2015 10:55 by author OzgurOzvaris

Merhaba Arkadaşlar,

İki yazılım çoğunuzun arada bir muhakkak işinize yarıyordur biri Process Monitor diğeri Process Explorer peki bunlardan hangisini tercih etmeliyiz.

Bu makale güzel bir özet yapmış.

http://www.windowsnetworking.com/kbase/WindowsTips/Windows7/AdminTips/Admin/ProcessMonitorversusProcessExplorer.html 

Process Monitor is a real-time troubleshooting tool. This tool will display information regarding the file system, registry, and the processes running on the system as they are occurring. You can think of this as a combination of the old FileMon and RegMon tools with some basic diagnostic features.

Process Explorer is considered to be a more advanced form of the Windows Task Manager. Using it you can find out what files, DLLs, and registry keys particular processes have open and the CPU and memory usage of each.

In daily use I often start with Process Explorer to find processes which are consuming a lot of system resources and then move to process monitor to dig deeper into these processes. If it’s worth the time to use one of these tools then it’s probably worth the time to use both, and you will commonly find yourself doing this.

Başka söze ne hacet.

İyi çalışmalar.



Windows explorer crash olursa

clock Kasım 19, 2015 17:29 by author OzgurOzvaris

Merhaba arkadaşlar,

Windows explorerırınız crash olursa en kestime yol task managerdan explorer.exe nin processinine end task demek. Bu işlemi yaparsanız task bar görüntüden gidecektir bu durumda tekrar task managerden new task deyip explorer.exe yi çalıştırmak gerekmektedir.

 

İyi çalışmalar.



Doğru nedir Hakikat/Gerçek nedir?

clock Ekim 19, 2015 10:06 by author OzgurOzvaris

Merhaba Arkadaşlar,

Aslında bu blog sayfasında düşünce yazılarıma yer ayırayım istemiyordum sadece teknik konuları yazayım istiyordum. Ancak bu yazıyı yazmam icap etti fakat bir türlü uygun bir ortam bulamayınca mecburen burada kaleme almak durumunda kaldım.

 

 

Kısaca bahsedersek yukarıda gördüğünüz gibi su içinde gördüğünüz bir pipet size kırık gözükür. İşte bu algıdır ve doğrudur işte bu bakışla pipet kırıktır diyen kişi yalan söylemiyor hatta doğru söylüyor. Çünkü hayatı anlamada en önemli organlarından biri olan gözü ona kalemi kırık gösteriyor.

Peki pipet suyun dışına çıkarılırsa ne olur? Pipetin suyun dışında dümdüz olduğu görülür ve hakikat yani gerçek kalemin düz olduğudur.

İşte asıl sorular burada başlayacaktır. Pipet bir örnekti.

1 - Pipeti her zaman doğduğundan beri suyun içinde gören bu insan, pipeti hayatı boyunca sadece suyun içinde görse hiç dışarıda göremeseydi  ne olacaktı?

2 -  1. madde de tarif edilen insanın karşısına pipeti suyun dışında görmüş birisi gelip yanılıyorsun ben pipeti suyun dışında gördüm o düzdür deseydi nasıl davranacaktı?

3 - Pipeti suyun dışında görmüş hakikate ermiş olan bilge insan, 1. maddede kiinsanlarla yani pipeti sadece suyun içinde görmüş insanların yaşadığı bir topluluğu içinde nasıl yaşayacak?

4 - Kendinin pipetin eğik olduğuna ve bu pipeti eğikliğini yaymaya kendine dava edinenler, yıllarını bu dava yolunda harcamış, hatta belki akademik kariyerler yaparak türlü türlü toplum içinde makam ve mevki, mal, mülk, şan, şöhret edinenler bu hakikate erseydi nasıl davranacaktı? Hemen kabullenebilecek ve hayata sıfırdan başlayabilecekler miydi?

Pipet elbetteki burada bir temsil. Kategorilerde elbette çok kalın ve uçları temsil ediyor ara formlarda bir çok kategori oluşturulabilir. Temsilden amaç hayatın içinde doğru bildiğimiz ne kadar eksik doğrular hatta yanlışlar var bunu anlatmanın mütevazi bir örneği.

Elbette her aykırı görüş sahibi 3. kategorideki bilgi insan değildir. Hakikate erdiğini sanan nice 4. kategoride divaneler vardır. Birde hakikat diye bulduğu çamur ile halden hale girip, bulduğu çamuru altın diyerek türlü ambalajlarla, birilerine sürmeye çalışır. Kendinin hakikat eri olduğunu söyler oysaki hakikat nerde, sen nerde. 

Allah bizi hakikate erdirsin.

İyi çalışmalar.

 

 

 



Javascript object / Array clone

clock Ekim 7, 2015 15:58 by author OzgurOzvaris

Merhaba arkadaşlar,

Eğer javascripte bir diziyi yada bir objeyi başka bir diziye eşitlerseniz reference type olduğu için clone yapmış olmazsınız. Farklı clone lama yöntemleri var. Sizlerle beğendiğim bir tanesini paylaşacağım.

function clonex(arry) {

    if (Object.prototype.toString.call(arry) === '[object Array]') {
        var clone = [];
        for (var i = 0; i < arry.length; i++)
            clone[i] = clonex(arry[i]);

        return clone;
    }
    else if (typeof (arry) == "object") {
        var clone = {};
        for (var prop in arry)
            if (arry.hasOwnProperty(prop))
                clone[prop] = clonex(arry[prop]);

        return clone;
    }
    else
        return arry;
}

İyi çalışmalar.



Mvc de view ların ayrı dll den gelmesi

clock Eylül 30, 2015 13:33 by author OzgurOzvaris

Merhaba Arkadaşlar,

Bu seferki yazımızda mvc ile ilgili biraz derin bir konudan bahsedeceğiz. Viewların başka dll lerden çağırılması. Malum microsoft mvc projeleri biraz beklenen performansta gelişmiyor. Scoot gu nun bir sunumu ile başlayan microsoftun mvc macerası herkesin ağzının suyunu akıttıktan sonra ne yazıkki diğer birçok microsoft projesi gibi beklenen heyecanla devamı getirilmedi. Microsoftta development dünyasında ki bu genel durgunluk nereye varır bilinmez ancak biz geliştiriciler yine müşteri beklentilerini karşılamak adına çoğu zaman kendi yollarımızı açmak durumunda kalıyoruz.

Standart mvc yapısında herşey aynı proje içinde oluşturulan folderlar üzerinde yapılandırılmış durumda oysaki en basit anlamda bir projenin temel olarak DDD yani Domain Driven Design pattern ile yapılandırılmış projenin en basit anlamda UI (User Interface), BL (Bussiness Layet), DAL (Data Access Layer) katmanları ile yapılandırıldığı var sayılırsa MVC sinin bu her şeyi içine gömülü tek proje mantığı hiçte iş görmeyecektir.

 

Basit bir kaç yöntemle bu yapıyı şu yapıya çevirmek mümkün

 

 

Ancak Büyük bir projeye talipseniz ve projeniz bir çok modülden oluşuyorsa o zaman bu yapıda yeterli olmayacaktır her modülünüzün kendi için de viewlarını conrollerlarını ve bussiness layerlarını barındırması gerekecektir. Bu durumda aşağıdaki makaleler size yol gösterecektir kanaatindeyim.

Compile your asp.net mvc Razor views into a seperate dll

How to create ASP.NET MVC area as a plugin DLL?

http://maxtoroq.github.io/2012/02/aspnet-mvc-plugins.html

https://github.com/RazorGenerator/RazorGenerator

Herkese İyi çalışmalar.



Hakkımızda  AboneOl 

Blog Yayınımıza Hoşgeldiniz.

Month List

RecentPosts

Sign In