Sayfalar

Translate Blog

3 Kasım 2012 Cumartesi

Php Türkçe Karakter, Session veya Header Hataları Çözümü

Birçok kişi web sitesi yaparken karakterlerinde sorun yaşıyor, ben de senelerdir bu işin içindeyim bir türlü ders alıp da sağlam bir yol tutturamamışım demek ki ki  bu yazıyı yazmak zorunda kaldım.

Konumuz web sayfalarında ekrana gelen session_start veya Header Already Send gibi hataların nedenleri. Öncelikle şu bilgiyi vereyim Header ile yönlendirme yapıyorsanız sayfanızda header dan önce herhangi bir yazı olmamalı. Herşeyi düzgün yaptınız ama anlamadığınız bir şekilde hala bir hata var.

Evet anlaşılmaz bir şekilde sayfanızın alakasız satırlarında hata veriyor değil mi?
Bunun nedeni sayfanızın karakter kodlamasındaki hata. UTF8 kullanılır genelde, veritabanınız da utf 8dir. mysql bağlantınızıda utf8 yapmışınızdır. Hatanın nedeni ise BOM denilen bir karakter yapısından kaynaklanıyor. Dreamweaver kullananlar için resimde gördüğünüz kutucuğu seçmiş olabilirsiniz, onu kaldırın. Böylelikle sizin gözle göremediğiniz ama kodlarınızın arasına, mesela <?php kodunun arasına yerleşen boşluk karakterini ortadan kaldırmış olacaksınız.

Bomu neden seçmiş olabilirsiniz, Türkçe karakterde sorun yaşıyorsunuz diye değiştirmiş olabilirsiniz. Yapmayın. Bazen Türkçe karakter sorunun çözmek kodlarınızı kopyalayıp yeni boş bir belgeye kaydederek çözülebilir.

Sayfanızda ez_sql kullanıyor olabilirsiniz. Türkçe karakter sorunu yaşamanız çok yüksek, mysql bağlantısı yaptığınız belgede bağlantı kodunuzun altına $db->query("SET NAMES 'utf8'"); ekleyin. Belgelerinizi ve veritabanınızın dilini her zaman UTF8 olarak kullanın. Bir sorun yaşamazsınız. Yaşarsanız belgenizin içini kopyalayın yeni belge açıp yapıştırıp UTF8 olarak kaydedin ;)

Tecrübe ile sabittir. Bom konusunda engin bilgisini paylaşan Adil YILDIZ dostuma teşekkürler. Bom hakkında daha detaylı bilgiyi buradan alabilirsiniz.




27 Ekim 2012 Cumartesi

C# ile Bilgisayar Uyku Modu Tespiti (Idle Time)

Birçok yerde aradım, bulamadım. Siz arayıp da bulamazsınız diye buraya koyuyorum ;) Bir kaç yöntem vardı aslında ama sanırım en basiti bu yöntem olsa gerek. Şu linkte bulunan kardeşler bizim için bir class hazırlamışlar. Bize de çöreklenmek düşer.

Bir uygulama hazırlıyorsunuz ve uygulamanız bilgisayar kullanılmadığı anı tespit etmesi gerekiyor, paylaşacağım örnekte ise bilgisayarın kullanılmadığı, farenin klavyenin basılmadığı süreleri sayıyor.

Aşağıdaki örnekte bir textbox var, timer var, listbox var. Using kısmına fazladan
using System.Runtime.InteropServices;
eklenmiş. Formunuza eklediyseniz aşağıdaki kodu olduğu gibi C# form koduna yapıştırın. Çalıştırdığınız zaman fare veya klavyeye dokunduğunuzda aşağı sayan sayılar tekrar sıfırlandığını göreceksiniz.

Class içinde bulunan Win32.GetIdleTime() ile o anki durumu alabiliyoruz, yani "bilgisayar boşta" durumunun süresini elde edebiliyoruz. Bir if ile rahatlıkla bu sınırı kendiniz belirleyebilirsiniz. Aşağıdaki örnekte bilgisayarın kullanılmadığı yaklaşık 1dk lık (60000) süre dolunca textbox'a Uyku modeu diye yazıyor.

Peki bu kodu nasıl kullanabilirsiniz, bilgisayarın uyku modunu siz ayarlayacaksınız, diyelim 10dk. Programınızda da bu süreyi belirteceksiniz, 10dk kadarlık süre geçtiyse ki bu yaklaşık 1014*60sn*10dk yaklaşık 600000 sayısı eder. bu sayıyı geçtiyse bilgisayar uyku moduna girmiştir yahu, kullanıcıyı uyarayım artık dedirtebilirsiniz.

Ben bunu nerede kullanacam ne işime yarayacak ki demeyin, bilgisayarlara kullanıcı girişi hazırlıyorsanız mysql ile kullanıcı kontrol girişli, ve adam çıkış yapmadan bilgisayardan kalktıysa boşta kalmasın pc, kullanıcı hesabını kapatsın diye yapabilirsiniz mesela. Eğer kodunu biliyorsanız belirlediğiniz sürede bilgisayarı kapatabilir, uykuya da alabilirsiniz.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
//using Microsoft.Win32;
namespace uykuModu
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
       

private void timer1_Tick(object sender, EventArgs e)
        {
            listBox1.Items.Add(Win32.GetIdleTime().ToString());
            if (Win32.GetIdleTime() > 60000)
            {
                textBox1.Text = "UYKU MODUNA GEÇ";
            }
        }
    }


   // KLAVYE FARE HAREKETLERİ TESPİTİ
    internal struct LASTINPUTINFO
    {
        public uint cbSize;
        public uint dwTime;
    }
    public class Win32
    {
        [DllImport("User32.dll")]
        public static extern bool LockWorkStation();
        [DllImport("User32.dll")]
        private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
        [DllImport("Kernel32.dll")]
        private static extern uint GetLastError();
        public static uint GetIdleTime()
        {
            LASTINPUTINFO lastInPut = new LASTINPUTINFO();
            lastInPut.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(lastInPut);
            GetLastInputInfo(ref lastInPut);
            return ((uint)Environment.TickCount - lastInPut.dwTime);
        }
        public static long GetTickCount()
        {
            return Environment.TickCount;
        }
        public static long GetLastInputTime()
        {
            LASTINPUTINFO lastInPut = new LASTINPUTINFO();
            lastInPut.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(lastInPut);
            if (!GetLastInputInfo(ref lastInPut))
            {
                throw new Exception(GetLastError().ToString());
            }
            return lastInPut.dwTime;
        }
    }
}

23 Ekim 2012 Salı

C# ile Firefoxtan Adresleri Almak / How to Capture Urls From Firefox


[ENG]
Maybe this code can help to obtain Firefox url adress; I use this code to capture uniq adresses from firefox and add to listbox. You can use this with safari too.
You must add NDde.dll to your project, To do this go to solution explorer rigth clik to References-> add Reference->Browse-> find that DLL (http://ndde.codeplex.com/ from binary folder.))

[TR]
Aşağıdaki kod C# kullanarak Firefox tarayıcısında girilen sayfaları listboxa ekler. Bunu timer aracılığı ile her 5sn de bir kontrol ederek yapıyor.
Kodları çalışması için NDde.dll isimli kütüphaneyi referanslarınıza eklemeniz lazım. http://ndde.codeplex.com/ adresinden kütüphaneyi indirin. Binary klasöründe Dll dosyasını bulacaksınız. C Sharp projenize gelin, Solution Explorer->References->Sağ Klik->Add Reference->Browse-> DLL dosyasını seçin ve ekleyin.
Sahnede 1 buton, 1 listbox ve 1 timer var.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using NDde.Client;

namespace WindowsFormsApplication9
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true;
        }

        private string GetBrowserURL(string browser)
        {
            try
            {
                DdeClient dde = new DdeClient(browser, "WWW_GetWindowInfo");
                dde.Connect();
                string url = dde.Request("URL", int.MaxValue);
                string[] text = url.Split(new string[] { "\",\"" }, StringSplitOptions.RemoveEmptyEntries);
                dde.Disconnect();
                return text[0].Substring(1);
            }
            catch
            {
                return null;
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            int j=0;
            for (int i = 0; i < listBox1.Items.Count; i++)
            {
                if (listBox1.Items[i].ToString() == GetBrowserURL("Firefox"))
                {
                    break;
                }
                else
                {
                    j++;
                }
            }
            if (j == listBox1.Items.Count)
            {
                listBox1.Items.Add(GetBrowserURL("Firefox"));
            }
        }
    }
}