6 Kasım 2017 Pazartesi

Multiple types were found that match the controller named 'Home'. This can happen if the route that services this request ('{controller}/{action}/{id}') does not specify namespaces to search for a controller that matches the request. If this is the case, register this route by calling an overload of the 'MapRoute' method that takes a 'namespaces' parameter.


Bazı durumlarda eğer bir solution altında birden çok proje kullanıyor ve bu projelerde asp.net mvc projesi ile çalışıyor iseniz birden fazla HomeController ınız olur ise aşağıdaki hatayı alabilirsiniz.


Multiple types were found that match the controller named 'Home'. This can happen if the route that services this request ('{controller}/{action}/{id}') does not specify namespaces to search for a controller that matches the request. If this is the case, register this route by calling an overload of the 'MapRoute' method that takes a 'namespaces' parameter.


Bu durumda sorunu çözmek için yapmanız gereken şey sadece RouteConfig.cs dosyanızda MapRoute işlemine  yeni bir parametre daha ekleyerek kullanılan controller namespace inizi belirtmektir.

Örnek olarak aşağıda bold olarak işaretlenmiş kodu inceleyebilir ve kendi projenizde sadece ilgili satırı ekleyebilir, problemi çözebilirsiniz.

 public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "GamePayment.WebAdmin.Home", action = "Index", id = UrlParameter.Optional },
                namespaces: new[] { "ProjeNameSpace.Controllers" }
            );
        }
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

11 Ekim 2017 Çarşamba

Angular URL Escape character problem solving


While you try to redirect anything with url query paremeter with angular property, you may have problem with url encoding. my problem was # character to search with hashtag.

example url which I was going to trying and fall to problem : www.websitename.com/search?searchkey=#somehastagword

if try it like that, you will have problem :
<a href="www.websitename.com/search?searchkey={{ hashtagValue}}"> {{ hashtagValue}} </a>


you should use escape filter as following;

angular.module('angularModuleName').filter('escape', function () {
    return function (input) {
        if (input) {
            return window.encodeURIComponent(input);
        }
        return "";
    }
});


use it in html like that :

<a href="www.websitename.com/search?searchkey={{ hashtagValue | escape }}"> {{ hashtagValue}} </a>


After added angular filter function in our angular app, we solved our problem deal with url parameter escape characters.Now we have result url as following:

http://www.websitename.com/search?searchkey=%23searchkeyword
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

14 Ağustos 2017 Pazartesi

Yandex Kurumlar Eposta Ek Yönetici Yetkisi Tanımlama


Uzun zamandır google ın eposta kullanımını ücretli hale getirmesinden sonra herkez yandex kurumlar eposta alt yapısını kullanmaya başladı.

Öncelikle herkes kolay bir şekilde mail alt yapısını yandex e taşıyabiliyor fakat bir süre sonra yaşanan sorun bu eposta yönetici yetkisini devretme yada yeni birini eposta yönetici olarak tanımlama ihtiyacı ortaya çıkıyor.


Bu durumda kurumlar yandex alt yapısındaki eposta alt yapınız için yeni birine yönetici yetkisi vermek için izlemeniz gereken adımlar sırası ile aşağıdaki gibidir.


1.mail.yandex.com.tr ye girerek yönetici hesabınızın mail ini açın
2.kurum.yandex.com.tr ye girin, burada yöneticisi olduğunuz eposta sunucularını görebilir, yeni bir eposta alt yapısı ekleyebilirsiniz.

3.Şimdi sıra geldi yeni bir yönetici atama işlemi için öncelikle yetki alma işlemine, bu url yi alan adınızı değiştirerek url ye yapıştırıp enter a basın.
https://api.kurum.yandex.com.tr/get_token.xml?domain_name=alanadi.com.tr

4.İlgili url ye gittiğinizde sayfada bir xml veri yapısı karşınıza çıkacak bu bölümdeki token değerini kopyalıyoruz.

5.Şimdi  aşağıdaki link üzerinden gerekli alanları değiştirip yine tarayıcımıza yapıştırıyoruz ve yetki işlemi tamam.

URL : https://api.kurum.yandex.com.tr/api/multiadmin/add_admin.xml?domain=alanadi.com.tr&token=yourtoken&login=adminlogin

Değişmesi gereken alanlar: 

alanadi.com.tr -> buraya eposta alt yapısını değiştirmek istediğiniz alan adınızı yazıyorsunuz.
yourtoken -> bu alana kopyalamış olduğumuz token değerini koyuyoruz.
adminlogin -> Bu alana yönetici olarak tanımlamak istediğiniz yeni eposta adresini yazıyorsunuz.

Ve işlem tamam bu linke gittiğinizde ekranda size yeni admin ve eposta alt yapısı ile ilgili kısa bir bilgilendirme gelecek ve işlem tamamdır :)
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

7 Haziran 2017 Çarşamba

How to Drop All the tables, procedures, views and related things in database


/* Drop all non-system stored procs */
DECLARE @name VARCHAR(128)
DECLARE @SQL VARCHAR(254)

SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'P' AND category = 0 ORDER BY [name])

WHILE @name is not null
BEGIN
    SELECT @SQL = 'DROP PROCEDURE [dbo].[' + RTRIM(@name) +']'
    EXEC (@SQL)
    PRINT 'Dropped Procedure: ' + @name
    SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'P' AND category = 0 AND [name] > @name ORDER BY [name])
END
GO

/* Drop all views */
DECLARE @name VARCHAR(128)
DECLARE @SQL VARCHAR(254)

SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'V' AND category = 0 ORDER BY [name])

WHILE @name IS NOT NULL
BEGIN
    SELECT @SQL = 'DROP VIEW [dbo].[' + RTRIM(@name) +']'
    EXEC (@SQL)
    PRINT 'Dropped View: ' + @name
    SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'V' AND category = 0 AND [name] > @name ORDER BY [name])
END
GO

/* Drop all functions */
DECLARE @name VARCHAR(128)
DECLARE @SQL VARCHAR(254)

SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] IN (N'FN', N'IF', N'TF', N'FS', N'FT') AND category = 0 ORDER BY [name])

WHILE @name IS NOT NULL
BEGIN
    SELECT @SQL = 'DROP FUNCTION [dbo].[' + RTRIM(@name) +']'
    EXEC (@SQL)
    PRINT 'Dropped Function: ' + @name
    SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] IN (N'FN', N'IF', N'TF', N'FS', N'FT') AND category = 0 AND [name] > @name ORDER BY [name])
END
GO

/* Drop all Foreign Key constraints */
DECLARE @name VARCHAR(128)
DECLARE @constraint VARCHAR(254)
DECLARE @SQL VARCHAR(254)

SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' ORDER BY TABLE_NAME)

WHILE @name is not null
BEGIN
    SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)
    WHILE @constraint IS NOT NULL
    BEGIN
        SELECT @SQL = 'ALTER TABLE [dbo].[' + RTRIM(@name) +'] DROP CONSTRAINT [' + RTRIM(@constraint) +']'
        EXEC (@SQL)
        PRINT 'Dropped FK Constraint: ' + @constraint + ' on ' + @name
        SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' AND CONSTRAINT_NAME <> @constraint AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)
    END
SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' ORDER BY TABLE_NAME)
END
GO

/* Drop all Primary Key constraints */
DECLARE @name VARCHAR(128)
DECLARE @constraint VARCHAR(254)
DECLARE @SQL VARCHAR(254)

SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' ORDER BY TABLE_NAME)

WHILE @name IS NOT NULL
BEGIN
    SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)
    WHILE @constraint is not null
    BEGIN
        SELECT @SQL = 'ALTER TABLE [dbo].[' + RTRIM(@name) +'] DROP CONSTRAINT [' + RTRIM(@constraint)+']'
        EXEC (@SQL)
        PRINT 'Dropped PK Constraint: ' + @constraint + ' on ' + @name
        SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' AND CONSTRAINT_NAME <> @constraint AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)
    END
SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' ORDER BY TABLE_NAME)
END
GO

/* Drop all tables */
DECLARE @name VARCHAR(128)
DECLARE @SQL VARCHAR(254)

SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'U' AND category = 0 ORDER BY [name])

WHILE @name IS NOT NULL
BEGIN
    SELECT @SQL = 'DROP TABLE [dbo].[' + RTRIM(@name) +']'
    EXEC (@SQL)
    PRINT 'Dropped Table: ' + @name
    SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'U' AND category = 0 AND [name] > @name ORDER BY [name])
END
GO
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

6 Haziran 2017 Salı

XCode Swift App Error: the maximum number of apps for free development profiles has been reached


English Part :

When you exceeded limit of publishing app to your device. this error message appear, don't worry about it just delete one of published app in your device(iphone, ipad, etc.) then try to run it your device in xcode again.



Türkçe Bölüm :
XCode ile uygulama geliştirirken genellikle geliştirdiğimiz uygulamaları telefon ve tabletlerimize yüklemek ve test etmek isteriz. Ve eğer cihazlarımıza yüklediğimiz uygulama sayısı 3 ü geçti ise XCode karşımıza böyle bir hata çıkarır çünkü ücretsiz apple hesabı ile daha fazla uygulama cihazınıza yükleyemezsiniz.

Problemi çözmek için cihazınızdan 1 uygulama silmeniz yeterli. Yeni uygulamanız için otomatik olarak yer açacaktır.
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

5 Haziran 2017 Pazartesi

could not locate device support files xcode 8 iphone




Solution English Part :

While you are trying to simulate your XCode ios app in your phone, you may see this error message as "could not locate device support files. xcode". In this situation, you just need to download and update latest XCode version in App Store. it can be solve your problem easily.


Türkçe :

XCode üzerinde geliştirdiğiniz uygulamayı kendi telefonunuzda test etmeye çalıştığınızda "could not locate device support files." şeklinde bir hata alabilirsiniz bu muhtemelen XCode un eski telefonları similator olarak desteklenmediğinden kaynaklanmaktadır.

Çözüm olarak XCode unuzun güncel versiyonunu indirmeniz sorunu çözmek için yeterlidir.



Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

3 Haziran 2017 Cumartesi

Github vs bitbucket


Github ve bitbucket ı tüm yazılımcılar muhtemelen çoğunlukla duyuyordur. Bu yazıda bunları genel anlamda ne olduğunu ve aralarındaki farkların ne olduğunu anlatmak istedim.


Github tüm dünya üzerindeki yazılım geliştiriciler tarafından kullanılan popüler bir platform, şöyle diyebiliriz ki eğer github üzerinde bir projeniz var ise ve birkaç da proje eklediyseniz yazılımcılar arasında bunu söylediğinizde çok havalı olabilirsiniz.

Hatta ve hatta bir iş başvurusu, görüşmesinde referanslarım ve yaptığım işlerle ilgili github hesabıma göz atabilirseniz demeniz çoğunlukla işe alınmanızda diğerlerine göre sizi bir hatta birkaç adım öne çıkartacak ve işe alınmanıza sebep olacaktır :)

Şimdi çıtayı yükselttik, oldukça havalı hale getirdik. Nedir bu github ?

Github ve bitbucket aslında hemen hemen aynı şeyler. İki amaç için kullanılabilir.
1.Versiyon Kontrol : Projeleriniz için bir versiyon kontrole ihtiyacınız var ise yada kodlarınızı bulutta güvende tutmak istiyorsanız bu araçları kullanabilirsiniz. Evet ilk satırdan anlaşıldığı gibi bu platformlar bir çeşit versiyon kontrol sistemi.

Versiyon kontrol sistemleri kodlarınızın her versiyonunu tutan, skıntı yaşadığınızda geçmiş kodlarınızı geri dönebileceğiniz yada göz atabileceğiniz, takım halinde tek bir projede aynı anda rahatca çalışabileceğiniz araçlardır.

2.Proje Paylaşım ve Bir Toplulukla Projeyi Geliştirmek:
Github üzerinde projelerinizi herkese açabilir insanların görüp inceleyip yorumlarda bulunmasını , katkıda bulunup projelerinizi geliştirmenize yardımcı olmanızı sağlayabilir, açık kaynak olarak projelerinizi burada tutabilrisiniz.

Projelerinizi genele açabildiğiniz gibi kimseye göstermeden dış erişime kapalı halde de bu platformları kullanabilirsiniz.



Peki Hangisini Tercih Etmeliyim ? 
Eğer projelerinizi paylaşma gibi bir amacınız var ise kesinlikle Github kullanın derim, çünkü oldukça popüler ve tüm dünya tarafından erişilebilir bir profil, proje paylaşımınız olur.


Fakat eğer projelerinizi bulutta versiyon kontrolü olarak tutup da başkaları ile paylaşmak isterseniz Github sizden para istiyor. Bu noktada bitbucket kullanabiliyorsunuz. Bitbucket gizli projelerinizde de ücretsiz hesap sağlıyor. Ücreti sadece 5 kullanıcıdan fazla kişi projelerinize erişmek istediğinde istiyor ki bu da küçük takımlar için gayet uygun maliyetli bir sistem.


Sonuç olarak bu iki sistem de aynı işi yapıyor, seçim için projelerinizi gizli mi tutacak yoksa genel paylaşıma açacakmısınız bu duruma göre hangisni kullanabileceğinizi seçebilirsiniz.

Soruları olanlar yorum yazabilir. Memnuniyet ile cevaplarım.





Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

1 Haziran 2017 Perşembe

IOS Development - [UIImageView copyWithZone:]: unrecognized selector sent to instance


English Part :

if you have this type of problem anytime or your first app, don't worry about it. It just the classical crash for ios developers.
Just click to "Main.storyboard" on left pane, then right click to "View Controller" then you should see warning message of your any variable, just click cancel icon and don't worry debug your application again. its not going to showing again :)
thats all.



Türkçe Bölüm :

Uygulama geliştirme esnasında yada ilk uygulama geliştirme denemenizde bu hata ile karşılaşabilirsiniz. Bu ios geliştiricilerin karşılaştığı yaygın bir hatadır. Muhtemelen verdiğiniz bir isim ile ilgili bir problem oluşmuştur.

Problemi çözmek için aşağıdaki adımları izlemeniz yeterli:
- Sol panel den "Main.storyboard" a tıklıyoruz.
- "View Controller" a sağ tuş tıklıyoruz
- Bu ekranda karşımıza bir ünlem işareti çıkıcak, bu ünlemin yanındaki çarpı işaretine tıklayın
- Projeyi durdurup tekrar derleyin
- İşlem tamam uygulama tekrar çalışıyor :)
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

1 Mayıs 2017 Pazartesi

Firewall dan Sql Uzaktan Erişim Portunu Açma


Sunucunuzdaki sql server a eğer localdeki bilgisayarınızdan yada başka bir sunucudaki yazılım yada sql management studio üzerinden erişim sağlamak istiyor ama erişemiyor iseniz muhtemelen sunucunuzda firewall aktif durumdadır.

Firewall unuzu pasif konuma getirdiğinizde uzaktan erişim sağlayabiliyorsanız problem firewall dan kaynaklanıyordur hala erişim sağlayamıyorsanız sql server ın TCP portlarını da açmanız gerekir fakat ben burada o detaya girmiyor sadece firewall kapandığında erişim sağlanıyor ise wirewall açıkken sql erişim portunu nasıl açarsınız onu anlatıyor olacağım.


Firewall üzerinden Sql Portu Açma İşlemi
1.  Firewall u açmak için başlat -> çalıştır tıklıyoruz ve wf.msc yazıp enter a basıyoruz ve firewall ayarlar ekranı açılıyor.

2. Sol menüden Inbound  Rules kısmını tıklıyoruz ve New Rules seçeneğini tıklıyoruz.

3. Burada karşımıza gelen ilk ekrandan biz port açma işlemi yapacağımız için Port Kutucuğunu işaretliyoruz. 

4. Sonrasında karşımıza Protocols and Port ekranı çıkıyor buradan TCP seçeneğini seçiyoruz ve alt kısmından Spesific local ports seçeneğini seçip 1433 yazıyoruz.

5.  Action penceresine geçiyoruz ve buradan Allow the connection kutucuğunu işaretliyoruz.

6. Sonraki ekranda Profile penceresinde erişime izin verdiğimiz kısımlar için seçim yapıyoruz yada varsayılan olarak seçili gelen kısımları aynen bırakıp ileri diyoruz.

7. Name penceresine geldiğimizde burada yaptığımız işlemi tanımlayan "Sql Remote Port Access" gibi birşey yazıyoruz ve tamam diyoruz.

İşlemimiz tamamlandı artık uzak sunuculardan sql server ımıza bağlantı sağlanabilir.
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

29 Nisan 2017 Cumartesi

Windows Server İşletim Sistemine Microsoft Security Essential Yüklemek


Windows Server işletim sistemi normal şartlarda Microsoft Security Essential ücretsiz antivirüs programını desteklemiyor. Eğer indirip kurmayı denerseniz size işletim sitemi desteklemiyor yada farklı bir hata verebilir.

Bu durumda microsoft un önerdiği bir çözüm yolu bulunmaktadır.

Peki neden bu yazılımı doğrudan yükleyemiyoruz ? 
Microsoft bu yazılımı windows 7 ve windows 8 e uyumlu olarak hazırladığı için windows server da Microsoft Security Essential kurmaya çalıştığınızda uyumluluğu olmadığı için hata alıyorsuuz.

Şimdi gelelim adım adım bu yüklemeyi nasıl yapabiliriz ?

1. Microsoft un sitesinden windows 7 uyumlu olarak Microsoft Security Essential yazılımını indiriyoruz.
2. İndirdiğimiz .exe dosyasına sağ tuş özellikler diyoruz. Ardından uyumluluk (compatible) tabına tıklayıp burada uyumluluk check ini işaretleyip buradan windows 7 seçiyor ve tamam a basıyoruz.

3.Ardından indirdiğimiz dosya yoluna cmd ekranından geliyoruz ve "mseinstall.exe /disableoslimit" yazıp enter a basıyoruz ve işlem başarıyla gerçekleşiyor.
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

25 Nisan 2017 Salı

Jquery ile Mobile Site yönlendirmesi


Bu aralar sık sık karşıma çıkan birşeyi hem paylaşmak hemde ihtiyacım oldukça buradan kullanmak için bir yazıya dökmek istedim.


Eğer sitenizi mobil versiyon ile birlikte kullanıyor iseniz sadece aşağıdaki kodu yerleştirmeniz sitenize birisi mobil den girdiğinde otomatik yönlendirme için yeterli olacaktır.


<script>
            /**
* jQuery.browser.mobile (http://detectmobilebrowser.com/)
*
* jQuery.browser.mobile will be true if the browser is a mobile device
*
**/
(function(a){(jQuery.browser=jQuery.browser||{}).mobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))})(navigator.userAgent||navigator.vendor||window.opera);

if (jQuery.browser.mobile==true) {

    window.location.href = "https://mobil.siteadiniz.com";
}
        </script>




Ayrıca eğer sitenizde parametreler kullanıyor ve mobil ve normal site arasında yönlendirme yaparken parametrelere göre yönlendirme yapmak istiyorsanız da güzel bir örnek veriyor olacağım.


Örneğin e-ticaret sitemizin olduğunu ürün ve kategoriler için querystring e göre sayfa gösterimi yaptığımızı düşünelim. Bu durumda ana siteden parametreleri alıp mobilde istediğiniz şekilde url de değişiklikler yaparak mobil e yönlendirme yapabilirsiniz.


<script>
            /**
* jQuery.browser.mobile (http://detectmobilebrowser.com/)
*
* jQuery.browser.mobile will be true if the browser is a mobile device
*
**/
(function(a){(jQuery.browser=jQuery.browser||{}).mobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))})(navigator.userAgent||navigator.vendor||window.opera);

if (jQuery.browser.mobile==false) {

//Ürün Id parametresi var ise alıyoruz.
var pId = getParameterByName("ProductId");
//kategori Id parametresi var ise alıyoruz.
var cId = getParameterByName("categoryID");

//Şimdi sayfamız çağrılırken herhangi bir paremetre var mı diye kontrol ediyoruz.
if(cId!=null && cId.length > 0)
{
window.location.href = "https://mobil.siteadimiz.com/default.aspx?cid="+cId;
}else if(pId !=null && pId.length > 0){
window.location.href = "https://mobil.siteadimiz.com/ProductDetail.aspx?pid="+pId;
}else{

//Eğer sitemizde parametre yok ise normal mobil siteye yönlendirme yapıyoruz.
    window.location.href = "https://mobil.siteadimiz.com";
}
}

//bu fonksiyon bizim url deki parametresleri querstring key vererek değerini getirmemizi sağlıyor.
function getParameterByName(name, url) {
if (!url) url = window.location.href;
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
        </script>
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

5 Nisan 2017 Çarşamba

Sitemizde Seo Çalışması ile Arama Motorunda Nasıl Yükseltiriz


Seo çalışması her ne kadar çok kapsamlı bir çalışma olsa da yeni açılan sitenizde yapabileceğiniz temel şeyler vardır. Bu temel işlemleri yaptığınzıda google sayfalarınızı indexleyebilir ve hem google tarafında hemde sitenizde belirli ölçüde bir kalite sağlamış olursunuz.

Ben bu yazımda bir wordpress sitemiz olduğunu ve google da sitemizi yükseltmek istediğimizi düşünüyorum ve bu varsayım ile devam ediyorum.

Aşağıda adım adım yapmanız gereken işlemleri yazıyor olacağım bu işlemler ile ilgili google da küçük bir arama yaptığınzıda nasıl yapılacağına dair onlarca kaynağa çok rahat ulaşabilirsiniz.

SEO Başlangıç İşlemleri


1.Google Web Master Tools a kayıt

2.Site haritamızın hazırlnması ve Google WebMaster Tools a eklenmesi

3.Sitemizde anahtar kelime öbeklerinin belirlenmesi ve sitemizdeki başlıklara ve sayfalarımızda oluşturacağımız etiket sistemleri ile bu kelime öbeklerinin desteklenmesi.
Bu işlemleri wordpress de etkili bir şekilde yapmak için All In One SEO Pack eklentisini kullanabiliriz.

4.Google Performans Tool Çalışması
4.1.Resimlerin sıkıştırılması işlemi : https://tinypng.com/ tool unu kullanarak bu işlemi hızlı ve kaliteli bir şekilde yapabilirsiniz.
4.2.Minify işlemleri : Bu işlemler için wordpress de cache sistemi ve skıştırma sistemlerini destekleyen eklentiler kurabiliriz comet cache ve Autoptimize eklentilerini yükleyip kullanabiliriz.

5.Sitenizde seo işlemlerinin yeterince yapılıp yapılmadığını ve istediğiniz anahtar kelimedeki google sıralamanızı https://wmaraci.com sitesinden kontrol edebilirsiniz.

SEO ANALİZİ İÇİN KULLANILMASI TAVSİYE EDİLEN

 - Site Haritası kayıt
 - Site detaylı Analiz
 - Site hızu ve seo için yapılması gereken işlemleri öğrenme

En sık kullanılan ve şiddetle kontrolünün gerektiği site . https://developers.google.com/speed/pagespeed/insights/

 İçerisinde google ile ilgili bir çok işlem için size ilham olabilecek bilgiler içerir. Bunun dışında siteniz için yapılacak bir çok şeyi görüp nasıl yapabileceğinizi görebilirsiniz.

Başlıca WM Araçları aşağıdaki gibidir.
 - Site Analiz
 - Seo Analiz
 - Google Sıra Bulucu
 - Kod Tasarım Araçları
 - Site Araçları

3.analiz.r10.net

Siteniz seo analizlerinde bir çok fonksiyonu bulunan güzel bir araç.

SİTE İYİLEŞTİRME ARAÇLARI


Sitenizi tablet, telefon, laptop ve telefon modeline göre görüntüleyebileceğiniz ve buna göre düzenlemeler yapabileceğiniz araçları içerir.

Site page rank sorgulama yapbileceğiniz bir site.

3. 

Seo İçin Faydalı Araçlar


 - sitenizdeki kırık linklerin kontrolü için güzel bir araç : http://webseoanalizi.com/broken-links-finder

 - sitenizdeki css dosyalarının sıkıştırmak(minify) etmek için : http://webseoanalizi.com/css-minifier

 - Javascript minify aracı : http://webseoanalizi.com/js-minifier

 - sitenizdeki resim dosyalarını sıkıştırmak için(google page speed için çok önemlidir) : http://webseoanalizi.com/image-optimizer

Toplu olarak bir çok araca ulaşabileceğiniz web sitesi :  http://webseoanalizi.com/



Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

19 Şubat 2017 Pazar

Visual Studio Projemizi Local Git Repository den nasıl sileriz.


Bazı durumlarda local git repository kullanırken projemizi başka bir versiyon kontrol sistemine geçirmek isteyebiliriz.

Bu durumda yapmamız gereken tek şey proje dizinine girip gizli dosya olarak bulunan git klasörünü silmek olacak.Bu işlemi yaptığımızda projemiz local git repository den otomatik olarak silinecektir ve sonrasında projemizi istediğimiz versiyon kontrol sistemine ekleyip kullanabiliriz.
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

30 Ocak 2017 Pazartesi

c# .net reflection Could not load file or assembly 'file:///.dll' or one of its dependencies. Operation is not supported.


Eğer .net reflection ile dinamik olarak dll ve içerisindeki class ı yükleyen bir uygulamanız var ve sunucuya uygulamayı taşıdığınızda böyle bir hata alıyorsanız tek yapmanız gereken ilgili dll üzerine sağ tuş tıklayıp UnBlock a tıklamak ve Tamam a tıklamak.Bu dll lerinizi reflection ile yüklenebilir hale getirecek ve uygulamanız çalışmaya devam edecektir.
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

26 Ocak 2017 Perşembe

Netsis NetOpenX50 Nesnesini C# Visual Studio Üzerinde Çalıştırma


Netsis ile sipariş, ürün, fiyat, stok entegrasyonları yaparken NetOpenX apisini kullanmamız gerekiyor.

Netsis kullanan bir firma ile entegrasyon geliştirmeden önce yapmamız gereken şey firmanın netopenx api lisansı alıp almadığını öğrenmeliyiz.Bunu onaylattıktan sonra Visual Studio projemize NetOpenx50 dosyasını referans olarak eklemek kalıyor.

Projemize referans eklemek için öncelikle NetOpenX50.dll ini bilgisayarımıza indiriyoruz.Ardından komut sataırına girerek aşağıdaki komutu vermeliyiz.

regsvr32 C:\Netsis\NetOpenX50.dll

Bu işlem sonrasında NetOpenX50 dosyamızı com objesi olarak işletim sistemimize kayıt etmiş oluyoruz.

Hemen ardından visual studio projemizi açarak projenin üzerinde References kısmına sağ tuş tıklayarak yeni referens ekle diyoruz.Ardından çıkan pencereden sol panelden COM objelerini seçiyoruz ve orada "NetOpenX50 Kütüphanesi" alanı zaten çıkıyor ve direk seçip referans olarak projemize ekleyebiliyoruz.

NetOpenX50 apisinin kullanımı için her dilde entegrasyon kod örneklerini ve gerekli tüm dökümantasyona aşağıdaki linkten ulaşabilirsiniz.

URL : https://docs.logo.com.tr/display/NUA/




Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

Web Sitesi Dil Yönlendirmesi Yapmak


Birden fazla dil alt yapısına sahip web sitemiz olduğunda Ip bazlı sitemize gelen talebe göre link yönlendirmesi yapma gibi ihtiyaçlarımız olabilir.Bunu her sitede her yazılım dilinde kolayca kullanabileceğimiz bir js koduyla yapmak en mantıklısıdır.

Aşağıdaki js kodu ile "freegeoip"  gibi yaygın kullanılan bir api yi kullanarak sitemizin hangi ülkeden açıldığını rahatlıkla takip edebilir ve yönlendirme yapabilirsiniz.

Aşağıdaki kod da "freegeoip" sitesindeki ilgili apiye POST yöntemiyle bir talepte bulunuyoruz ve Ip mzin hangi ülke ve şehire ait olduğu verilerini alabiliyoruz.

Ayrıca localStorage  ı kullanarak sadece sitemize ilk giriş yapan için yönlendirme yapabileceğimiz bir alt yapı sağlamış oluyoruz.Ayrıca url mizdeki url yolunu da alarak ingilizce yada türkçe siteye yönlendirme yaparken yine aynı dosya yoluna yönlendirip ulaşılan sayfanın ingilizcesi yada türkçesine yönlendirme yapabiliyoruz.

<script>
jQuery.ajax( {
  url: '//freegeoip.net/json/',
  type: 'POST',
  dataType: 'jsonp',
  success: function(location) {
   
var isshow = localStorage.getItem('isshow');
    if (isshow== null) {
        localStorage.setItem('isshow', 1);
  var path = window.location.pathname;

    
    if (location.country_code=="TR")//eğer sitemiz türkiyeden açılıyor ise
    {
        //eğer url tr dizinini içermiyor ise türkçe sitede değiliz demektir ve türkçe site yönlendirmesi yapıyoruz.
        if(path.indexOf("tr")<1)
        {
          window.location.href = "http://www.siteadimiz.com/tr/" + path;
        }
      
    }else//eğer sitemiz türkiyeden açılmıyor ise yapılacaklar
{
        
       //eğer sitemizin url sinde tr dizini var ise yani türkiye sitemize bağlanılmış ise yönlendirme yapıyoruz.
        if(path.indexOf("tr")>0)
        {
           window.location.href = "http://www.siteadimiz.com/" ;//+ path;
        }
    }
     }


//freegeoip apisinin bize verdiği diğer tüm bilgiler aşağıdaki gibi.Bu alandaki diğer verileri de kullanarak sitemide gerekli yönlendirme ve işlemleri yapabiliriz.
    // jQuery('#city').html(location.city);
    // jQuery('#region-code').html(location.region_code);
    // jQuery('#region-name').html(location.region_name);
    // jQuery('#areacode').html(location.areacode);
    // jQuery('#ip').html(location.ip);
    // jQuery('#zipcode').html(location.zipcode);
    // jQuery('#longitude').html(location.longitude);
    // jQuery('#latitude').html(location.latitude);
    // jQuery('#country-name').html(location.country_name);
    // jQuery('#country-code').html(location.country_code);
  }
} );

</script>
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

Sql Log Dosyası Boyutu Düşürme


Zamanla özellikle sık veri işleme yaptığımız veri tabanlarımızda log dosyaları oldukça büyük boyutlar kaplayabilir.Bu boyutları düşürmek için aşağıdaki sorguyu kullanabilir basit bir şekilde sql log dosyamızın boyutunu gb lardan , mb lara düşürebiliriz.

USE VeriTabanıAdı
select name,recovery_model_desc from sys.databases
ALTER DATABASE VeriTabanıAdı SET RECOVERY simple
DBCC SHRINKFILE (VeriTabanıAdı_Log , 1)




Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

5 Ocak 2017 Perşembe

Isparta Yolculuğum


Yakın zamanda yıllar önce mezun olduğum okuluma tekrar gitme fırsatım oldu.Bundan 8 yıl önce Isparta Senirkent ilçesinde Senirkent Meslek Yüksek Okulu - Bilgisayar Programcılığı Bölümünden mezun olmuştum ve yıllar sonra kardeşimi de yine aynı okula yerleştirdim ve o da o izmirden yaşadığımız yerden 8 saat uzaklıkta olan küçük köyde yaşama fırsatı buldu.Ben buranın insanı gerçekten olgunlaştırdığını, yaşam şartlarıyla insanın hayatına başka bir bakış açısı kattığına inanmışımdır hep.

Şimdi kardeşim okulunu bitirdi ve Staj evraklarını teslim etmesi gerekiyordu.Bende onunla atlayıp gittim ıspartaya, her ne kadar kış aylarında karlı buzlu yol koşulları olsa da birkaç kayma tehlikesi atlatsak yolda uçurumlardan uçma korkusuyla karlar altında yolculuk yapsak ta güzel bir yolculuk oldu.

Eski hocalarımı görmek, 2 en güzel yılımı geçirdiğim şehre tekrar geri dönmek gerçekten çok güzel ve anlamlıydı benim için.Bu güzel gün için birde kardeşim güzel bir video hazırlamış onu da paylaşmak istedim.Belki yolu oralara düşen biri görmek ister yolları ve şehri :)


Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.