Volkan Atasever

mühendislik, edebiyat, retro computer, yazılım, şiir, nümismatik, bilişim, podcast ve daha bir çok yazılarım...

Sağ kalan en son kişi!

clock Kasım 10, 2009 22:50 by author Volkan Atasever

Bu yazımda N sayıda kişiden oluşan bir toplulukta her kişinin kendinden bir sonraki kişiyi ekarte sorunun orjinalinde geçen tanımlamasıyla öldürmesinden oluşmakta. Bizim bu problemde yapmamız istenen ise en son sağ kalan kişiyi bulmamız. Bu döngü bir kişi kalana kadar devam etmektedir. Aşağıdaki grafikte bu probleme yönelik bir grafiği görebilirsiniz. Bu mantıkta oluşan kişileri çember şeklinde düşünmemiz problemin çözümü açısından bize bir avantaj sağlamaktadır. C# ile bu işlemi çözerkende en basit ve yalın çözüm yolunu kullanmayı tercih ettim.

Aşağıda problemi çözerken kullandığım kullanıcı arayüzünü uygulayabilirsiniz. Konsoldan çalışmak bazen hız ve zaman açısından verimliliği tartışılamaz fakat problemlere daha modern bir arayüz katmak benim her zaman kullandığım bir yöntem.

 

N sayıda kişi arasından kaç kişinin çember içinde sağ kaldığını öğrenmemiz için giriş olarak sadece çemberde kaç kişi olduğunu yazmamız yeterli.

Butonumuza tıkladığımız zaman bu problemin çözümünü yazdığımız kod bloğu çalışacak ve bize sonucu bir message box aracılığıyla verecektir.

Kod bloğumuz;

     int kisisayi = Convert.ToInt32(textBox1.Text);

     bool ol = false;

     int sag=0;     int[] kisi = newint[kisisayi];

 

     int hepsi = kisisayi;

     for (int i = 0; i < kisisayi; ++i)

           kisi[i] = 9;//initial deger

     do

     {

           for (int i = 0; i < kisisayi; ++i)

           {

                if (kisi[i] == 9 || kisi[i] == 0)              

               if (ol == false)

               {

                        ol = true;

                        kisi[i] = 0;//yasiyor

               }

               else

              {

                       ol = false;

                       sag = kisisayi;

                       kisi[i] = 1;//olu

                       hepsi--;

              }

        }

      } while (hepsi != 1);

      string sags="";

     for (int i = 0; i < kisisayi; ++i)

     {

            if (kisi[i] == 0)

               sags = (i+1).ToString();

     }

     MessageBox.Show(sags);

İlk kısımda dinamik olarak oluşturduğumuz dizide kimsenin herhangi bir işleme maruz kalmadığını 9 rakamıyla gösterdik. Ölü olan kişiyi 1 ve yaşayan kişiyide 0 la işaretledir. Ardından tek kişi kalana kadar döngümüzü devam ettirdik böylece hiç işleme girmemiş ve yaşayan kişiler arasında öldürmeye devam ettik.



Windows Mobile ve aygıt ismi bilmecesi

clock Ekim 26, 2009 04:27 by author Volkan Atasever

 

Windows Mobile işletim sistemi kullanan mobil cihazlar oldukça revaçta. Bu cihazların profosyonel manada kullanıldığı ise bir gerçektir. Bir server ve birden fazla PDA’in bu serverla bağlantılı olduğu yazılımlar ise oldukça önemli yer tutmaktadır. Bunun ülkemizdeki en güzel örneği  kafe-restorant tarzı işletmelerin sipariş sistemi diyebilirim. Sisteme yeni bir mobil cihaz eklendiğinde veya sistemdeki konfigürasyonlar değiştirildiğinde mobil cihazların aygıt ismini değiştirmek veya bu cihazlara yeni bir aygıt ismi vermek gerekebilir.

Bu bağlamda aygıt ismi mobil cihazda; HKEY_LOCAL_MACHINE\Ident\Name registry dosyasının altında tutulmaktadır. Registry’e ulaşmak için kullanacağımız isim uzayı;

using Microsoft.Win32;    

şeklindedir.

Registry’i değiştirmek için ise aşağıdaki metodu kullanabiliriz.

    private void aygitayarla(string aygitismi)

    {

      using (RegistryKey key = Registry.LocalMachine.OpenSubKey("Ident", true))

      {

        key.SetValue("Name", aygitismi);

      }

    }

Device ismini geri döndürmek için ise;

    private string ayarial()

    {

      using (RegistryKey key = Registry.LocalMachine.OpenSubKey("Ident", false))

      {

        return (string)key.GetValue("Name");

      }

    }

ayarial() metodu sayesinde değişikliğimizin uygulanıp uygulanmadığını inceleyebiliyoruz.

İkinci değişiklik kontrolünü ise kontrol panelden yapabiliriz bunun için doğrulama seçeneği ile mobil cihazın kontrol paneline uygulamamızdan yönlendirme yapabilmemiz mümkün bunun için;

Process.Start("ctlpnl.exe", "cplmain.cpl,5,1");

 

kaynak: http://www.christec.co.nz/blog/



SQL Server'da kolon isimlerinde özel karakter kullanmak

clock Ekim 26, 2009 03:13 by author Volkan Atasever

Çoğunlukla kendi tablolarımızı oluştururken kağıt üstünde özel karakterler içeren isimler veririz. Sql server ise bu özel karakterlere izin vermez. Tablo isimlerini eğer standar tablo ismi gibi yazarsanız bu sorunu yaşarsınız fakat bu sorunu köşeli parantez kullanarak aşabiliyoruz. Aşağıdaki örnekte normal kullanımda alınan hata mesajıda ektedir.

create table deneme(m/v varchar(3))

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '/'
.

Köşeli parantezlerimizi kullanıp aynı kodu yazdığımızda ise;

create table deneme([m/v] varchar(3))

Command(s) completed successfully.
 



Özelleştirilmiş DataBase Rolü tanımlamak ve izinleri yönetmek

clock Ekim 21, 2009 04:50 by author Volkan Atasever

Özelleştirilmiş veri tabanı rolleri sayesinde kullanıclara istediğimiz gibi özelleştirebildiğimiz rolleri atamamızı sağlar bu sayede özel bir rol tanımlayıp istediğimiz sayıda kullanıcıya bu rolleri atayabiliriz. Bunları yapmak bize hız ve veritabanımızı da daha kolay yönetmemizi sağlamaktadır. Aşağıda yeni bir rol tanımlayıp bu role kendi seçimimiz olan rolleri verip kullanıcımıza da bu rolleri atamktayız. Scriptte kullandığım sp_addrolemember prosedürü sql server'a ait bir prosedür olup bu rolleri kullanıcının rolü haline getirmemizi sağlamaktadır.

 

Bu adımda AdventureWorks database'i üstünde rol yaratmaktayız;

USEAdventureWorks

GO

CREATE ROLE [TestRol_1] AUTHORIZATION[dbo]

Go

 

Burada tanımladığımız rol'e izinlerimizi veriyoruz.

USE AdventureWorks

GO

GRANT ALTER,EXECUTE, SELECT,INSERT,UPDATE,DELETE

ON SCHEMA ::dbo

TO TestRol_1

Go

 

USEAdventureWorks

GO

GRANT BACKUP DATABASE,BACKUP LOG To [TestRol_1]

Go

 

SQL Server'ın ken içinde barındırdığı sp_addrolemember prosedürü ile rolümüze kullanıcı eklemekteyiz.

USEAdventureWorks

GO

EXEC sp_addrolememberN'TestRol_1', N'USER_ISMI'

GO

 

Bu adımda rolünü tanımladığımız kullanıcı için Windows Login hakkı vermekteyiz varsayılan veritabanı olaraksa AdventureWork veritabanını kullanmaktayız.

USEAdventureWorks

GO

CREATE LOGIN [DenemeDomain\USER_ISMI] FROM WINDOWS WITH DEFAULT_DATABASE=AdventureWorks

GO

 

Bu adımda veri tabanı için kullanıcımızı tanımlamaktayız.

USEAdventureWorks

GO

CREATE USER [USER_ISMI] FORLOGIN [DenemeDomain\USER_ISMI]

GO

 

Kaynak: Namwar Rizvi



Veritabanında tablolar arası ilişkiyi nasıl bulabilirim?

clock Ekim 21, 2009 04:11 by author Volkan Atasever

Database Yöneticileri ve SQL Server geliştiricileri genellikle bu ilişkileri bulmak için hızlı bir script'e gereksinim duyar. Normal yollardan incelemek gerçekten bazen imkansıza yakın bazen ise uzun zamanlar alan bir işkenceye dönüşmektedir. Aşağıda SQL Server NewsGroup'larda rastladaığım bir scripte yer vermek istiyorum. Oldukça kullanışlı bir script. Yeni başlayanların ve hatta piyasada deneyimli olanların dahi uzun kağıtlarda bu bağlantıları çözmeye çalıştığına şahit olduğum için faydalı olacağına eminim. AdventureWorks veritabanına ait bir örnek çıktı da aşağıda verilmiştir. Ana tabloyu ve bunun alt tabloları ile beraber foreign keylerin dökümünüde vermektedir.

 

Select

 

object_name(rkeyid) Parent_Table,

 

object_name(fkeyid) Child_Table,

 

object_name(constid) FKey_Name,

 

c1.name FKey_Col,

 

c2.name Ref_KeyCol

 

From

 

sys.sysforeignkeys s

 

Inner join sys.syscolumns c1

 

on ( s.fkeyid = c1.id And s.fkey = c1.colid )

 

Inner join syscolumns c2

 

on ( s.rkeyid = c2.id And s.rkey = c2.colid )

 

Order by Parent_Table,Child_Table

 

 

Script'in AdventureWorks örnek database'in den alınan çıktısı:

 



Volkan Atasever Kimdir ?

E-Mail: volkan(et)volkanatasever.com

Kurucu&Genel Müdür/S4G
Bilgisayar Mühendisi
Eğitmen ve Danışman
Teknoloji Yazarı

mühendislik, edebiyat, retro computer, yazılım, şiir, nümismatik, bilişim, podcast ve bir çok kategoride yazılarım...

     

Yazılım Kitaplarım

   

Şiir Kitaplarım

Ulusal Yayınlar ve Programlar

 

Sosyal Ağlarım

 

 

 

 

Retro Bilgisayar Dergimiz

Türkçe Retro Bilgisayar dergimiz haziran 2016'da ilk sayısını çıkardı.  Sizde katkıda bulunmak isterseniz bana mail atmanız yeterli. Dergimiz PDF formatında ve tamamen ücretsizdir. Software4Galaxy imtiyaz sahibidir. S4G sitesinden veya facebook sayfasından dergilere ulaşabilirsiniz.

Yasal Bilgi

Sitedeki yazıları,kodlar ve diğer materyaller Volkan Atasever'e aittir. Yazarı ve siteyi kaynak göstererek yazıları paylaşabilirsiniz.  Copyright(c)2004-2019

Sign In

Yazılım