Apple push notification servisi ile bir uygulama – 1.Bölüm

IOS uygulamalarımızda pil ömrünü düşürecek ve gereksiz bir yük oluşturacağı için arka planda birçok şeyi yapamayız. Fakat uygulamamızın bir çok yerinde kullanıcılarımıza uyarı gönderme ihtiyacımız olacaktır.

Örneğin, sizin taım gol attı veya bir arkadaşınızdan mesaj geldi. Bu durumlar oluşurken, uygulamanız çalışmıyor olabilir ve bizim bu olayları dinleyip kontrol etmemiz çok zordur.

Neyse ki apple bu tür durumlar için bize sunduğu bir çözümü var “Apple Push Notification Servisleri”. Temel olarak bu servis sunucu tarafında çalışı, cihazımızda sürekli olarak bu servisi dinler ve gelen mesajları ilgili uygulama için ekrana getirir.

Push notification ile üç farklı şey yapabiliriz:

  • Kısa bir mesaj gösterme
  • Sesli uyarı göndermek
  • Uygulama ikonunun üstünde numara göstermek (badge)

 

ilk aşamada uygulamanızı ileti alabilmesi için bazı ayarları yapmanız gerekiyor.

Push Overview

  1. Uygulama için PN i aktif hale getirilir. Kullanıcı uygulamaya ilk girdiğinde gelen iletilere izin vererek APNS e kayıt olur.
  2. Uygulama kayıt olduktan sonra “device token” gönderir. Uygulamaya ileti göndermek istediğiniz zaman buradan gelen “device token” kodunu kullanacaksınız.
  3. Uygulama “device token” kodunu sunucuya gönderir.
  4. Bundan sonra ileti göndermek istediğiniz zaman “device token”i gönderdiğimiz sunucu “Apple Push Notification Service”(APNS) i kullanarak bildirimi uygulamaya gönderir.
  5. APNS bildirimi kullanıcının aygıtına ulaştırır.

Kullanıcının cihazına bildirim geldiğinde bir uyarı penceresi ile gönderilen ileti gözükür, bildirim gönderilirken belirtilen ses çıkar ve uygulama ikonu güncellenir. İstenildiğinde uygulama içerisinde bu bildirim anını yakalayarak istediğimiz başka işlemleride yapabiliriz.

Push Notification için nelere ihtiyacımız var

An iPhone or iPad: Push notification malesef simulator üzerinde çalışmıyor. Yani test etmek için bir cihaza ihtiyacınız var.

iOS Developer Program üyeliği: Push servisini kullanacağınız bütün uygulamalar için provisioning portal dan yeni bir App ID tanımlamanız, bu uygulamanın üzerine SSL push certificate eklememiz ve provisioning profile oluşturmamız gerekiyor. Bütün bunlar için ise IOS developer programına üye olmalısınız. (nasıl üye olabilirim ki? diyorsanız:)

datasource = select() den dönen datarow[] hatası

herhangi bir girdview veya combobox ın datasource’una datarow dizisi göndermek zorunda olduğumuzda hatayla karşılaşırız:

comboBox1.DataSource = dt.Select(“d<30″);

hatanın oluşma sebebi aşağıdaki interface lerden herhangi biriyle implemente olmayan nesneler datagrid gibi kontrollere datasource olarak bağlanamaz.

IList interface
IListSource interface
IBindingList interface
IBindingListView interface

Sorunu çözümü önce datasource olarak datatable’ı seçip ardından datatable’ın DefaultView.RowFilter özelliğine koşulumuzu eklemek:

comboBox1.DataSource = dt;
dt.DefaultView.RowFilter = “d<30″;

onclick=”return false” ie6,ie7′de çalışmıyor

onclick="calistir(); return false;"

Javascript ‘de linklerde refresh yapmayıp sadece isteğimiz javascript fonksiyonlarını çalıştırmak istediğimizde onclick=”return false” kullanılır. Ama bu şekilde internet explorer 6 ve 7 de çalışmıyor. Sorunu şu şekilde çözebiliyoruz.

onclick="calistir(); event.returnValue=false; return false;"

SQL Rehberi – Hazır Fonksiyonlar – 1

SQL’de işlemlerimizi daha kolay yapmamamızı sağlayan birçok fonksiyon bulunmaktadır. Çoğu zaman lazım olan bu fonksiyonları tek tek açıklamaya çalışacağım. Umarım faydalı olur.

ascii()

Açıklama: Girilen karakterlerin en solundakinin ascii numarsını döndürür.

Yazılış: int = ASCII ( karakter_girişi )

Örnek:

select ascii(‘ABC’) — 65
select ascii(‘A’) — 65
select ascii(‘Z’) — 65
select ascii(‘a’) — 97
select ascii(‘z’) — 122
select ascii(’0′) — 48
select ascii(’9′) — 57
select ascii(‘_’) — 95
select ascii(‘ ‘) — 32

char()

Açıklama: Girilen sayının ascii karakter karşılığını döndürür.

Yazılış: char= CHAR ( sayı )

Örnek:

select char(ascii(‘A’))  — A
select char(65)  — A
select char(145) — Sol tek tırnak: ‘
select char(146) — Sağ tek tırnak: ’

Not:

SQL: char(13) = satır başı, char(10) = satır atlama.
VB’deki: ‘vbCrLf’ veya Javascript/c#’daki \n gibi
Örnek:
Print ‘Kod listesi: ‘ + char(13) + char(10) + ‘A = Selam 1′ + char(13) + char(10) + ‘B = Selam 2′

Sonuç:

Kod listesi:
A = Selam 1
B = Selam 2

select nchar(65) — A
select unicode(‘A’) — 65

SQL’de ascii listesi almak için aşağıdaki komutu kullanabiliriz:

declare @strValue varchar(255)
declare @intCount int
declare @intCountMax int
set @intCount = 0
set @intCountMax = 255
forloop_begin:
  set @strValue = (select (convert(varchar(15),@intCount) + '-' + char( @intCount ) ))
  print @strValue
  set @intCount = @intCount + 1
  if ( @intCount <= @intCountMax ) begin
    goto forloop_begin
  end
forloop_end:

charindex()

Açıklama: girdiğimiz yazının içinden belirlediğimiz kısmın başlangıç karakterini döndürür, eğer yoksa 0 döner.

Yazılış: int = CHARINDEX ( expression1 , expression2 [ , start_location ] )

expression1 – Aranılacak olan text
expression2 – içinde arama yapılacak text.
Start_location = 0 veya negatif = başlangıç.

Örnek :
select charindex( ‘Selam’, ‘Yeniden Selam Herkese’)  — 7
select charindex( ‘/’, ‘http://www.ftorun.com/’,8) — 22

difference()

Açıklama: iki soundex değerini karşılaştırıp 1 – 4 arasında bir numara dödürür. Birbirlerine olan benzerliklerine göre 4′e yakın bir değer verir.

Soundex nedir: Bir kelimeden fonetik bir kod cikarma yontemidir. SQL’de SOUNDEX() komutu ile verdiğimizde bize 4 haneli soundex değeri, difference ise iki soundex degerini kiyaslayarak iki kelimenin birbirine ne kadar yakin okundugunu cikarilabilir.

Yazılış:

int = DIFFERENCE ( yazi_1 , yazi_2 )

Örnek:

SELECT SOUNDEX(‘Hello’) — H400
select DIFFERENCE(‘Hello’,'Hello’) — 4

SELECT SOUNDEX(‘ankara’) — A526
select DIFFERENCE(‘ankara’,'ankara’) — 4

SELECT SOUNDEX(‘ali’) — A400
SELECT SOUNDEX(‘veli’) — V400
select DIFFERENCE(‘ali’,'veli’) — 3

SELECT SOUNDEX(‘abcdefg’) — A123
SELECT SOUNDEX(‘tuvwxyz’) — T122
select DIFFERENCE(‘abcdefg’,'tuvwxyz’) — 2  (1 "1" + 1 "2" = 2)

SELECT SOUNDEX(‘dog’) — D200
SELECT SOUNDEX(‘dot’) — D300
select DIFFERENCE(‘dog’,'dot’) — 3  (1 "D" ve 2 "0" = 3)

select SOUNDEX(‘hakan’) — H250
select SOUNDEX(‘melih’) — M400
select DIFFERENCE(‘hakan’,'melih’) — 1  (Soundex değerlerinden sadece sondaki 0 aynı olduğu için 1.)

–Soundex değerlerinin hepsi aynıysa geriye 4 döner.
select SOUNDEX(’1′) — 0000
select SOUNDEX(’2′) — 0000
select SOUNDEX(’20′) — 0000
select SOUNDEX(’100′) — 0000
select DIFFERENCE(’1′,’2′) — 4
select DIFFERENCE(’20′,’100′) — 4

Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.

SQL’de subquery’lerde sadece 1 çıktı alınması gereken yerde, birden fazla veri listelenirse bu hatayı verir.

örnek:

USE Northwind
SELECT t1.*  FROM dbo.Orders t1
WHERE t1.OrderDate =  

(SELECT MAX(OrderDate), CustomerID FROM dbo.Orders WHERE t1.CustomerID = CustomerID GROUP BY CustomerID)

Burada t1.OrderDate’e 1 sonuç vermemiz gerekirken altsorgumuzdan 2 değer dönmektedir, bu sorunu çözmek için

USE Northwind
SELECT t1.* FROM dbo.Orders t1
WHERE t1.OrderDate =
  (SELECT MAX(OrderDate) FROM dbo.Orders WHERE t1.CustomerID = CustomerID)

Maximum OrderDate in yanındaki CustomerID’yi sildiğimizin için bu sorgu hata vermeyecektir.

The ID ‘*’ is already used by another control.

ASP.NET de eğer sayfamızda birden fazla aynı id de kontrol varsa bu hatayı alırız:

The ID ‘*’ is already used by another control.

Kontrolün id sini düzelttiğimiz zaman problem ortadan kalkar.

TC kimlik no doğruluk kontrolü

TcKimlikNo web servisi kapanıp ücretli bir hale geldikten sonraKimlik Numarası tesbiti yapmamız gereken durumlarda sıkıntıya düşüyoruz.

Fakat TC kimlik numaraları bir algoritmaya göre verildiği için basit formlarda kullanıcı’nın doğru kimlik numarası girip girmediğini tesbit etmek için şu metodu kullanabiliriz:


public bool TCKimlik(string no)
{
   if (no.Length != 11) { return false; }
   int sayi = 0;
   for (int i = 0; i < 10; i++) sayi += int.Parse(no.Substring(i, 1));
   return sayi.ToString().Substring(sayi.ToString().Length - 1, 1) == no.Substring(10, 1) ? true : false;
}

Algoritmanın temeli; ilk 10 rakamın toplamının onlar basamağı, 11. rakama eşit çıkmak zorunda,
Burada kullanıcı deneme yanılma yaparak doğru gösterebilir tabi, ama hiç yoktan iyidir…

Web.Config’de değer tutmak

Web uygulamalarımızda çoğu zaman değerini dışarıdan almaya ihtiyaç duyduğumuz değişkenler olur bunları tutmak için en iyi yöntem Web.Config içindeki appSettings bölümüdür.

<appSettings>
<add key=”HostName” value=”127.0.0.1″ />
</appSettings>

Eklediğimiz bu parametrenin değerine şu şekilde ulaşabiliriz:
VB.NET

AppSettings.Item(“HostName“)

C#.net

ConfigurationSettings.AppSettings["HostName"].ToString();

Fakat bu sınıfı kullanabilmek için code sayfamızın başına System.Configuration.ConfigurationSettings namespace’ini eklememiz gerekiyor.
VB.NET

Imports System.Configuration.ConfigurationSettings

veya
C#.net

using System.Configuration.ConfigurationSettings;

SQL’de önceki ve sonraki kayıt

SQL de önceki ve sonraki kaydı bulmak için hazır bir komut yok ama bunun için şu komutları kullanabiliriz.

id name
17 kayit1
42 kayit2
9 kayit3
77 kayit4
65 kayit5

SELECT top 1 name FROM db where id<42 order by id desc  --42 den önceki
SELECT top 1 name FROM db where id>42 order by id --42 den sonraki 

Telekom’dan 8 kat yavaş internet bağlantısı

Turk Telekom bu aralar reklamlarda duyurduğu VDSL2 nin reklamını yapadursun, halihazırda kullandığımız ADSL hızları yerlerde sürünür oldu.

Bu aralar server’ı yurtdışında olan sitelere erişim hızı oldukça düştü, 1MB olan bağlantım Türk Telekom‘un kendi hız testinde 847.4 kbps/231.1 kbps çıktı ama speedtest.net sitesinden farklı serverlarda test ettiğimde yurt dışına doğru hız oldukça düştü. Bakalım bu işin sonu neye varacak !

Istanbul : adsl-ist

 

eskişehir : adsl-esk

 

paris : adsl-prs

 

washington : adsl-was