Volkan Atasever

Bilgisayar Mühendisi - Proje Yöneticisi - Yazılım Uzmanı & Danışmanı - Technologist - Speaker - Technology Researcher

Visual Studio Code'un Bugünü ve Geleceği

clock Aralık 15, 2015 17:06 by author Volkan Atasever

Microsoft'un kaynak kodlarını yayınladığı Visual Studio Code, gelecekte Sublime Text ve Atom'u geçebilir mi?

 

Visual Studio Code, hata ayıklama özellikleriyle, gelişmiş web ve bulut uygulamaları üstünde kodları düzenlemeye, yeniden tanımlamaya ve optimize etmeye yarar. Visual Studio Code tamamen ücretsiz olup, dilediğiniz gibi kullanabilir, kodlarını inceleyebilir ve kendi ihtiyaçlarınıza göre değişim yapabilirsiniz. Uygulama, çoklu platform desteğine sahip olduğu için Linux, Mac OS X ve Windows üzerinde çalışır ve programcılar için yaklaşık 30 programlama dili desteği sunar. Desteklediği dil, kütüphane, çatı ve platformların listesini aşağıda bulabilirsiniz:

  • Batch
  • C++
  • Clojure
  • Coffee Script
  • Dockerfile
  • F#
  • Go
  • Jade
  • Java
  • HandleBars
  • Ini
  • Lua
  • Makefile
  • Objective-C
  • Perl
  • PowerShell
  • Python
  • R
  • Razor
  • Ruby
  • Rust
  • SQL
  • Visual Basic
  • XML
  • Groovy
  • Markdown
  • PHP
  • Swift
  • CSS
  • HTML
  • JavaScript
  • JSON
  • Less
  • Sass
  • TypeScript
  • C#

Visual Studio Code, Mac OS X, Linux ve Windows işletim sistemlerinde CoreCLR ve ASP.NET 5 uygulamaları geliştirmek ve diğer dilleri desteklemek için sunulan bir kod düzenleme yazılımıdır. Intellisense, hata ayıklama, sürüm kontrol ve ASP.NET 5 uygulamaları en önemli özellikleri arasında yer alır. IntelliSense, kodları yazarken API'leri açıklar, hızı ve doğruluğu artırmak için otomatik tamamlama yapar. Hızlı bilgi ipuçları, API tanımlarını incelememize olanak sağlar.

 

Kodlar arasında ilişkilendirmeler yapması ve kodun yazım esnasında sorunlar hakkında bilgi vermesi, programcıya epey kolaylık sağlar. Node.js, TypeScript ve JavaScript için tümleşik hata ayıklama araçları ile birlikte gelir. Uygulamalarımızla ilgili sorunları belirtir. Visual Studio Code'un sunduğu özellikler sayesinde yazdığımız kod üstünde kesme noktaları belirler, özel durumlarda değişkenleri izleyebilir ve kodumuzu adım adım ilerletebiliriz. Git araçları sayesinde birden fazla katılımcının bulunduğu projeler için de büyük kolaylık sağlar. Herhangi bir uzak sunucuya (GitHub, Azure Web Apps, Visual Studio Team Services vb.) kodu checkin/checkout ederek Git üzerinde bağlantı kurmaya olanak sağlar. Visual Studio Code'un özelliklerinden bahsedip, tanıtımını yaptıktan sonra objektif fikirlerimi size sunmak isterim.

Microsoft platformları ile Windows üzerinde geliştirme yaparken yıllardan beri kazandığım deneyim, Visual Studio tümleşik geliştirme ortamı ve Notepad++ ile çalışmaktır. Bu platform için hâlâ bunu tercih etmeye devam edeceğim. Bildiğiniz gibi Visual Studio Community 2015 de ücretsiz sunulurken, bu ikili ve bazı geliştiriciye özel araçlar yeterli oluyor benim için.

 

Visual Studio Code'un geleceği

Linux ve Mac OS X üzerinde daha çok rağbet görebileceğini düşünüyorum. Yeni geliştiriciler, Microsoft platformu ile yazılım dünyasına adım atarlarsa, Visual Studio Code yaygınlığı ilerleyen yıllarda artabilir. Benim için şu anda ihtiyaç listemde değil. Çok ihtiyacım olduğu zamanlar haricinde, Linux üzerinde geliştirme yapmıyorum. Geliştirme yapsam da MS platformları ile etkileşime girmiyorum. Mac OS'a ise iPhone geliştirme için gerek duyuyorum.

Artık ticari olarak firmalar (IBM, Microsoft vb.) bulut bilişimi yaygınlaştırmaya para harcıyor. Gelişme araçlarının da oturduğunu düşünüyorum. Tabii ki her zaman daha gelişmiş özellikler gelecek ama bu tarz küçük uygulamalarla geliştiricileri heyecanlandırmaya çalışan bir Microsoft var karşımızda. Çoklu platform yazılımlarının mobil uygulamalar dışında çok değerli olduğunu düşünmüyorum. PhoneGap, Xamarin bunların başını çekiyor. Peki, ASP.NET geliştirmesini veya düzenlemesini Linux üstünde neden yapmalıyım?

Mac OS X sahibi geliştiriciler, her zaman makinesinde bir Windows tutmaktadır. Linux geliştiricileri çok katı kurallara sahip değillerse aynı şekilde Windows ve Mac OS X çalıştırmaktadır. Bunu sanal makineyle veya fiziksel kurulumla sağlayabiliyorlar. ASP.NET sunucu tabanlı çalışan ve bir sunucuya yükleme gerektiren bir web teknolojisi. Dolayısıyla da Windows ortamını kullanmak ve Microsoft teknolojileri kullanan bir sunucuya sahip olmak şart. Diğer taraftan, Xamarin'i bundan ayrı tutuyorum.

Linux üzerinde Visual Studio Code kullanılmasının avantajı ise kod düzenleme aracının gerçekten çok verimli olması. Visual Studio Code ile PHP, C++ geleneksel editörlerden daha iyi bir kullanım sağlayabilir. Dediğim gibi kullanılacak diller yine Linux üzerinde çalışacak diller olacaktır.

Mac OS X tarafında Visual Studio Code ile aynı ılımlı düşüncelerim yok. Xcode yeterince gelişmiş ve geliştiricilerin aşina olduğu bir ortam. Visual Studio Code'un geleceği, yeni yazılım geliştiricilerin kullanım alışkanlıklarına bağlı olacak. Eğer mevcut sisteminizde Sublime Text ya da Atom gibi editör kullanıyorsanız, bunlarla devam edebilirsiniz. Yenilik arayanlar ve yeni başlayanlar için Visual Studio Code iyi bir alternatif.



Assembly Öğreniyorum - 2

clock Ekim 22, 2015 02:45 by author Volkan Atasever

Merhabalar arkadaşlar. Bu dersimizde Arm işlemcilerle Assembly öğrenmeye devam edeceğiz. Aynı zamanda kısa kısa problem çözümlerine de yer vereceğim. Bu sayede aktif alıştırmalar yapmanıza olanak sağlanacaktır. Örneğin bir kod yazdığımızda bunun 1 ve 0 lar ile değeri nedir veya 32 bitlik bir sistem de 64 bitlik 2 sayıyı nasıl toplarım gibi mantıksal sorulara da cevap arayacağız.

32 bitlik bir sistemde 64 bitlik 2 sayıyı nasıl toplarım sorusunun cevabını vermek isterim öncelikle.

Toplam c ve toplanan iki sayı a ve b olsun. Bu durumda 32 bitlik 2 register kullanmak zorundayız. ARM işlemcimizde toplam register sayısı 16 tanedir. Registerlarımızında kısıtlı olduğunu unutmayalım. Bunun için sayıyı 32 bitlik 2 parçaya bölmemiz gerekir

c=a+b

 

Burada asıl mesele r serisi registerlarımızı kullanırken ilk 32 bitlik bölümde elde olduğu zaman ne yapmamız gerektiğidir. Eldeyi tutmassak sonucu yanlış hesaplamış oluruz. Bunun için c sayısını r4 e veya r3e ekleyeceğiz. S statüs komutu ile c registerı oluşturulur ve elde buraya yazılmış olur.

ADDS r5,r2,r1

ADC r6,r3,r4

Bu kısma değindikten sonra ARM işlemcimizde birden fazla komut kullanabileceğimizden bahsetmeliyiz.

Bunlar;

TEQ, TST, CMP, CNG Gibi komutlardır.

Cmp komutu ise iki sayı arasında karşılaştırma yapar Compare kelimlerinin kısaltılmışıdır. Bu işlemi ise iki sayıyı birbirinden çıkartarak yapar eğer fark 0 değilse bu durumda sayılar eşit değildir.

CMP r1,r2

Diğer bir örneğimiz ise;

4 ile bir sayıyı çarpacaksanız 4 ile çarpmazsanız sayınız 2 bit sola kaydırırsınız Bu da 2 üzeri 2 ile çarpmak anlamına geliyor.

i kaydırmak 2 üstü i ile çarpmak demektir.

sağa kaydırma ise tam sayı bölmedi. 3 ü 2 ye bölerseniz 1 elde edersiniz aynı şekilde i bit sağa kaydırırsanız 2 üzeri i ye bölmüş olursunuz.

kaydırma işlemleri için c bayrak registerıda kullanılıır. yani status registerı değiştiriliyor bu durumda.

LSL  ---------> Logical Shift Left

LSR ----------> Logical Shift Right

ALSL, ALSR komutları ise aritmetik kaydırma yapmak için kullanılır.

Diğer önemli bir sorun ise;

Bir sayının negatifini almak için o sayının 2’ye tümleyeneni almanız gerekmektedir.

-9 sayıyı - ye çevirmek için 2ye tümleyeni alınacak

 

-9 u 2 ye tamsayı bölmek istiyorum bunun için 1 bit sağa kaymalı

LSR -9,1  ------------> 0111 1011 -> bu negatif değil

ASR -9,1 ---->          1111 1011 -----> farkı son biti tekrar kendine yazıyor bu sayede negatiflik duruyor son bit MSB’dir. Yani işaret bitidir.

Assembly öğrenirken karşımıza çıkacak en önemli 3 konu şöyledir;

1- Registerlar

2- Komut Formatları

3- Adresleme Modları

 

Komutlara örnekler:

add r1,r2,r3

add r1,r2, #5

add r1,r2,r3, lsl #5

add r1,r2,r3,lsl r4

armda dallanma nasıl oluyor

armda 3 tip akışı değiştiren durum mevcut

1. si şartsız dallanma

herhangi şartı gözetmeden nereye isteniyorsa oraya dallanır komutumuz B komutudur.

 

B Adres

Örnek;

B EXIT

.

.

.

EXIT

 

2. si şartlı dallanma

BEQ

BNE

.

.

.

 

B den türetilmiş komutlardır

 

BEQ durum registerınıdaki Z bitine bakıyor ve 1 se yürütülüyor durum registerındaki Z biti 0 sa komut yürütülmüyor

bunu da öncesindeki işlem sağlıyor.

AŞAĞIDA ÇIKARTMADA SIFIR oluşmussa z biti 0 ise yürütülmeyecek 1 ise yrütecek

SUBS r1,r2,r3

BEQ EXIT

.

.

.

EXIT

Bazı eklerin anlamları şöyledir;

NE -> not equal

GT -> greater than

AL -> always

CS -> carry set

PL -> N clear yani pozisitfse

 

3. durum komutun şartlı yürütülmesidir.

alt programa dallanma için BL komutunu kullanıyoruz.

 

BL YORDAM

geri dönüş adresini bir yerde saklamamız lazım o da Link Register(LR). bu sayede geri dönmemiz gerekli yordam bittikten sonra

BL link registerda PC registerına kayıt yapmış olur. PC Program Counterdır. R0 dan R15 e kadar

genel amaçlı register var R15 de PC registerıdır.

BL YORDAM

 

MOV PC,LR

yordama parametre nasıl yollayacağım içiçe 100 yordam çağıracaksam geri dönüşleri nasıl yapacağım

bunun çözümü stackdir

registerlar stacke yedeklenmelidir

bellek bir stack gibi kullanıyoruz. kimi stack kimi heap kimi interrupt için kullanılacak. hepsi ram bellek üzerindedir.

4 tip stack var

yukarı genişleyen stack TOS -> Top Of Stack

yukarı genişleyen stack stack pointer yazılabilecek boş noktayı gösteriyor

aşağı doğru genişleyen stack aşağı tepesini gösterir

aşağı doğru genişler stack point yazılacak boş noktayı aşağıya doğru gösterir.

 



Assembly Öğreniyorum -1

clock Ekim 14, 2015 10:35 by author Volkan Atasever

Eğer benim siteme ve bu yazıya rastladıysanız bilişim ve bilgisayar bilimleri ile ilgileniyorsunuz demektir.

Alt seviyeli programlama olan assembly ile işlemcinin de komut setini kullanarak yapamayacağını bir şey yoktur. en alt seviye programlama olduğundan assembly dilini bilgisayar bilimlerinde uzmanım diyen birisinin mutlaka bilmesi gerekir. Normal hayatında uygulamıyorsa dahi en azından assembly dili ile program yazmış veya yazabilecek düzeyde olması beklenir. Bir bilgisayarın mimarisini başka türlü kavrayamaz ve hakim olamazsınız.

Yapacağımı küçük bir yazı dizisi olmasına rağmen ilk yazımda sizlere assembly nedir assemler nedir gibi kavramların üzerinde durmayacağım. Bununla ilgili çok sayıda kaynak var. Wikipedia veya bir sürü sitede 80'lerden beri olan kaynaklara rastlayabilirsiniz. Ben size pratik olarak nasıl assembly dilinde program yazabileceğimizi anlatıyor olacağım.

 

Wikipedia'ya göre assembly dilleri; https://tr.wikipedia.org/wiki/%C3%87evirici_diller

Assembly dilinin özel kullanım alanları vardır. Bunlar;

 1- Bilgisayar sistemini yakından tanımak için, 

2- Device driver (cihaz sürücüleri) yazmak için, 

3- Chip’lere program yüklemek için (PIC, microcontroller gibi...) 

4- İşletim sistemlerinin yapımında (OS), 

5- Şifre kırma ve Hacking işlemleri için, 

6- Virüs programları yazmak için, 

7- Elektronik tablo’lama (Excel gibi) programlarında.

kaynak:(Csharpnedir - eren erener)

Birkaç assembly örneği yaparken kullanacağım Arm işlemci olacaktır. Bunun için Texas Instrunmentsin geliştirme kitini kullanacağız. Kullanacağım kitin modeli Texas Instruments Tiva™ C Series EK-TM4C123GXL Geliştirme Kiti'dir.

Size 3 adet register ve ramde iş yapan assembly kodunu paylaşacağım. Bu assembly programlarını yazarken ve test ederken Texas Instrumentsin kendi geliştirme ortamını değil keil isimli geliştirme ortamını kullandım.

Keil ortamını kurmak için: www.keil.com adresini kullanabilirsiniz.

Şu anda temel assembly örnekleri vereceğim. daha sonra bu kodların geniş açıklamasını ve yeni örnekleri de sizinle paylaşıyor olacağım. Arm işlemciler ile assembly öğreniyorum küçük bir yazı dizisiz olacağından siz aşağıdaki assembly kodlarını incelerken serinin diğer yazıları hazırlanıyor olacaktır.

İlk Assembly Örneğimiz:

AREA main_kod, CODE, READONLY

ENTRY

 

EXPORT SystemInit

EXPORT __main

EXPORT __use_two_region_memory

 

__use_two_region_memory EQU 0

 

SystemInit

BX LR

 

__main 

 

LDR R0,=SAYI1

LDR R1,=SAYI2

 

LDR R3,[R0]

LDR R4,[R1]

 

ADD R5,R3,R4

SAYI1DCD 5

SAYI2DCD 8

 

 

END

 

İkinci Assembly Örneğimiz:

AREA main_kod, CODE, READONLY

ENTRY

 

EXPORT SystemInit

EXPORT __main

EXPORT __use_two_region_memory

 

__use_two_region_memory EQU 0

 

SystemInit

BX LR

 

__main 

 

LDR R0,=SAYI1

LDR R1,=SAYI2

 

LDR R3,[R0]

LDR R4,[R1]

 

ADD R5,R3,R4

 

LDR R5,=SONUC

STR R6,[R5]

 

SAYI1DCD 5

SAYI2DCD 8

 

DONGU

B DONGU

 

AREA bellek, DATA,READWRITE

SONUC DCD 0

 

END

 

Üçüncü Assembly Örneğimiz:

AREA main_kod, CODE, READONLY

ENTRY

 

EXPORT SystemInit

EXPORT __main

EXPORT __use_two_region_memory

 

__use_two_region_memory EQU 0

 

SystemInit

BX LR

 

__main 

 

LDR R0,=SAYI1

LDR R1,=SAYI2

 

LDR R3,[R0]

LDR R4,[R1]

 

ADD R5,R3,R4

ADD R7,R3,R4, LSL #2

 

LDR R5,=SONUC

STR R6,[R5]

STR R5,[R0, #4]

 

SAYI1DCD 5

SAYI2DCD 8

 

DONGU

B DONGU

 

AREA bellek, DATA,READWRITE

SONUC DCD 0

 

END

 

Bir sonraki yazımızda register, komutlar, ram bölgesi vb. kavramları anlatırken aynı zamanda bu uygulamalarımızın adım adım ne yaptığını açıklayacağız.

 



AngularJS Başlangıç İpuçları

clock Temmuz 29, 2015 07:59 by author Volkan Atasever

Bu kategoride angularjs ipuçları vermeye çalışacağım. ilk vereceğim ipucu genel ve yeni başlayanlar için olacaktır. Zaman buldukça angulajs kategorisini ipuçları ve örneklerle geliştireceğim.

AngularJS kullanmaya yeni başladıysanız fakat öncesinde javascript veya jquery ile geliştirme yaptıysanız hiç zorlanmayacağınızı söyleyebilirim. 

Angularjs ile html tarafında bir değişkenin değerini almak için {{değer}} parantezlerini kullanabilirsiniz.

Angularjs'i projenize eklemek için;

<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>

taglerini kullanabilirsiniz.

ng-init, ng-model,ng-disable,ng-hide,ng-click, ng-bind, ng-repeat gibi direktifler öncelikle işinizi görecektir. scope'lara dikkat etmek gerekir. O an çalıştığını scopetaysanız bir değeri $scope.degerismi veya doğrudan degerismi olarak çağırabilirsiniz. Eğer değişken üst scopetaysa $parent kullanmanız gerekir.

 



Güneş Doğuş ve Batış Saatlerini Hesaplama

clock Temmuz 29, 2015 07:37 by author Volkan Atasever

Bazen yaptığımız projelerde spesifik işlerle karşılaşabiliyoruz. Şu anda üzerinde çalıştığım işte güneş doğuş ve batış saatlerini dünyanın herhangi bir yerinin koordinatlarını vererek bulmak gerekti. Bildiğiniz gibi koordinatlar latitude ve longitude değerleri olarak gelmekte. Bunun için daha önce yapılmış bir C# sınıfı buldum fakat bu sınıf sadece derece, dakika ve saniye cinsinden değerlerle çalışıyordu. bunun için latitude ve longitude değerlerinide derece, dakika ve saniye cinsine çevirmem gerekti. hemde North, West, East ve South değerleriyle vermemiz gerekiyor. North- South ve East-West ikilileri koordinatın - ile gelip gelmemesine göre değişmektedir.

Öncelikle Sunset ve Sunrise yani gün doğumu ve gün batımı değerlerini aldığım kodu açıklayacak ardından üstüne geliştirdiğim lat ve long değerlerini derece,dakika ve saniye cinsine yaptığım çevrimi ve ek özelliği paylaşacağım.

Bu işlemin önemi eğer bir lokasyondaki gün doğumu ve batımı saatlerine ihtiyacınız olursa bunun için çoğu kişi web servis kullanıyor. Bu hazır sunulan web servisler ya bazen down oluyor ya da doğru sonucu vermiyor. bu sınıf ve geliştirdiğim ek özellik sayesinde bir web servise ihtiyacınız olmadan lokal olarak bu özelliği kullanabileceksiniz. GMT'ye dikkat etmeyi unutmayın.

Sınıfdaki metotun kullanımı aşağıdaki şekildedir;

SunTimes.Instance.CalculateSunRiseSetTimes(new SunTimes.LatitudeCoords

                       (latDegreeValue, latMinuteValue, latSecondValue, SunTimes.LatitudeCoords.Direction.South),

                                    new SunTimes.LongitudeCoords

                       (longDegreeValue, longMinuteValue, longSecondValue, SunTimes.LongitudeCoords.Direction.East),

                                    date, ref sunrise, ref sunset,

 

                     ref isSunrise, ref isSunset);

 

Geliştirdiğim özellik latitude ve longitude üzerinden çevrim aşağıdaki gibidir;

        static void Main(string[] args)

        {

            double lat = 40.266864;

            double lng = 29.063448;

 

            DateTime date = DateTime.Today;

            bool isSunrise = false;

            bool isSunset = false;

            DateTime sunrise = DateTime.Now;

            DateTime sunset = DateTime.Now;

 

            string strLatitude = lat.ToString();

            string strLongitude = lng.ToString();

            int latitudeRoute = 0;

            int longitudeRoute = 0;

 

            if (strLatitude[0] == '-')

            {

                latitudeRoute = 0;

            }

            else

            {

                latitudeRoute = 1;

            }

 

            if (strLongitude[0] == '-')

            {

                longitudeRoute = 0;

            }

            else

            {

                longitudeRoute = 1;

            }

 

            bool latDegreeFinish = false;

 

            int latMinuteCounter = 0;

            string latDegree = "";

            string latMinute = "";

            string latSecond = "";

            bool degreeFlag = false;

            

            for (int i = 0; i < strLatitude.Length - 1; ++i)

            {

                if (strLatitude[0] == '-')

                    continue;

 

                if ((strLatitude[i] != '.' && strLatitude[i] != ',') && latDegreeFinish==false)

                {

                    latDegree += strLatitude[i];

                }

                else if(degreeFlag==false)

                {

                    latDegreeFinish = true;

                    degreeFlag = true;

                    continue;

                }

 

                if (latDegreeFinish == true && latMinuteCounter < 2)

                {

                    latMinute += strLatitude[i];

                    latMinuteCounter++;

                }

 

                if (latMinuteCounter >= 2 && latMinuteCounter < 4)

                {

                    latSecond += strLatitude[i];

                    latMinuteCounter++;

                }

            }

 

            bool longDegreeFinish = false;

            string longDegree = "";

            string longMinute = "";

            string longSecond = "";

            int longMinuteCounter = 0;

            degreeFlag = false;

 

            for (int i = 0; i < strLongitude.Length - 1; ++i)

            {

                if (strLongitude[0] == '-')

                    continue;

 

                if ((strLongitude[i] != '.' && strLongitude[i] != ',') && longDegreeFinish == false)

                {

                    longDegree += strLongitude[i];

                }

                else if(degreeFlag==false)

                {

                    longDegreeFinish = true;

                    degreeFlag = true;

                    continue;

                }

 

                if (longDegreeFinish == true && longMinuteCounter < 2)

                {

                    longMinute += strLatitude[i];

                    longMinuteCounter++;

                }

 

                if (longMinuteCounter >= 2 && longMinuteCounter < 4)

                {

                    longSecond += strLongitude[i];

                    longMinuteCounter++;

                }

            }

 

            int latDegreeValue = Convert.ToInt32(latDegree);

            int latMinuteValue = Convert.ToInt32(latMinute);

            int latSecondValue = Convert.ToInt32(latSecond);

            int longDegreeValue = Convert.ToInt32(longDegree);

            int longMinuteValue = Convert.ToInt32(longMinute);

            int longSecondValue = Convert.ToInt32(longSecond);

 

            if (latitudeRoute == 0 && longitudeRoute == 0)

            {

                SunTimes.Instance.CalculateSunRiseSetTimes(new SunTimes.LatitudeCoords

                       (latDegreeValue, latMinuteValue, latSecondValue, SunTimes.LatitudeCoords.Direction.South),

                                    new SunTimes.LongitudeCoords

                       (longDegreeValue, longMinuteValue, longSecondValue, SunTimes.LongitudeCoords.Direction.West),

                                    date, ref sunrise, ref sunset,

                     ref isSunrise, ref isSunset);

            }

            else if (latitudeRoute == 0 && longitudeRoute == 1)

            {

                SunTimes.Instance.CalculateSunRiseSetTimes(new SunTimes.LatitudeCoords

                       (latDegreeValue, latMinuteValue, latSecondValue, SunTimes.LatitudeCoords.Direction.South),

                                    new SunTimes.LongitudeCoords

                       (longDegreeValue, longMinuteValue, longSecondValue, SunTimes.LongitudeCoords.Direction.East),

                                    date, ref sunrise, ref sunset,

                     ref isSunrise, ref isSunset);

            }

            else if (latitudeRoute == 1 && longitudeRoute == 0)

            {

                SunTimes.Instance.CalculateSunRiseSetTimes(new SunTimes.LatitudeCoords

                       (latDegreeValue, latMinuteValue, latSecondValue, SunTimes.LatitudeCoords.Direction.North),

                                    new SunTimes.LongitudeCoords

                       (longDegreeValue, longMinuteValue, longSecondValue, SunTimes.LongitudeCoords.Direction.West),

                                    date, ref sunrise, ref sunset,

                     ref isSunrise, ref isSunset);

            }

            else if (latitudeRoute == 1 && longitudeRoute == 1)

            {

               bool err= SunTimes.Instance.CalculateSunRiseSetTimes(new SunTimes.LatitudeCoords

                       (latDegreeValue, latMinuteValue, latSecondValue, SunTimes.LatitudeCoords.Direction.North),

                                    new SunTimes.LongitudeCoords

                       (longDegreeValue, longMinuteValue, longSecondValue, SunTimes.LongitudeCoords.Direction.East),

                                    date, ref sunrise, ref sunset,

                     ref isSunrise, ref isSunset);

                Console.WriteLine(err);

            }

            else

            {

                ;

            }

 

            Console.WriteLine(sunset.ToString());

            Console.WriteLine(sunrise.ToString());

            

 

            Console.ReadLine();

 

        }

 

Uygulamanın bir gün için verdiği güneş batım ve doğum saatleri;

 

 

Uygulamanın C#kodları:

sunrisesunset.zip (52,96 kb)

 

Uygulamanın Sunrise ve Sunset Calculator sınıfı için baz aldığım referans: http://www.codeproject.com/Articles/29306/C-Class-for-Calculating-Sunrise-and-Sunset-Times

 



Duyurular

-C# 6.0 kitabıma online olarak eklediğim son bölümü pdf olarak ücretsiz indirebilirsiniz. Kitabımı edinenler kitapta olmayan bu bölümü mutlaka indirsinler. C# 6.0 kitabım ile ilgili tüm yorumlarınızı ve sonraki baskılarda olmasını istediğiniz özellikleri C# 6.0 Kitabı postunun altına yorum olarak yazabilirsiniz.

Volkan Atasever Kimdir ?

E-Mail: volkan@volkanatasever.com
Founder / Software4Galaxy

Bilgisayar Mühendisi

Programlama Yazarı

Kitaplarım

   

Dergi Yazılarım

 

Sosyal Ağlarım

 

   

 

   

Instagram  

Open Source Projeler

Son Yorumlar

Comment RSS

Yasal Bilgi

Sitedeki yazıları,kodlar ve diğer materyaller Volkan Atasever'e aittir. Yazarı ve siteyi kaynak göstererek yazıları paylaşabilirsiniz.  Copyright(c)2004-2016

Sign In

Yazılım