2012-11-09

Uzak masaüstü ses sorunu

     Çalıştığımız bir çok kurumda proxy/websense/vs gibi kısıtlamalar yüzünden twitter , youtube gibi siteler açılmıyor. Çoğu zaman bu kurumlarda uygulamaları kurduğumuz makinalar kısıtlamalar olmadığı için bahsi geçen sitelere uzak masaüstü ile bağlanarak erişiyorum.
     Ama genellikle bu makineler sunucu oluyor ve  fiziksel olarak ses kartları olmadığı için video seyrederken sadece görüntüsü ile idare ediyorduk. Ufak bir arama ile bu işin çözümü olduğunu öğrendim: 

  • Önce uzak masaüstü ayarlarında (Play on this computer) seçili olup olmadığı kontrol edilir.
     
  • Sonra uzak masaüstü ile bağlantı yapılır.Servislerden (Windows->Run->services.msc) Windows Audio servisi bulunur. Eğer başlatma tipi otomatik olarak başlamıyorsa; otomatik yapılıp servis çalıştırılır.
  • Uzak masaüstündeki makinada 
    • Windows Server 2008 için: Administrative Tools altındaki Remote Desktop Services'in menüsünde bulunan Remote Desktop Session Host Configuration açılır.
    • Windows Server 2003 için: Administrative Tools altındaki Terminal Services Configuration açılır.
  • Remote Desktop Session Host Configuration(yada Terminal Services Configuration) da Connections ki RDP-Tcp ye sağ tıklanıp özellikleri açılır.
  • Client Settings sekmesindeki Audio and Video playback(yada Audio Mapping)  kaldırılır.
  • Uzak masaüstü bağlantısındaki makinadan log-off yapılıp. Tekrar uzak masaüstü bağlantısı kurulduğunda artık sesi duyabilirsiniz.

2012-07-09

Web Farm Framewok da wcf için 404 hatası

Eğer Web Farm Framework kurup birde üzerine ARR ile Load Balance yapıyorsanız ve
herhangi *.svc uzantılı dosyalarınız için 404 hatası alıyorsanız.ARR olduğu kontrolör makinasındaki
IIS *.svc uzantılı dosyaları diğer makinelere yönlendirmeden kandi üzerinde çalıştırıyor demektir.
Bu yüzden  ARR'in olduğu web.config'de ServiceModel'e ait bütün handler ve module mapping lerin kadırılması gerekir.

2012-03-13

Aniden Kapanan Uygulama

Eğer Visual Studio ile VB.NET de uygulama geliştirken uygulamanız hata vermeden kendini kapatıyorsa Tek başına End şeklinde bir satır bırakmışsınızdır.
End If yazarken If kısmını unutmuşum!

2011-09-16

Clipboard Html Okuma Encoding Problemi

Eğer clipboard'dan CF_HTML formatında veri okurken encoding problemi çıkartıyorsa:
Dim cdata As String= Clipboard.GetText(TextDataFormat.Html)

şeklinde okuma yerine
  Dim str As System.IO.MemoryStream = TryCast(Clipboard.GetData("Html Format"),System.IO.MemoryStream)
            If str IsNot Nothing Then
                str.Seek(0, IO.SeekOrigin.Begin)
                Dim sr As New System.IO.StreamReader(str, System.Text.Encoding.UTF8)
                cdata = sr.ReadToEnd
                sr.Close()
            End If

şeklinde değiştirirseniz encoding problemini aşarız.

2011-06-08

SlSvcUtil.exe kullanırken oluşan StackOverflowException


Eğer Silverlight için SlSvcUtil.exe kullanarak bir WCF servisi consume ederken Process is terminated due to StackOverflowException hatası alıyorsanız SlSvcUtil.exe'nin bulunduğu dizine aşağıdaki konfigurasyonu içeren SlSvcUtil.exe.config dosyası oluşturun:

<configuration>
<satelliteassemblies>
<assembly name="SlSvcUtil, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</satelliteassemblies>
</configuration>

2011-06-04

Lambda expressionda kendini(recursive) kullanım


Visual 2008 VB ile gelen Lambda expression ile artık kod içinde istediğimiz yerde Function,Sub kullanabiliyorduk.Örneğin:

Private Sub UCAgac_Loaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles Me.Loaded
Dim action = Sub()
MessageBox.Show("Deneme")
End Sub
Dim bol = Function(a As Double)
Return a / 4
End Function
End Sub



Eğer bu şekilde tanımlı bir lambda expression kendi içinde çağırmak istediğimizde

Dim bol = Function(a As Double)
If a > 0.0111 Then
Return bol(a / 4)
Else
Return a / 8
End If
End Function
Dim t As New System.Windows.Threading.DispatcherTimer()
t.Interval = TimeSpan.FromMilliseconds(100)
Dim handler = Sub()
If 1 > 0 Then
RemoveHandler t.Tick, handler
End If
End Sub
AddHandler t.Tick, handler
t.Start()

  1. Type of 'bol' cannot be inferred from an expression containing 'bol'

  2. Type of 'handler' cannot be inferred from an expression containing 'handler'


Visual Studio şeklinde bize bir hata verecektir.Sebebi ise lamda expressionlarının açık şekilde
tanımlanmamasıdır.Eğer açık şekilde tanımlarsak:

Dim bol As System.Func(Of Double, Double) = Function(a As Double)
If a > 0.0111 Then
Return bol(a / 4)
Else
Return a / 8
End If
End Function
Dim t As New System.Windows.Threading.DispatcherTimer()
t.Interval = TimeSpan.FromMilliseconds(100)
Dim handler As System.EventHandler = Sub(sender As Object, e As System.EventArgs)
If 1 > 0 Then
RemoveHandler t.Tick, handler
End If
End Sub
AddHandler t.Tick, handler
t.Start()
hata alınmaz.

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