2010-10-29

Outlook hesap ayarlarını yedeklemek

Bu aralar sıklıkla sistemimi yeniden kurar oldum.
Her kuruluşunda Outlook'a yeniden hesap kurmaktan bıktım.Bayağı uğraştıktan sonra buldum :

  • Registrydeki HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook dalı ve alt dalları yedeklenir.

  • Outlook tekrar kurulduktan sonra bu yedek tekrar yüklenir.

  • Artık eski hesaplarınız yeni kurduğunuz Outlook'a eklenmiştir.(Hesap şifrelerinizi tekrar sorabilir.)


VSTO İle word belgelerini sayfa sayfa okuma


Elimizde bir word belgesi var ve programatik olarak içinde bazı kelimleri sayfa bazlı aramamız gerekiyor.
Önce word belgemizi Interop yardımıyla açıyoruz ve bir Range nesnesi alıyoruz.


  _WORD = New Microsoft.Office.Interop.Word.Application
  _Doc = _WORD.Documents.Open(OpenFileDialog1.FileName)
  If _Doc IsNot Nothing Then
   Dim rng As Microsoft.Office.Interop.Word.Range = _Doc.Range()
   '............

Range nesnesin parametresiz vererek tüm içeriğe erişmiş oluyoruz.
Şimdi toplam sayfa sayısını bulalım.
 Dim pages As Integer = rng.ComputeStatistics(Microsoft.Office.Interop.Word.WdStatistic.wdStatisticPages)

Bütün sayfaların başlangıç-bitiş değerlerini bir Dictionary nesnesinde tutalım
  Dim list As New System.Collections.Generic.Dictionary(Of Integer, Integer())  

İlk sayfanın başına gidelim ve en son Range değerini tutalım.
  Dim what = Microsoft.Office.Interop.Word.WdGoToItem.wdGoToPage
  Dim which = Microsoft.Office.Interop.Word.WdGoToDirection.wdGoToAbsolute
  Dim nRange As Microsoft.Office.Interop.Word.Range 
  Dim last As Integer = rng.End

Şimdi 2. sayfadan son sayfaya kadar ilerliyelim.
   Dim oncekiSon As Integer = 0
   For i = 2 To pages
        nRange = rng.GoTo(what, which, i)
        list.Add(i - 1, New Integer() {oncekiSon, nRange.End})
        oncekiSon = nRange.End
   Next

Şimdi son sayfanın başlangıç ve bitişlerini ekliyelim.(Son Range değeri)
   If list.Count > 0 Then
          list.Add(list.Keys.Last + 1, New Integer() {oncekiSon, last})
   End If

Artık elimizdde bütün sayflar için Range(Başlangıç-Bitiş) değerleri mevcut.
Sayfaların içerikleri işleyebiliriz.
  For Each key As Integer In list.Keys
    rng.SetRange(list(key)(0), list(key)(1))
    Dim data As String = rng.Text 'key nolu sayfanın içeriği
  Next

Word dan çıkalım.

COM nesnelerimizi bırakmayı unutmayalım :)
  _WORD.Quit(SaveChanges:=Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges)
  System.Runtime.InteropServices.Marshal.ReleaseComObject(_WORD)
  System.Runtime.InteropServices.Marshal.ReleaseComObject(_Doc)
 _WORD = Nothing
 _Doc = Nothing

2010-09-21

MSSQL'de tablo boyutlarını bulmak


Aşağıdaki script MSSQL de ki bir veritabanındaki tablolar ile ilgili boyut bilgilerini,döndürürür:

Declare @T TABLE(name varchar(1000),
[rows] varchar(100),
[reserved] varchar(100),
[data] varchar(100),
[index_size] varchar(100),
[unused] varchar(100))

DECLARE P1 CURSOR FOR
SELECT NAME FROM SYS.OBJECTS WHERE TYPE='U'
OPEN P1
DECLARE @N AS VARCHAR(100)
FETCH NEXT FROM P1
INTO @N
WHILE @@FETCH_STATUS=0
BEGIN
INSERT INTO @T
exec sp_spaceused @N
-------------------
FETCH NEXT FROM P1
INTO @N
END
CLOSE P1
DEALLOCATE P1
SELECT * FROM @T ORDER BY name ASC

2010-09-01

Windows 2008de normal kullanıcı login problemi


Yeni kurduğum bir Windows 2008R2 makineye kendi kullanıcımı ekledim.Kendim Administrators grubunda olduğum için farketmedim.Ama normal kullanıcılardan login olamadıklarına dair hatalar almaya başladım.
Aldıkları hata "user profile service failed the logon" şeklindeydi.
Epeyce bir googleda arama ile boğuştuktan sonra çözümü buldum.Çözüm Roaming folder olup olmadığının kontrolünün iptaliymiş:


  • Local group policy editor(gpedit.msc) açılır.

  • Administrative Templates dalına geçilir, buradan da User Profiles dalına geçilir

  • Do not check for user ownership of Roaming Profile Folders özelliği disable edilir.





Son not olarak eğer Admin iseniz ve Interet Explorer'in zırt-pırt uyarmasında bıktıysanız,
Server Manager'e girip Configure IE ESC disable etmenizde fayda var.


2010-08-14

Firefox'da içerik menüsü


Eğer Firefox ile sağ-tıklama ile gelen içerik(context) menüsünü gizleyip kendi menüsünü oluşturan bir uygulamada menü gelmiyor ise muhtemelen ayarları değişmiştir.
Menüyü göstermek için adres çubuğuna about:config yazıp enter'a basın,gelen ekranda
dom.event.contextmenu.enabled özelliğini bulun false olan değeri true yapın.
Hepsi bu kadar.

2010-07-10

Gold Safran Otel


  • Şirin ilçemiz Alanya'nın Oba mevkisinde bulunan 4 yıldızlı(!) otel

  • Devremülk olarak 2009'da gidilen,2010 yılında ise kapısından içeri sokulmayan otel.

  • Türk olduğunuzu bildiği halde; size merhaba demeyen, selamlamaktan aciz bir bayan müdürün bulunduğu otel(2009).

  • Açık büfe olmasına rağmen aşçıların çocukları "Önce tabağınızdakini bitirin,sonra tekrar alırsınız!" diyerek uzaklaşıtıran otel.

  • Başka bir 4 yıldızlı otele gidildiğinde,3.5 yıldızlı otelde kalındığını hissettiren otel.

2010-05-26

Windows XP'de ki hoşgeldiniz müziği


Windows XP ilk kurulduğunda son ayarlar kısmında
alttan tatlı bir müzik çalar.Windows 7'de keşke o müziğe benzer bir müzikle kurulsaymış.Müziğe C:\WINDOWS\system32\oobe\images\title.wma dosyasından,
bestecisinede ise http://www.billbrownmusic.com adresinden ulaşılabilir.Amcam birçok dizi ve filmede beste yapıyormuş.

2010-05-24

Silverlight içinde jQuery kullanmak


Silverlight uygulamaları içine gömüldükleri sayfaların DOM nesnelerine ve javascript lerine ulaşabiliyorlar.Silverlight ile jQuery konuşturmak için
Silverlight'a jQuery'i System.Windows.Browser.ScriptObject nesnesi tanıtmak gerekir.

Public Class MainPage
Inherits UserControl
private jQuery as System.Windows.Browser.ScriptObject
Private Sub MainPage_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded
me.jQuery = TryCast(System.Windows.Browser.HtmlPage.Window.GetProperty("jQuery"), System.Windows.Browser.ScriptObject)
If Not jQuery Is Nothing Then
'şimdi body'ini stilini değiştirelim
Dim body As System.Windows.Browser.ScriptObject = _
TryCast(jQuery.InvokeSelf("body"), System.Windows.Browser.ScriptObject)
'artık body = window.jQuery(body)
'şimdi css fonksiyonu cagıralım
body.Invoke("css", "background-color", "red")'tek bir stil özelliği değiştirme
Dim list As System.Windows.Browser.ScriptObject = _
System.Windows.Browser.HtmlPage.Window.CreateInstance("Object")
list.SetProperty("background-color", "green")
list.SetProperty("font-size", "15")
list.SetProperty("display", "block")
body.Invoke("css", list)'birden stil özelliği değiştirme
End If
End Sub
End Class

2010-05-16

Query String de karakter problemi


Web sayfasında yapılan isteğin QueryString değerini kullanırken karakter problemi yaşanabilir.(Ş,ğ,ç,vb Türkçe karakterler Hexadecimal olarak formatlanır mesela).
Tam değeri almak içinse System.Web.HttpUtility.UrlDecode kullanırız.Ama sıklıkla bu metodu kullanarak bir türlü isteğim sonucu alamadım.
System.Web.HttpRequest sınıfının RawUrl özelliğini kullanarak istediğim değeri tam olarak alabildim:

Dim list As System.Collections.Specialized.NameValueCollection = _
System.Web.HttpUtility.ParseQueryString( _
ctx.Request.RawUrl.Substring(_ctx.Request.RawUrl.LastIndexOf("?")))

2010-03-23

Hızlı arama widget'i






Ekran Görünteleri
Android ile gelen Direct Dial(Direkt Arama) widgeti hoşuma gitmedi.Bazen kazara dokunduğunuzda direkt numarayı arıyordu.Bende ona benzer bir widget oluşturdum.Arama yapmadan önce soruyor.Böylece hatalı aramaların önüne geçiliyor.Uygulama 2.0(Eclair) üzeri sürümlerde çalışıyor.

Widget(apk) yükleme dosyası


Market

2010-03-17

Xpath ile SelectNodes/SelectSingleNode


Bir XmlDocument nesnesinde bazen belli bir tag'e ait bütün dalları getirmek istediğimizde
Dim nodes as System.Xml.XmlNodeList = xDocument.SelectNodes("//Etiket")

yazdığımız da o XmlDocument de Etiket tag'i olsa bile gelmeyebilir.
Bunun nedeni büyük ihtimalle Namespace'lerden kaynaklanır.
Hızlı bir şekilde çözmek için
Dim nodes As System.Xml.XmlNodeList = xml.GetElementsByTagName ("Etiket")

şeklinde kullanmak yeterli olacaktır.
Yok "ben kasarım!" diyenlerdenseniz ilgili kodu buyrun :

Dim xmlns As New System.Xml.XmlNamespaceManager(xDocument.NameTable)
Dim prefix As String = xml.DocumentElement.GetNamespaceOfPrefix("")
xmlns.AddNamespace("ns", prefix)
Dim nodes As System.Xml.XmlNodeList = xml.SelectNodes("//ns:Etiket", xmlns)


Silverlightda SOAP Header kullanımı


Elinizde mevcut bir web servisiniz var ve bu serviste bazı WebMethodlarınız SoapHeader kullanıyor(Yekilendirme,güvenlik,vs amaçlı).Bu servisinizi Silverlight uygulamanızda da kullanmak istiyorsunuz.Gayet güzel bir şekilde Silverlight projenizde Servis referanslarınızı oluşturdunuz ama Soapheader'in verileceği bir yer bulamadanız.
Çözümü System.ServiceModel.OperationContext ve System.Runtime.Serialization.XmlObjectSerializer kullanmak olacaktır.
Örneğin Aşağıdaki gibi bir web servisiniz olsun:

.....
Public Class OrnekServis
Inherits System.Web.Services.WebService
Public _Yetki As Yetki
Public Class Yetki : Inherits System.Web.Services.Protocols.SoapHeader
Public Sub New()
MyBase.New()
End Sub

Private _Ad As String
Public Property Ad() As String
Get
Return _Ad
End Get
Set(ByVal value As String)
_Ad = value
End Set
End Property

Private _Sifre As String
Public Property Sifre() As String
Get
Return _Sifre
End Get
Set(ByVal value As String)
_Sifre = value
End Set
End Property
Public Function Check() As Boolean
Return True
End Function
End Class
<SoapHeader("_Yetki", Direction:=SoapHeaderDirection.In)> _
<WebMethod(EnableSession:=True, Description:="Yeni bir dosya adi alir")> _
Public Function GetNewFileName() As String
If _Yetki is nothing Then return String.Empty
Dim g As String = Guid.NewGuid.ToString
Return g
End Function
End Class

Yukardaki web servisinde görüldüğü üzere GetNewFileName metodu Yetki SoapHeaderi beklentisi içerisinde.
Silverlight projemizde ise Visual Studio'nun oluşturduğu web servis referansı ise OrnekServisSoapClient isminde olsun.

.......
Public Class Yetki
Public Sub New()
MyBase.New()
End Sub

Private _Ad As String
Public Property Ad() As String
Get
Return _Ad
End Get
Set(ByVal value As String)
_Ad = value
End Set
End Property

Private _Sifre As String

Public Property Sifre() As String
Get
Return _Sifre
End Get
Set(ByVal value As String)
_Sifre = value
End Set
End Property
Public Function Check() As Boolean
Return True
End Function

End Class
..................
private _Service as OrnekServis.OrnekServisSoapClient
.......
Private Sub MainPage_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded
Dim b As New System.ServiceModel.BasicHttpBinding()
Dim ep As New System.ServiceModel.EndpointAddress("http://localhost:8888/Ornek.asmx")
_Service = New OrnekServis.OrnekServisSoapClient(b, ep)
End Sub

Şimdi
_Servis
nesnemizdeki GetNewFileNameAsync metodunu çağırmadan önce SoapHeaderimiz ayarlamamız gerek.Bunuda aşağıdaki kod ile yapıyoruz.

Private Sub SetHeader()
If Not _Service Is Nothing Then
Dim mout As Object = System.ServiceModel.Channels.MessageHeader.CreateHeader("Yetki", "http://tempuri.org/BenimNameSpace", New Yetki With {.Ad = "TestUser", .Sifre = "1001"}, New YetkiSeri())
Dim ctx As New System.ServiceModel.OperationContext(_Service.InnerChannel)
ctx.OutgoingMessageHeaders.Clear()
ctx.OutgoingMessageHeaders.Add(mout)
System.ServiceModel.OperationContext.Current = ctx'Aktif Operation Context'imiz ayarlıyoruz
'Yada aşağıdaki metoduda kullanabiliriz
'Using temp As New System.ServiceModel.OperationContextScope(_Service.InnerChannel) 'System.ServiceModel.OperationContext.Current.OutgoingMessageHeaders.Add(mout)
'End Using
End If
End Sub

Burada dikkatimizi çeken
new YetkiSeri
sınıfı olacaktır.Bu sınıf gönderilen nesneyi istediğimiz gibi formatlayacaktır.

Public Class YetkiSeri
Inherits System.Runtime.Serialization.XmlObjectSerializer
Public Sub New()
MyBase.New()

End Sub
Public Overloads Overrides Function IsStartObject(ByVal reader As System.Xml.XmlDictionaryReader) As Boolean
Throw New NotImplementedException("!")
End Function

Public Overloads Overrides Function ReadObject(ByVal reader As System.Xml.XmlDictionaryReader, ByVal verifyObjectName As Boolean) As Object
Throw New NotImplementedException("!")
End Function

Public Overloads Overrides Sub WriteEndObject(ByVal writer As System.Xml.XmlDictionaryWriter)
Throw New NotImplementedException("!")
End Sub

Public Overloads Overrides Sub WriteObjectContent(ByVal writer As System.Xml.XmlDictionaryWriter, ByVal graph As Object)
If TypeOf graph Is Yetki Then
'Yetki snıfımız burada serialize olacaktır
Dim y As Yetki = DirectCast(graph, Yetki)
writer.WriteStartElement("Ad")
writer.WriteString(y.Ad)
writer.WriteEndElement()
writer.WriteStartElement("Sifre")
writer.WriteString(y.Sifre)
writer.WriteEndElement()
End If
End Sub

Public Overloads Overrides Sub WriteStartObject(ByVal writer As System.Xml.XmlDictionaryWriter, ByVal graph As Object)
Throw New NotImplementedException("!")
End Sub
End Class

2010-03-08

Firefox saldırgan olarak bildirilmiş site

Bazı sitelerde Firefox bu şekilde bir uyarı çıkartıyor:



Bu uyarı bazen can sıkıcı olabiliyor.Ayrıcalık tanıyarak bu uyarıyı geçebilirsiniz.Yada Firefoxda bu uyarıların gösterilmemesini ayarlayabilirsiniz.Bunun için adres satırını about:config yazıp, çıkan listeden browser.safebrowsing.malware.enabled değerini false şeklinde değiştirmeniz yeterli olacaktır.

2010-03-01

Kişi Adları Sözlüğü


Motorola Milestone aldıktan sonra Android'e uygulama yazmaya sardırdım.Ne yazabilirim diye bayağı bir düşündüm.Android market,Iphone Appstore'a gözattım.Pek aklıma bir şeyler gelmedi.Derken aklıma kızıma isim ararken yaşadığım günler geldi.Bir yerlerden adlarla ilgi veritabanı bulup hemen .NET ile bişeyler yazıp eşimle kullanmıştık.

Android de neden olmasın dedim ve işe koyuldum.İşte programın hikayesi.Umarım iş görür!

Programı kullanabilmek için adlar.db veritabanı dosyasını SDCard'ınızın köküne kopyalamak gerekiyor.

Ekran Görüntüleri:

 


 


Uygulama(apk) dosyası


Marketten indirmek için Kare kodu


2010-01-21

IIS 6 da ASP.NET için 404 hatası


IIS de yeni bir application koydunuz.Herşeyin tamam olduğunu düşünüyorsunuz ama çalıştırdığınızda 404 hatası alıyorsanız
IIS'in izin verilen Web Service Extesion'larının içinde ASP.NET'in olduğunu kontrol etmenizde fayda var.


2010-01-15

jQuery ile ASP.NET validatorlarının gösterilmesi


ASP.NET'in kendi içinde bulunan RequiredFieldValidator,RegularExpressionValidator,vs. gibi doğrulama bileşenleri ile kullanıcı tarafında doğrulama işlemleri oldukça kolaydır.Ama kullanıcıya doğrulama sonucunu göstermek ,günümüzde biraz demode kaldı.Ya ValidationSummary kullanıp, yada tarayıcıda uyarı vermekten fazla birşey sunmuyor ASP.NET.
Oysa şimdi jQuery ile bir çok atraksiyonlu işler yapmak çok kolay.Geçenlerde otururken aklıma geldi.Hemen ASP.NET'in doğrulama script kodlarını inceledim.Orada gözüme çarpan "ValidatorUpdateDisplay" fonksiyonu ile kendi gösterim metodumuzu yapabileceğimizi farkettim.

window.jQuery(function(){
//sayfa yüklenmesi tamamlandıktan sonra
//ValidatorUpdateDisplay fonksiyonu varsa kendimizinki ile
//değiştirelim
if (typeof (window.ValidatorUpdateDisplay) == 'function') {//
window._ValidatorUpdateDisplay = window.ValidatorUpdateDisplay;
//orjinal fonksiyonu koruyalım
window.ValidatorUpdateDisplay = ValidatorUpdateDisplay2;
//orjinal fonksiyon
//yerine kendi fonksiyonumuzu referans edelim
});
function ValidatorUpdateDisplay2(val) {//kendi ValidatorUpdateDisplay fonksiyonumuz
//val ile referans edilen
//RequiredFieldValidator,RegularExpressionValidator,vb
//bileşenlerine ait DOM nesnesi

var goOn = false;
try {
var refDom=null;//hangi bileşeni doğorrulayacağız
if (typeof (val.controltovalidate) == 'string')
refDom = $get(val.controltovalidate);
else
refDom = val.controltovalidate;
if (refDom)
refDom = window.jQuery(refDom);
if (!refDom)
refDom = window.jQuery(val);
if (refDom) {
//refDom genellikle
//input,select gibi bir bileşenin jQuery halidir
//Bazı validatorların controltovalidateleri olmuyor
//(bu durumda jQuery ise Validator nesnesi)

//jQuery ile fade In yapalım:)
refDom.fadeOut(0).fadeIn(1000);
//....başka türlü atraksiyonlarda yapılabilir
}
else
goOn = true;
} catch (e) { goOn = true; alert(e.message); }
if (goOn) _ValidatorUpdateDisplay(val);
//hata,veya benzeri durumda orjinal fonksiyonu çağıralım
}

2010-01-09

Bebek ile uçmak

Eşim ve 2 aylık kızım dün Anadolujet ile Gaziantep'e uçtular.Bebek ile uçacaklara aşağıdaki bilgiler işlerine yarıyabilir:

  • Havalanı uzak ise bebeğinizi doyurup/altını temizleyip yola çıkın

  • Mümkünse tek uçmayın(Allahtan annem vardı yanlarında)

  • Havalanı girişinde bebeği X-ray den geçirmiyorlar ama güvenlik bebeği kontrol ediyor.

  • Kızımı anakucağı ile gitmişti;check-in sırasında kirlenmesin diye poşet verip onada bagaj fişi yazıyorlar.Uçağa binmeden önce anakucağını bagajların yanına yolluyorlar.

  • Mümkünse en son uçağa binin ve en önce inin.

  • Kalkış ve inişlerde bebeği emzirmenizi öneriyorlar.Annenin panço tarzı şeyler giymesini tavsiye ederim;uçakta emzirme olayını kolayaştırıyor.