C# Süper hızlı kelime benzerlik kıyaslama algoritması: SIFT3 Algorithm

Zaman zaman farklı dillerde yazılış algoritmaları C# ile yazıyorum. Bu algoritma ile Google’da olduğu gibi “Bunu mu demek istediniz”  şeklinde bir sistem oluşturabilirsiniz.

Örnek kullanım;

Sift3(“yasin”, “rasim”, 5)

Çıktı : 2, yani iki kelime arasındaki fark sayısı
yasin, rasim

 

// @yasinkuyu
// 27/04/2014

/// <summary>
/// Super Fast and Accurate string distance algorithm: Sift3 in C#
/// </summary>
/// <param name="s1">string source</param>
/// <param name="s2">string target</param>
/// <param name="maxOffset"></param>
/// <returns></returns>
public static float Sift3(string s1, string s2, int maxOffset)
{

    if (string.IsNullOrEmpty(s1))
        return ((string.IsNullOrEmpty(s2)) ? 0 : s2.Length);

    if (string.IsNullOrEmpty(s2))
        return s1.Length;

    int c1 = 0, c2 = 0, lcs = 0;

    while ((c1 < s1.Length) && (c2 < s2.Length))
    {
        if (s1[c1] == s2[c2])
        {
            lcs++;
        }
        else
        {
            for (int i = 1; i < maxOffset; i++)
            {

                if ((c1 + i < s1.Length) && (s1[c1 + i] == s2[c2]))
                {
                    c1 += i;
                    break;
                }

                if ((c2 + i < s2.Length) && (s1[c1] == s2[c2 + i]))
                {
                    c2 += i;
                    break;
                }
            }
        }
        c1++;
        c2++;
    }
    return ((s1.Length + s2.Length) / 2 - lcs);
}

Github üzerinden takip için
https://gist.github.com/yasinkuyu/11350516

Python ile ilgilenenler için SIFT3 Python versiyonu;
https://gist.github.com/fjorgemota/3067867

Data is Null. This method or property cannot be called on Null values Hatası ve Çözümü

Veritabanı işlemlerinde en sık karşılaşılan hatalardan biri null değerin gelmesi ve bu değerin işlenememesidir. Bu hatanın önüne data reader ile boş değer kontrolü yaparak çözebilirsiniz. Boş değeri istediğiniz bir değer ile değiştirebilirsiniz.

Eğer uyeId alanından gelen değer boş ise 0 değerini atıyoruz.

int uyeId = (reader["uyeId"] as int?) ?? 0;

Eğer sorunu SQL sorgusunda çözmek isterseniz;

SELECT ISNULL(uyeId,0) FROM uyeler;

http://www.w3schools.com/sql/sql_isnull.asp

NetDash ile Windows Sunucu Takibi

NetDash nedir?

NetDash Windows tabanlı sunucular için hazırlanmış, sunucunuza ait kritik bilgilere tek ekranda kolayca erişimine imkan veren tamamen açık kaynaklı bir sunucu yönetim yazılımıdır. NetDash ile yerel ve uzak windows makinenize erişebilirsiniz.

Projenin geliştirilmesinde C# MVC ile büyük ölçüde WMI kullanılmıştır. WMI hakkında bilgi için daha önce hazırladığım WMI makalesini inceleyebilirsiniz.

NetDash ile hangi bilgilere erişebilirim?
  • İşletim sistemi adı ve sürümü
  • Hostname bilgisi
  • Uptime süresi
  • CPU bilgileri ve kullanım oranı
  • RAM kullanım oranı
  • Disk kullanımı ve sürücüler
  • Açılış performansı
  • Sunucuya tanımlı IP adresleri
  • Sunucu trafiği
  • Disk veri yazma ve okuma grafiği
  • Çevrimiçi kullanıcılar
  • Netstat port trafiği
  • Sunucudaki aktif işlemler
  • Yerel ve uzak sunucu bilgileri
Gereksinimler

Microsoft .NET Framework 3.5 veya üstü güncel bir sürümü.

 Nerelerde çalışır?
  • Windows Server 2000
  • Windows Server 2008
  • Windows Server 2012
 Kurulum

NetDash kurulum ve kullanımı oldukça basittir. NetDash dosyasından çıkardığınız publish klasörünün içeriğini sunucuzda çalıştırmak istediğiniz sitenin ana klasörüne aktarınız. Dilerseniz github üzerinden uygulamanın son kaynak kodlarını indirerek projeyi kendiniz derleyebilirsiniz.

Yönetim erişimi için varsayılan kullanıcı adı ve parola;

   Kullanıcı adı: admin
   Parola: admin123

 

Versiyon

1.4.4

 İndir

http://www.github.com/yasinkuyu/NetDash

 

Diğer kaynaklar;

pyDash – v1.4.4
http://k3oni.github.io/pydash/

PyDash ile Linux Sunucu Takibi
http://www.mehmetince.net/pydash-ile-linux-sunucu-takibi/

C# ile WMI Kullanımı

Windows Management Instrumentation (WMI) yani Windows Yönetim Araçları. Windows ortamında uygulama geliştiriyorsanız, basit SQL sorguları ile yerel ve uzak Windows işletim sistemine ait tüm bilgilere erişilebilir. WMI için Windows ortamında derlenen hemen hemen tüm diller için referans kütüphaneleri bulunmaktadır. Bu makalemizde C# ile basit kullanım örneklerini vermeye çalışacağım.

 Select * from Win32_LogicalDisk

 

WMI Code Creator v1.0

WMI kütüphanesindeki tüm referanslardan örnek çıktılar oluşturabileceğiniz. Microsoft tarafından resmi olarak dağıtılan bir araştır. v1.0 mevcut versiyonunu aşağıdaki bağlantıdan edinebilirsiniz. WMI Code Creator ile C#, VB.NET ve VB Script için kod örnekleri alabilirsiniz. Örnek bir C# çıktısı;

 

using System;
using System.Management;
using System.Windows.Forms;
namespace WMISample
{
    public class MyWMIQuery
    {
        public static void Main()
        {
            try
            {
                ManagementObjectSearcher searcher =
                new ManagementObjectSearcher("root\\CIMV2",
                "SELECT * FROM Win32_LogicalDisk WHERE BlockSize =");

                foreach (ManagementObject queryObj in searcher.Get())
                {
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("Win32_LogicalDisk instance");
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("Access: {0}", queryObj["Access"]);
                    Console.WriteLine("Availability: {0}", queryObj["Availability"]);
                    Console.WriteLine("BlockSize: {0}", queryObj["BlockSize"]);
                    Console.WriteLine("Caption: {0}", queryObj["Caption"]);
                    Console.WriteLine("Compressed: {0}", queryObj["Compressed"]);
                    Console.WriteLine("Description: {0}", queryObj["Description"]);
                    Console.WriteLine("DeviceID: {0}", queryObj["DeviceID"]);
                    Console.WriteLine("DriveType: {0}", queryObj["DriveType"]);
                    Console.WriteLine("ErrorCleared: {0}", queryObj["ErrorCleared"]);
                    Console.WriteLine("ErrorDescription: {0}", queryObj["ErrorDescription"]);
                    Console.WriteLine("ErrorMethodology: {0}", queryObj["ErrorMethodology"]);
                    Console.WriteLine("FileSystem: {0}", queryObj["FileSystem"]);
                    Console.WriteLine("FreeSpace: {0}", queryObj["FreeSpace"]);
                    Console.WriteLine("InstallDate: {0}", queryObj["InstallDate"]);
                    Console.WriteLine("MediaType: {0}", queryObj["MediaType"]);
                    Console.WriteLine("Name: {0}", queryObj["Name"]);
                    Console.WriteLine("NumberOfBlocks: {0}", queryObj["NumberOfBlocks"]);
                    Console.WriteLine("PNPDeviceID: {0}", queryObj["PNPDeviceID"]);
                    Console.WriteLine("QuotasDisabled: {0}", queryObj["QuotasDisabled"]);
                    Console.WriteLine("QuotasIncomplete: {0}", queryObj["QuotasIncomplete"]);
                    Console.WriteLine("QuotasRebuilding: {0}", queryObj["QuotasRebuilding"]);
                    Console.WriteLine("Size: {0}", queryObj["Size"]);
                    Console.WriteLine("Status: {0}", queryObj["Status"]);
                    Console.WriteLine("StatusInfo: {0}", queryObj["StatusInfo"]);

                    Console.WriteLine("SystemName: {0}", queryObj["SystemName"]);
                    Console.WriteLine("VolumeDirty: {0}", queryObj["VolumeDirty"]);
                    Console.WriteLine("VolumeName: {0}", queryObj["VolumeName"]);

                }
            }
            catch (ManagementException e)
            {
                MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
            }
        }
    }
}

WMI Code Creator v1.0 indirme bağlantısı
http://msdn.microsoft.com/en-us/library/aa394582(VS.85).aspx

Python ile ilgilenenler için wmi
http://timgolden.me.uk/python/wmi/tutorial.html

Access forbidden! Xampp Hatası

Access forbidden!

You don’t have permission to access the requested directory. There is either no index document or the directory is read-protected.

If you think this is a server error, please contact the webmaster.

Error 403

Apache/2.4.7 (Win32) OpenSSL/1.0.1e PHP/5.5.9
 Xampp ile çalışırken bu hatayı alıyorsanınız çözüm basit. Aşağıdaki adımları takip edin.
“(KURULUM YOLU)/xampp/apache/conf/extra/httpd-xampp.c­onf” bu dosyanın içerisinde

<Directory “D:/DEV/xampp/php”>
AllowOverride None
Options None
Require all denied
<Files “php-cgi.exe”>
Require all granted
</Files>
</Directory>

bu satırı
<Directory “D:/DEV/xampp/php”>
AllowOverride None
Options None
Allow all denied
<Files “php-cgi.exe”>
Require all granted
</Files>
</Directory>

bu satır ile değiştirin.

Son olarak apache‘ye restart atın ve sayfasını yenileyin. Hatanın ortadan kalktığını göreceksiniz.

Kaynak: http://httpd.apache.org/docs/2.2/howto/access.html