Tags: , | Categories: Hata, IDE, SSS (FAQ), Tip Posted by okutbay on 14.12.2018 07:28 | Yorumlar (0)

Geçenlerde geliştirmekte olduğum bir projenin referanlarını güncellemek istedim. Ancak yeni referans ekleme penceresini görüntülemek istediğimde karşıma şı hata mesajı çıktı:  

The 'ReferenceManagerPackage' package did not load correctly.

Kısa bir araştırmadan sonra aşağıdaki çözüm adımlarına ulaştım.

Çözüm adımları :

VS 2017 developer komut satırını admin olarak çalıştır.

"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\PublicAssemblies" dizinine git. Eğer "Community" sürümünden farklı bir sürüm kullanıyorsanız dizinde "Community" yazan bölüm farklı olmalıdır. Ör. professional ya da enterprise gibi.

"gacutil -i Microsoft.VisualStudio.Shell.Interop.11.0.dll"  komutu çalıştırılır. Komut sonucunda kütüphane dosyası GAC (global assembly cache) bölümüne eklenir.

 
Böylece artık projeye referans ekleme sorunu ortadan kalkar. 
 

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: | Categories: Genel Posted by okutbay on 27.11.2018 21:25 | Yorumlar (0)

Üyesi olduğum İstanbul Coders grubunda sık sık yazılım geliştirme kariyerine adım atmak isteyen arkadaşların sorularına denk geliyorum. Bu soruların içinde azımsanmayacak kadar çok "yazılım kariyeri yapmak için yazılım mühendisi ya da mühendis olmak şart mı?" sorusu ile karşılaşıyoruz.

Bu sorunun cevabı bence hem evet hem hayır. Yazılımı meslek olarak seçmek burada yükselmek için mühendis olmak şart değil ama kanımca belli bir noktanın ötesine geçmek için mühendislik eğitimi sizin önünüzü açıcı, işinizi kolaylaştırıcı bir faktör olarak yardımcı olabilir.

Bu yazımızda doğrudan teknoloji ya da yazılım geliştirme konularından bahsetmeyeceğim ama 4 yıllık bir bölüm mezunu olup bu bölümle ilgili iş bulma konusunda sorun yaşayan arkadaşların arkadaşların kariyer dönüşümlerini bir diploma ile destekleyebilecekleri bir oluşumdan bahsedeceği.

Bu oluşum bir üniversite. Sadece internet üzerinden (uzaktan) eğitim yapan bir üniversite. Bu üniversite için farklı 4 yıllık bölümlerin yanında lisans üstü programları da mevcut. Yazılım kariyeri ile ilgili olarak Yazılım Mühendisliği bölümü bu anlamda mevcut hayatınızı ciddi şekilde etkilemeden tabiri caizse oturduğunuz yerden diplolma alabileceğiniz bir bölüm.

İşin güzel tarafı ise her hangi bir 4 yıllık bölüm diplomasına sahipseniz bu bölümü bitirip diploma alabiliyorsunuz. Ama en güzeli ise bence ücreti. Bu yıl ücreti 2.000 TL'yi geçmiyor. İlk bakışta bir çok insan 4 yıl için 8.000 TL' yi yüksek birmaliyet olarak görebilir ama kendinizi yaptığınız ve geri dönüşünü fazlasıyla alacağınız güzel bir yatırım. Ayrıca bunu birden ödemeyeceğiz gibi yıla ait ücreti kredi kartına taksit bir yapıyorlar.

Konuyla ilgili daha fazla öğrenmek isteyen arkadaşları üniversitenin web sitesini ziyarete davet ediyoruz.

Internet Üniversitesi Web Sitesi

Kariyer arayışınızda bol şans dilerim.

 

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , | Categories: Security, Tip, Uygulama Posted by okutbay on 16.10.2018 21:47 | Yorumlar (0)

Postman, RESTful API testlerimizde işimizi çok kolaylaştıran bir uygulama. Şahsen arayüzünü başarılı buluyorum.

Öte yandan geçen öğrendiğim bir ipucu ile bu uygulama benim için çok daha kolay kullanılabilir bir hal aldı. Etrafımla bu ipucunu bir kaç kez paylaştıktan sonra kullananlar arasında çok da bilinmediğini fark ederek bu yazıyı yazmaya karar verdim.

Genelde RESTful API diyince bir kullanıcı adı ve şifre ile token aldığınız ve de bu token ile takip eden istekleri yaparak ilgili metodların yanıtlarını alarak testlerimizi gerçekleştiriyoruz.

 
Yukarıdaki örnekte görülen token bilgisinü tüm diğer isteklerlerde aşağıdaki gibi header bilgisi içinde tanımlayarak isteklerimizi yapıyoruz.
 

 
Bu yaklaşım az sayıda metod olsa bile farklı test senaryoları düşünülürse token bilgisinin geçersiz olması durumunda ne kadar çok istek bilgisi içinde bu token bilgisinin güncellenmesi gerektirir.
 
Postman uygulamasını geliştirenler bu sıkıntıyı önlemek için token bilgisinin miras (inherit) alınabilmesini sağlamışlar. Bu sayede tek bir yerde token bilgisini güncelleyerek tüm isteklerde güncel token bilgisinin kullanılabilmesini sağlamış oluruz. Kazandıracağı zaman düşünüldüğünde basit ama çok etkili bir özellik.
 

Peki bu özelliği nasıl kullanacağız? 

Öncelikle metodlarınızı zaten farklı klasörler içinde sınıflandırdığımızı varsayarak bir üst gruplama daha yapmamız gerekiyor. Token isteyen tüm metodları "Secure" adını verebileceğimiz bir klasöre, token alabileceğimiz ve token istemeyen metodları da bu klasör dışında kalacak şekilde grupluyoruz.
 
 
 
Bu noktada aldığımız token bilgisini Secure klasörü altındaki tüm isteklerin kullanabilmesi için "EDIT FOLDER"diyerek açılan pencerede Authorization sekmesinde tip olarak "Bearer Token" (ya da sizin senaryonuza uygun olan tip) seçimini yaptıktan sonra "Token" metin kutusu içine önceki istekde edinmiş olduğumuz token bilgisini yapıştırıp "UPDATE" diyerek kaydediyoruz.
 
 
 
Bu yöntemle ile token alacak tüm isteklerimiz için "Inherit auth from parent" olarak ayarlanmış olması gerekiyor. Yeni bir istek oluşturduğunuzda varsayılan olarak bu şekilde geldiği için en başka bu şekilde oluşturmak en kolayı
 
 
Böylece "SEND" butonuna tıklayarak istekde bulunduğunuzda uygulama sizin için bu bilgileri otomatik olarak Header bilgisine ekleyecektir. Eklenen bu bilgi aşağıdaki gibi gözükecektir. Sizin eklediğiniz durumdan farkı olarak değeri seçip kaldırmanızı sağlayan baş taraftaki işaret kutusu bu durumda bulunmayacaktır.
 
 
 
 
Klavyeleriniz şen ola...
 
Ozan 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

1 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , | Categories: SSS (FAQ), Tip, Web Uygulaması Posted by okutbay on 11.10.2018 18:56 | Yorumlar (0)

Selamlar herkese,

Sanırım bir başlığı açmam gerekecek. ASP.NET Core MVC ile geliştirdiğim web uygulamasını nasıl güncelleyiyorum? Size bu yazımda biraz bundan bahsetmek istiyorum.

Geliştirme ortamı olarak Visual Studio 2017 kullanıyorum ancak Visual Interdev'den bu yana çok uzun yıllardır burada pek bir değişiklik olmadı. O yüzden gelecekte de köklü bir değişiklik beklemiyorum.

Öncelikli olarak kendi geliştirme ortamınızda değişikliklerinizi yaptınız. Varsa testlerinizi çalıştırdınız, yoksa kodunuzun işlevlerini fonksiyonel olarak test ettiniz, her şeyin olması gibi çalıştığına kanaat getirip canlı ortamdaki uygulamanızı güncellemeye karar verdiniz.

Şimdi size adım adım izlediğim yolu ve püf noktalarını vermeye çalışacağım.

Sahnenin Kurulması

Daha önce bir ya da bir kaç release çıktığım bir projeyi güncelleyeceğim. O yüzden sistemde hazırlanmış release dosyaları olması muhtemel. Hatta başka projeler de olabilir. O nedenle ben şöyle bir klasör yapısı kullanmayı uygun görüyorum: "C:\Projeler\Release\ProjeAdi\UygulamaAdi"

Örnek ile açıklamam gerekirsetüm kaynak kodları C:\Projeler altında dururken tüm çıktığım paketleri C:\Projeler\Release klasörü altında topluyorum. Ancak bunu yaparken de bir proje altında birden fazla deploy edilmesi gereken web uygulaması, API vb. olabileceği için proje adıyla açtığım klasörün altında da ürün ya da uygulama adıyla açılmış bir klasör içine publish ediyorum. Mesela bugün URLSohertener adlı projenin URLShortener.Web uygulamasını güncelleyeceğim için bu uygulamaya publish çıkacağız.

Publish edilecek folder ve üst folder içinde şu an bulunan dosyalar şunlar:

 

Görüldüğü üzere uygulama adının yanında tarihler yazan bazı rar dosyalar var. Bunlar önceki çıkılan publishlerin sıkıştırılmış yedekleri. Ben yöntem olarak çıktığım her release paketini sıkıştırılmış ve tarihlenmiş olarak saklıyorum. Tarihler neden önemli birazdan göreceğiz.

Not: Tabi ki CI/CD ile yapmak çok şık olur ama bireysel olarak bir şeyler yapmaya çalışırken her şeyi dört dörtlük yapmaktan önce ortaya birşeyler (MVP - Minimum Viable Product) çıkartıp insanların kullanımına sunmak daha öncelikli bir hal alıyor.

 

Publish (Release) Çıkılması

Visiual Studio ile açık olan solution üzerinde publish yapılacak projeadı üzerine faremizle ters tıklayarak combo menünün açılmasını sağlarız.

 
Açılan kombo menü üzerinde "Publish" seçeneğine tıklayarak projeye ait daha oluşturulmuş publish profil detaylarının görüntülendiği ekran çıkacaktır.
 
 
 
Ekran görüntüsünde görüleceği üzere burada publish profil adı ve publish butonun dışında nereye publish yapılacağı, mevcut dosyaların silinip silinmeyeceği, yapılacak publish için debug/release konfigurasyonu bulunmakta.
Her zaman bu ekran üzerinde yeni bir profil tanımlayabileceğiniz gibi actions altından profil adını değiştirme ve profil silme işlemini yapabilirsiniz. Mevcut profil ayarlarını değiştirmek isterseniz "Configure..." bağlantısına tıklamanız yeterli olacaktır. Bu ekranda target locatio'a gitmek isterseniz tıklanabilir bir link konulmamış ama yolu clipboarda kopyalayabilmeniz için ufak bir buton eklenmiş.
 
Daha önce publish yapmadıysanız ilk seferde buradaki detayları ayarlamanız gerekebilir. O yüzden "Configure..." bağlantısına tıklayarak nasıl bir şeyle karşılacağınızı biraz anlatmak istiyorum.
 
 
Bağlantıya tıkladığınızda açılan popup ekranda sizi "Connection" ayarları karşılar.Bu ayarlar Publish Method ve Target Location ayarlarıdır.
 
Bu ayarlar içinde Publish method ile 4 farklı metoddan birini seçebilirsiniz.
 
 
Hepsinin detaylarına giremeyiz ama isimleri aslında ne olduklarını anlatıyor.
 
Biz "File System" seçiyoruz. Dosyaları harddiskimizde belirlediğimiz yere (Target Location) bırakmasını isteyeceğiz. Target Location ayarında yukarıda ayarladığımız klasörlerin seçili olduğunu göreceksiniz. 
 
Next butonuna tıklayarak sonraki ayar ekranına geçebiliriz. Bu ekranda bizi karşılayan ayarlar Configuration, Target Framewok, Deployment Mode, Target Runtime, File Publish Options, Database ayarları bulunmakta
 
 
 
Burada işler biraz karışıyor. Bu ekran gerçekten ne yaptığınızı bilmenizi gerektiren bir ekran. Bu nedenle bu ayarlara biraz daha detaylı bakalım.
Configuration (Debug/Release): Burada Release/Debug seçimi yaparak derlenecek dosyalaradebug yapmanızı kolaylaştıran ilavelerin yapılıp yapılmayacağına karar verirsiniz. Test ortamları dışında canlı ortamlara yapılacak publishler için kesinlikle "Release"seçilmelidir. Çünkü debug yapılacak şekilde derlenen kodların performansı daha düşük olacak ve canlı ortamda gereksiz performans kayıplarına neden olacaktır.
Target Framewok: Açıkçası burada sadece sistemde yüklü olan frameworkler listeleniyor mu yoksa sadece uygulamanın frameworkü mü listeleniyor bilmiyorum. Yani uygulamayı desteklenen farklı frameworkler release edebiliyor muyum fikrim yok. Muhtemelen sadece uyumlu olanı listeliyor. Çünkü sistemimde .NET Framework 4.7.2 olduğu biliyorum ama burada çıkmıyor.
Deployment Mode (Framework-dependent/Self-Contained): Bunu incelemedim ama isimlerinden anladığım kadarıyla self-contained seçildiği zaman gerekli framework dosyalarını da içerecek şekilde pakete ekliyor ve paketi şişiriyor diye tahmin ediyorum. O yüzden kurulum yapacağım sunucuda framework olduğu için ben Framework-dependent olarak ayarlıyorum.
Target Runtime (Portable/win-x86/win-x64/osx-x64/linux-x64): Burada kurulum yapılacak sunucun işletim sistemi ve işlemci mimarisine göre karar verebilirsiniz ya da benim gibi portable seçerek herhangi bir işletim sisteminde çalışacak şekilde paketinizi oluşturabilirsiniz. Paketiniz şimesin benim tek platform ile işim olur diyorsanız portable yerine onu seçmeniz önerilir.
File Publish Options: İşaretleyerek önceki publishe ait dosyaları silerek temiz bir klasör içine publish çıkılmasını sağlayabilirsiniz. Ben genelde bunu işaretliyorum. Değişen giden bir kütüphane, dosya vb. var ise paketin içinde kalmaya devam ederek şişkinlik yapsın istemiyorum.
Database: Eğer projenizde SQL server vb. ayarlanmış bir database var ise onunla ilgili bir bilgi veriyor. Ben MongoDB kullandığım için ne işe yarar, ne çıkar burada bir fikrim yok.
 
Temel konulara değindiğimize göre atrık publish butonuna tıklayabilir ve publish işleminin tamamlanmasını bekleyebiliriz. İlerlemeyi Web Publish Activity ekranında takip edebilirken, olup biteni detaylı olarak görmek için "Output" ekranına göz atabiliriz.
 
 
 
 
Evet publish'i çıktık ve deploymen aşamasına geçebilir dosyaları sunucuya atarak canlı ortamdaki yazılımın güncellenmesini sağlayabiliriz.
 
 
 

 

Deployment: Tam (Full) veya kısmi (parital)?

Publish sonunda projenin çalışması için gerekli tüm dosyaları dosya sisteminde oluşturduk.Bunların hepsini sunucuya kopyalabileceğiniz gibi sadece son deploymenttan sonra değişen dosyaların kopyalanmasını (partial deployment) terich edebilirsiniz.
 
Eğer partial deployment yapmaya karar verirseniz işte bu noktada hatırlarsanız yukarıda "Ben yöntem olarak çıktığım her release paketini sıkıştırılmış ve tarihlenmiş olarak saklıyorum. Tarihler neden önemli birazdan göreceğiz. " demiştim. Daha önce yapılmış olan deployment paketlerini sakladığım için son deployment tarihini hatırlamak gibi bir dertten kurtulmuş oluyorum.
 
Dosyaları publish ettim klasördeyken arama kutusuna şunu yazıyorum "datemodified:<={son-paket-tarihi}". Eğer yedekler içindeki en günce paket tarihi 31 Ağustos 2018 ise şu şekilde yazıyorum "datemodified:‎<=31.‎08.‎201".Böylece dosya sistemim benim için bu tarih dahil olacak şekilde eski dosyaları göstermiş oluyor. Tek yapmanız gereken listelenmiş dosyaları seçerek silmek ve sadece son deploymenttan bu yana değişmiş olan dosyaların kalmasını sağlamak
 
 
 
BONUS: Aynı günde yapılan farklı deployment durumlarında tarih yanına saat de yazabilirsiniz. Örnek: datemodified:‎<11.‎10.‎2018 13:00
 
Artık son adım olarak bu pakete dahil olan dosyaları klasörü ile sıkıştırıp, dosya adına tarih ekleyerek yedek olarak bir kenarda durmasını sağlarız.
 
Bu dosyayı aynı zamanda sunucumuza dosyaları kopyalamak için de kullanacağız.
 

Son Adım

Oluşturduğumuz publish dosyasını sunucumuza taşırız. Burada ister FTP yap, ister RDP o dosya sunucuna kopyalansın yeterki :D
Sonrasında ben şu adımları izliyorum. Bir tane deployment klasörüm var. Sıkıştırılmış dosya içeriklerini buraya açıyorum.
Publish yapılacak web uygulamasının bulunduğu klasörü her ihtimale karşı sıkıştırıp, tarih vererek yedekliyorum.
IIS kullanıyorsanız uygulamayı ve application poou durdururak kilitli dosyalar varsa bırakılmasını sağlıyoruz ki kopyalamada sorun çıkmasın.
Sonrasında deployment klasörüne açtığımız dosyaları uygulama klasöründeki dosyaları ezerek kopyalıyoruz.
Bu noktada en önemli konu eğer development için ayrı ayrı config dosyasınız yoksa ise canlı ortamdaki config dosyasınızı ezmeden varsa yeni eklenen ayarları bu dosyaya manuel olarak eklemektir.
Artık uygulamayı güncellediğimize göre tekrar IISde application pool ve uygulamayı start ediyoruz. Uygulama adresine gittiğimizde açılıyorsa ne mutlu bize. Haydi geçmiş olsun.
 
Bir başka yazımızda buluşmak üzere. Klavyeleriniz şen ola.
 
Ozan Kutlu Bayram
 
 

 
 
 
 
 
 

 
 

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Categories: Windows Uygulaması Posted by okutbay on 09.01.2018 09:11 | Yorumlar (0)

Sistem de saçma sapan bir yavaşlık vardı bir süredir. Gereksiz disk yoğunluğu falan. Önce virus sandim, panik falan :D

İş yerindeki bilgisayarda da oldu aynısı. Sistemci arkadaş Emrah ile biraz araştırınca Microsoft müşteri deneyim veri toplama hedesi diye bişi çıktı arkasından. Kapattık da rahat ettim. Dünya varmış.

Task Scheduler içinde CompatTelTunner.exe yi çalıştıran zamanlanmış görevi bularak devre dışı bırakabilirsiniz.
Kapatmak için "Computer Management –> System Tools –> Task Schedule Library –> Microsoft –> Windows –> Application Experience" ya da "Start -> Run -> taskschd.msc"

Name: Microsoft Compatibility Appraiser
Location: \Microsoft\Windows\Application Experience
Collects program telemetry information if opted-in to the Microsoft Customer Experience Improvement Program.
Right click on “Microsoft Compatibility Appraiser” and select “Disable” By default, it is set to start if there is ANY network connection.

1 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Posted by okutbay on 03.11.2017 08:33 | Yorumlar (0)

NuGet bize ciddi kolaylık sağlıyor. Ancak projeler arttıkça her proje için "packages" folderının aldında gerekli paketleri indirmesi gerekiyor. Bunun önüne geçmek için ".nuget" klasörü içinde bulunan "NuGet.Config" dosyasını güncellememiz gerekiyor.

<?xml version="1.0" encoding="utf-8"?> <configuration>   <config>     <add key="repositoryPath" value="D:\_SourceCode\Packages" />   </config>   </configuration>

Bu düzenlemeyi yaptıktan sonra artık projelerimiz patketlerini burada bildirilen dizin altında arayacaklardır.

Ancak bir diğer sıkıntıda projelerimizin yerini değiştirdiğimizde karşımıza çıkar 

Bunlardan ilki "missing nuget.target error "

Bunun düzeltmek için ilgili proje dosyası örneğin .csproj içinde gerekli düzenlemeleri yapmak lazım

  <Import Project="D:\_SourceCode\.nuget\NuGet.targets" Condition="Exists('D:\_SourceCode\.nuget\NuGet.targets')" />
  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('D:\_SourceCode\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', 'D:\_SourceCode\.nuget\NuGet.targets'))" />
  </Target>

Diğeri "unable to locate nuget.exe. Bunun için .nuget dizini içindeki nuget.targets dosyasında şu güncellemeyi yapmalıyız.

Dosya içinde "NUGETEXEPATH" kelimesini aratalım ve aşağıdaki satırı nuget.exe'nin yolu ile güncelleyelim

<NuGetExePath Condition=" '$(NuGetExePath)' == '' ">d:\_SourceCode\.nuget\NuGet.exe</NuGetExePath>

 Bir de son packages folderında "repositories.config" diye bir dosyamız var. Bu da projelerin altındaki packages.config dosyalarının yollarını içeriyor. Burada her bir proje için doğru yolun verilmiş olması gerekiyo.

 

This project references NuGet package(s) that are missing on this computer. 

Bu işlemleri yaptıktan sonra NuGet uygulamasini bir miktar dağıttığımız için diğer projelerde de bu hata mesajı gelebilir.

This project references NuGet package(s) that are missing on this computer.
Enable NuGet Package Restore to download them. 
For more information, see http://go.microsoft.com/fwlink/?LinkID=322105.
The missing file is D:\_SourceCode\Weblebici\Iyonsis.Services\\.nuget\NuGet.targets.   
Iyonsis.Services    D:\_SourceCode\Weblebici\Iyonsis.Services\Iyonsis.Services.csproj    375    

Hata mesajında sondaki rakam csproj dosyasındaki satır numarası.


  <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
  <Target Name="

EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
  </Target>

Yani gidiyor solution altında nuget dosyalarını arıyor bulamıyor. Buradaki tüm relative pathleri absolute olanlar ile nuget dosyalarını gosterecek şekilde tekrar değiştirdim.

  <Import Project="D:\_SourceCode\.nuget\NuGet.targets" Condition="Exists('D:\_SourceCode\.nuget\NuGet.targets')" />

  <Target Name="
EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('D:\_SourceCode\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', 'D:\_SourceCode\.nuget\NuGet.targets'))" />
  </Target>

 

 

 

 

 

1 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , , | Categories: Coding Disaster, Tip Posted by okutbay on 05.03.2014 19:45 | Yorumlar (0)

Selamlar, kod yazmak zor (dışarıdan çok kolay görünebilir) bir iştir. Gelecek cümle özellikle yeni başlayan, başlayacak arkadaşlar için. "Ama kod okumak çok daha zor bir iştir!"

O nedenle kod yazarken, bir süre sonra sizin ya da başka birinin bu kodu okuyup anlaması gerektiğini aklınızdan çıkarmadan üşengeçlik yapmamaya özen göstermek önemlidir.

Bu yolda kullanabileceğiniz en güçlü bedava araçlardan biri aynı kod blogunda olan (indent olarak aynı hizada olan) kod satırları arasında okumayı kolaylaştıracak boşlukları gerektiği kadar vermektir. Gerektiği kadar diyorum çünkü her satır arasına boşluk koymak da koymamakla aynı şeydir. Kodunuzun okunmasını zorlaştırır.

Örneğin şu kod bloguna bakin.

List<ContactMethod> contactMethods = new List<ContactMethod>();
ContactMethod contactMethod = null;
values = new System.Collections.ArrayList();
values.Add(LangID);
values.Add(companyID);
try
{
    command = x.DaoBase.DBHelper.GetCommand(type, "8", values);
    dr = command.ExecuteReader();
    if (dr != null)
    {
        while (dr.Read())
        {
            contactMethod = new ContactMethod();

Bunu yazarken şu şeklide yazmak okumayi ve kodu anlamayi kolaylaştıracaktır.

List<ContactMethod> contactMethods = new List<ContactMethod>();
ContactMethod contactMethod = null;
values = new System.Collections.ArrayList();
values.Add(LangID);
values.Add(companyID);

try
{
    command = x.DaoBase.DBHelper.GetCommand(type, "8", values);
    dr = command.ExecuteReader();
    if (dr != null)
    {
        while (dr.Read())
        {
            contactMethod = new ContactMethod();

Boşlukları vererek kod blogunda (aynı seviyede) yer alan kodları mantıksal olarak ilişkilerine göre gruplamış olduk aslında. Özellikle try, if gibi kod bloklarını aynı seviyedeki kodlardan ayırmak için öncesinde bir satır boşluk bırakmak iyi olur. Aynı seviyede olmayan try ve command arasına boşluk vermeye gerek olmadığını da söylemek isterim.

Olay bu kadar.

Klavyeler şen ola...!

12 kişi tarafından 2.3 olarak değerlendirildi

  • Currently 2,25/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , , , | Categories: Hata, Web Uygulaması Posted by okutbay on 28.02.2014 08:46 | Yorumlar (0)

Nowadays, i'm working on my CMS project called Weblebici CMS. I aimed to create very simple and lightweight CMS web application. But this is not the subject of this article.

Last night i created a simple default template but later i began to see some weird exception on my log. It was weird because there was not any detailed information about the problem.

It was a "System.Web.HttpException" and message says. "File does not exist". But there is no info which file exists. First i thought i used a file type which static file handler cannot access. I checked the extensions and nothing seemed wrong to me. Later i decided to check html output of the page. I checked line by line, file by file... I found nothing on the first pass. In the second pass i noticed the error.

 There was a relative url like "~/a/b.ext" and i forget to use this value as a paramter for @Url.Content() method. It was easy to fix but hard to find :D

 

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , | Categories: Fun Posted by okutbay on 28.01.2014 04:41 | Yorumlar (0)

Link için Fevzi Kaba'ya teşekkür ederim...

http://devopsreactions.tumblr.com/post/49667540079/trying-to-fix-someone-elses-css

 

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , | Categories: Fun, Programlama, Security, Tip, Web Uygulaması Posted by okutbay on 24.07.2013 21:26 | Yorumlar (0)

İlk web sayfalarımı yaparken içerik kopyalanmasını önlemek için çeşitli numaralar yapar kopyalayanın işini zorlaştırmaya çalışırdım. Sonraları bunun gereksizliğine inandım. Çünkü içeriğin kopyalanması engellemezdi ve ayrıca ziyaretçiler için sinir bozucu olabiliyordu. Ben de bu uygulamadan vazgeçtim. Ama görüyorum ki bazı sitelerin yöneticileri hala yazılımcılarından böyle önlemleri almalarını istemekte ve arkadaşlarımızın değerli zamanlarını ve emeklerini gereksiz konulara yönlendirmekteler. Yapmayın etmeyin. Boşverin isteyen istediğini kopyalasın. Unutmayın kilit dost içindir. Hırsız niyet ettiyse kilit falan dinlemez.

Neden yazdım bu kadar yazı. Çünkü sinirlendim. Okuduğum bir Yılmaz Özdil yazısını facebookda paylaşmak istedim. Açıklama kısmına yazıdan bir bölümü kopyalayıp yapıştırmak istediğimde başarısız oldum. Hemen bir word belgesi açtım. Seçili bölümü sürükleyip belgeye bıraktım. Ve işte metin buradaydı. Orada durmadım düz metine çevirmek için bir ne notepad açıp wordden oraya yapıştırdım. Oradan da facebook a.

Sonuç sadece insanları sinir ediyorsunuz...  

2 kişi tarafından 4.5 olarak değerlendirildi

  • Currently 4,5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5