tag:blogger.com,1999:blog-32708470538922786062024-03-12T23:08:19.752-07:00Furkan Uğur'un E-GünlüğüFurkan (Onka) Uğurhttp://www.blogger.com/profile/14651676688138936818noreply@blogger.comBlogger16125tag:blogger.com,1999:blog-3270847053892278606.post-16977252906941720542015-05-02T12:46:00.000-07:002015-05-02T12:46:48.907-07:00Raspbian Monodevelop 'ta Projeyi Çalıştıramama ve Hata Ayıklama YapamamaSorun biliniyor ve monodevelop paketinin bağımlılıklarında xterm geçmemesinden kaynaklanıyor.<br />
<br />
mono-complete ve monodevelop paketleri yüklü olmasına rağmen projenizi çalıştıramıyorsanız ("cannot execute file name has not been set" ya da "Could not connect to the debugger" metinlerinden biriyle karşılaşıyorsanız) büyük ihtimalle xterm ve x-terminal-console paketlerine sahip değilsiniz demektir.<br />
<br />
Konsolda "sudo apt-get install xterm" yazarak xterm paketini yükleyebilirsiniz.Furkan (Onka) Uğurhttp://www.blogger.com/profile/14651676688138936818noreply@blogger.com0tag:blogger.com,1999:blog-3270847053892278606.post-77472641602761531162015-04-30T13:33:00.001-07:002015-04-30T13:35:07.385-07:00Raspberry Pi 2 Model B'de Wolfram Mathematica Lisans Sorunu ve ÇözümüNOOBS ve Raspbian işletim sistemi imajı ile birlikte gelen ve tüm raspberry kullanıcılarına ücretsiz sunulan Wolfram ve Mathematica uygulamaları, yeni açtığınız kullanıcı hesabı ile açıldıktan sonra lisans anahtarı istiyorsa mevcut kullanıcı adını (terminalde "whoami" yazarak etkin oturumunuzdaki kullanıcı adını görebilirsiniz) video grubuna eklemeniz gerekmekte. Terminalde<br />
"sudo adduser {KULLANICIADINIZ} video" (tırnaklar olmadan) komutunu uygulayıp sistemi yeniden başlattığınızda sözü geçen uygulamaların lisans sormadan çalıştıklarını göreeksiniz.Furkan (Onka) Uğurhttp://www.blogger.com/profile/14651676688138936818noreply@blogger.com0tag:blogger.com,1999:blog-3270847053892278606.post-14538529356973646292014-02-16T10:08:00.001-08:002014-02-16T13:03:51.755-08:00Tanınmayan Android Cihazlarla Uygulama Geliştirmek<div style="text-align: justify;">
Bir süre önce aldığım PolyPad 8708 IPS üzerinde birkaç uygulama denemesi yapmak istedim. Zorlandığımı belirtmem gerekiyor. İsterseniz hangi sorunlar ile karşılaştığıma ve bunlara karşı ürettiğim çözümlere bakalım.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Tabletin ayarlar kısmından geliştirici seçeneklerini aktif hale getirdim. Sonra USB hata ayıklamayı etkinleştirdim.</div>
<div style="text-align: justify;">
<br />
Tableti bilgisayara bağladım fakat Windows 7 64 bit işletim sistemim gerekli sürücüyü yükleyemedi. Bu karşılaştığım ilk hataydı. İlk işim %AndroidSDK%\extras\google\usb_driver klasöründeki android_winusb.inf dosyasına Windows'un bana bildirdiği aygıt kimliğini girmek oldu. Aygıt kimliğine ulaşmak için donanım yöneticisinden ünlem işaretli 8708 IPS girdisini çift tıklatıp Ayrıntılar sekmesine girdim. Sekmedeki çoklu seçim kısmından da Donanım Kimlikleri'ni seçtikten sonra aşağıdaki görüntü ile karşılaştım (Şekil 1, Penceredeki başlık sizi yanıltmasın, sürücü doğru şekilde kurulduktan sonra görüntüyü aldığımdan ileri gelmekte).<br />
<br /></div>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><img alt="windows donanım kimliği" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCXTuHlOOiSmdUe8B8yCV03P1MiesbZ9-ZF2WNzb1y4R7LL-6_n32i0YaetGlrtutCk5CSA4xDPdfBfqW2VV-Q0U73l5NOav7T8QZA-czVylUuGjzWeAjD1MZ-mcsJwUsTkKWnlgGOAjA/s1600/donan%C4%B1mkimligi.png" height="400" style="margin-left: auto; margin-right: auto;" title="" width="357" /></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Şekil 1. Windows'ta donanım kimliğine ulaşma
</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div style="text-align: justify;">
Elime donanım kimliği de geçince sözü edilen inf dosyasında gerekli eklemeleri yaptım. Uzun uzadıya anlatmamak için tüm dosyanın içeriğini Kod 1'de görebilirsiniz.</div>
<div style="text-align: justify;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><script class="brush: cpp" type="syntaxhighlighter"><![CDATA[
;
; Android WinUsb driver installation.
;
[Version]
Signature = "$Windows NT$"
Class = AndroidUsbDeviceClass
ClassGuid = {3F966BD9-FA04-4ec5-991C-D326973B5128}
Provider = %ProviderName%
DriverVer = 07/09/2013,8.0.0000.00000
CatalogFile.NTx86 = androidwinusb86.cat
CatalogFile.NTamd64 = androidwinusba64.cat
[ClassInstall32]
Addreg = AndroidWinUsbClassReg
[AndroidWinUsbClassReg]
HKR,,,0,%ClassName%
HKR,,Icon,,-1
[Manufacturer]
%ProviderName% = Google, NTx86, NTamd64
[Google.NTx86]
;Google Nexus One
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02&MI_01
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E11
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E12&MI_01
;Google Nexus S
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E21
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E22&MI_01
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E23
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E24&MI_01
;Google Nexus 7
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4E40
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E42&MI_01
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E44&MI_01
;Google Nexus Q
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_2C10
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_2C11
;Google Nexus (generic)
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4EE0
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE2&MI_01
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE4&MI_02
%CompositeAdbInterface% = USB_Install, USB\VID_10D6&PID_0C02&MI_01
[Google.NTamd64]
;Google Nexus One
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02&MI_01
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E11
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E12&MI_01
;Google Nexus S
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E21
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E22&MI_01
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E23
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E24&MI_01
;Google Nexus 7
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4E40
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E42&MI_01
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E44&MI_01
;Google Nexus Q
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_2C10
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_2C11
;Google Nexus (generic)
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4EE0
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE2&MI_01
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE4&MI_02
%CompositeAdbInterface% = USB_Install, USB\VID_10D6&PID_0C02&MI_01
[USB_Install]
Include = winusb.inf
Needs = WINUSB.NT
[USB_Install.Services]
Include = winusb.inf
AddService = WinUSB,0x00000002,WinUSB_ServiceInstall
[WinUSB_ServiceInstall]
DisplayName = %WinUSB_SvcDesc%
ServiceType = 1
StartType = 3
ErrorControl = 1
ServiceBinary = %12%\WinUSB.sys
[USB_Install.Wdf]
KmdfService = WINUSB, WinUSB_Install
[WinUSB_Install]
KmdfLibraryVersion = 1.9
[USB_Install.HW]
AddReg = Dev_AddReg
[Dev_AddReg]
HKR,,DeviceInterfaceGUIDs,0x10000,"{F72FE0D4-CBCB-407d-8814-9ED673D0DD6B}"
[USB_Install.CoInstallers]
AddReg = CoInstallers_AddReg
CopyFiles = CoInstallers_CopyFiles
[CoInstallers_AddReg]
HKR,,CoInstallers32,0x00010000,"WdfCoInstaller01009.dll,WdfCoInstaller","WinUSBCoInstaller2.dll"
[CoInstallers_CopyFiles]
WinUSBCoInstaller2.dll
WdfCoInstaller01009.dll
[DestinationDirs]
CoInstallers_CopyFiles=11
[SourceDisksNames]
1 = %DISK_NAME%,,,\i386
2 = %DISK_NAME%,,,\amd64
[SourceDisksFiles.x86]
WinUSBCoInstaller2.dll = 1
WdfCoInstaller01009.dll = 1
[SourceDisksFiles.amd64]
WinUSBCoInstaller2.dll = 2
WdfCoInstaller01009.dll = 2
[Strings]
ProviderName = "Google, Inc."
SingleAdbInterface = "Android ADB Interface"
CompositeAdbInterface = "Android Composite ADB Interface"
SingleBootLoaderInterface = "Android Bootloader Interface"
WinUSB_SvcDesc = "Android USB Driver"
DISK_NAME = "Android WinUsb installation disk"
ClassName = "Android Device"
]]></script>
</td></tr>
<tr><td class="tr-caption" style="text-align: center;">Kod 1. android_winusb.inf dosyasının içeriği
</td></tr>
</tbody></table>
<br />
<div style="text-align: justify;">
Windows'a değiştirdiğim inf dosyasını gösterince (ve bu sürücüyü yükleyeyim mi sorusunu onaylayınca) her şeyin hallolacağını sanıyordum. Yanılmış olsam bu yazıcıyı yazmayacağımdan emin olabilirsiniz.<br />
<br />
Hemen sonra karşılaştığım sorun adb'nin (Android Debug Bridge, sürüm 1.0.31) tabletimi tanıyamamasıydı. kill-server ve takip eden start-server komutları zaman kaybından başka bir şey değildi. devices parametresi ile bağlı cihazları listele dediğimde boş çıktı ile karşılaşmaya devam ediyordum. %userprofile%\.android klasöründeki adbkey ve adbkey.pub dosyalarını silmem de ilerleme kaydetmemi sağlayamadı. <a href="http://developer.android.com/tools/device.html#VendorIds">http://developer.android.com/tools/device.html#VendorIds</a> bağlantısında da görebileceğiniz üzere 10d6 (donanım kimliğinde karşılaştığımız üretici kodu) Google'ın yayınladığı listede yoktu. Sorunun kaynağının bu olduğuna kanaat getirip, araştırmalarımı bu yönde genişlettim. Çözümün %userprofile%\.android klasöründeki adb_usb.ini dosyasına, tablet üreticimin kodunu girmem olduğunu öğrenince sözü edilen dosyayı on altılık düzenleyici ile açıp (notepad++ ve hex-editör eklentisi), "0x10d6" değerini ekledim. Burada sizin de dikkat etmeniz gereken nokta her satırın sonunda \r\n değil sadece \r bulunması (başka bir ifadeyle on altılık düzenleyicide 0d 0a yerine sadece 0a değeri bulunmalı). Bununla ilgili ekran görüntüsü Şekil 2'de.<br />
<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVQ7XvTfy6ozl4u7uteIJQAiZY2xDHUYZ6149QBDv2XK8mYQPXhzlAEpTFo6HbdNw5Aoma-gDhzmJA4ijXG3cavf-mjrne9f6FxuUaVnPX98Xpz5o9rQksJzoJiMyzCJnOO4v90BmU5mo/s1600/adb_usb.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="adb_usb.ini" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVQ7XvTfy6ozl4u7uteIJQAiZY2xDHUYZ6149QBDv2XK8mYQPXhzlAEpTFo6HbdNw5Aoma-gDhzmJA4ijXG3cavf-mjrne9f6FxuUaVnPX98Xpz5o9rQksJzoJiMyzCJnOO4v90BmU5mo/s1600/adb_usb.png" height="105" title="" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Şekil 2. adb_usb.ini dosyasının metin ve on altılık düzenleyicilerdeki görüntüsü.
</td></tr>
</tbody></table>
<div style="text-align: center;">
<br /></div>
<div style="text-align: justify;">
Tüm bu işlemlerden sonra adb devices komutuyla bağlı olan tabletimin adb tarafından da tanındığına emin oldum. Yalnız adb'deki bir hata yüzünden olduğu söylenen cihazın gerçek seri numarası yerine 0123456789ABCDEF... görüntülenmesi sorunu ile de karşılaştığımı belirtmeliyim. Sonraki işlem Eclipse'de bir "merhaba dünya" uygulaması oluşturup, tablet üzerinde hata ayıklamak oldu. Başarıya ulaştığımı düşünmeme rağmen kafamı kurcalayan soru eğer birden fazla tanınmayan cihazı aynı anda bilgisayara bağlarsam ne olacağı. Şu durumda iki cihazı seri numaraları ile ayırt etmek imkansız gibi. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Nihayetinde Google tarafından listeye alınan Sony Ericsson Xperia telefonumda bu işlemlerin hiçbirisine gerek kalmadığını belirteyim.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Yararlandığım kaynaklar:</div>
<div>
<ul>
<li><a href="http://forum.projectanarchy.com/showthread.php?1130-device-without-serial-number">http://forum.projectanarchy.com/showthread.php?1130-device-without-serial-number</a></li>
<li><a href="http://blog.fh-kaernten.at/wehr/?p=1182">http://blog.fh-kaernten.at/wehr/?p=1182</a></li>
</ul>
</div>
</div>
Furkan (Onka) Uğurhttp://www.blogger.com/profile/14651676688138936818noreply@blogger.com5tag:blogger.com,1999:blog-3270847053892278606.post-79974727475841594392013-08-01T13:44:00.001-07:002013-08-01T13:46:02.978-07:00Opera 12.16 x64 Windows 7 Sayfa Beyaz Kalan Sayfa Sorunu ve Çözümü64 bit tarayıcı deneyimi yaşamak için, halihazırda beğenerek kullandığım Opera'nın 64 bit sürümünü indirdim (Türkçe desteği var). Dikkatsizce indirip yüklediğim 12.14 sürümü otomatik olarak 12.16'ya güncellenemediği için 12.16'yı indirip kurmak zorunda kaldım. Sonraki eylemim ise Opera Link hesabımı 64 bit tarayıcıya tanıtarak, 32 bitlik sürümdeki verilerimi taşımak oldu. Taşıma işlemi başarılı olduktan sonra e-posta kontrolü yapmak için outlook.com'a girdim. E-posta adresimi ve parolamı girdikten sonra sitenin gösterilemediğine (beyaz sayfa) şahit oldum.<br />
<br />
Karşı karşıya kaldığım sorunun çözümüne ulaşmak da bir o kadar kolay oldu. http://my.opera.com/community/forums/topic.dml?id=1711052 adresinde anlatıldığı gibi ~\Program Files (x86)\Opera\defaults\public_domains.dat (32 bit 12.16) dosyasını ~\Program Files\Opera x64\defaults klasörüne kopyalamak e-postalarıma tekrar kavuşmam için yeterliydi.<br />
<br />
Önerilen çözümün, beyaz sayfa ile sonuçlanan diğer gezinti denemelerine de ilaç olduğunun altı çizilmekte.<br />
<br />
<br />Furkan (Onka) Uğurhttp://www.blogger.com/profile/14651676688138936818noreply@blogger.com0tag:blogger.com,1999:blog-3270847053892278606.post-2655322152088699612013-07-19T05:34:00.000-07:002013-07-19T05:34:48.250-07:00Windows NT 6.1 Tabanlı İşletim Sistemlerinde Uzak Masaüstü İstemcisi SorunuWindows NT 6.1 (Windows 7, Windows Server 2008 R2) işletim sistemlerinden birini kullanıyor ve ekran çözünürlüğünüz 1366x768 piksel ise, uzak masaüstü istemciniz tam ekran kipinden bir şekilde çıkınca yeniden tam ekran kipine geçmemekte ısrar edebilir. Neyse ki Microsoft bunun için bir düzeltme hazırlamış. Söz konusu düzeltmeyi <a href="http://support.microsoft.com/kb/2582172">http://support.microsoft.com/kb/2582172</a> adresinden e-posta bilginizi vererek edinebilirsiniz.Furkan (Onka) Uğurhttp://www.blogger.com/profile/14651676688138936818noreply@blogger.com0tag:blogger.com,1999:blog-3270847053892278606.post-14680927575492796142012-12-04T18:45:00.001-08:002012-12-05T14:31:26.004-08:00Programlama Dilleri Hakkında Ücretsiz Kitaplarİnternet üzerindeki yasal ve ücretsiz kitaplara ulaşmak biraz zaman alıcı. Bu nedenle benim de yararlandığım bazı kaynakları sizinle paylaşmak istiyorum. Eski olduklarının bilincinde olmakla birlikte yararlanabilir özellikte oldukları konusunda ısrarcıyım. Başka kaynaklara eriştikçe buraya ekleyeceğim.<br />
<br />
Türkçe Kaynaklar:<br />
<ul>
<li>C# Programlama Dili: <a href="http://tr.wikibooks.org/wiki/C_Sharp_Programlama_Dili">http://tr.wikibooks.org/wiki/C_Sharp_Programlama_Dili</a></li>
<li>Standart C Programlama Dili: <a href="http://www.kadifeli.com/fedon/stdcprtr.php">http://www.kadifeli.com/fedon/stdcprtr.php</a></li>
</ul>
İngilizce Kaynaklar:<br />
<div>
</div>
<div>
<ul>
<li>Teach Yourself C++ in 21 Days, Second Edition: <a href="http://101.lv/learn/C++/index.htm">http://101.lv/learn/C++/index.htm</a></li>
<li>Teach Yourself VISUAL BASIC® 5 in 24 Hours: <a href="http://101.lv/learn/Vbasic/index.htm">http://101.lv/learn/Vbasic/index.htm</a></li>
<li>Teach Yourself Borland Delphi 4 in 21 Days: <a href="http://101.lv/learn/delphi/index.htm">http://101.lv/learn/delphi/index.htm</a></li>
<li>Teach Yourself JavaScript 1.1 in a Week Second Edition: <a href="http://101.lv/learn/JSweek/index.htm">http://101.lv/learn/JSweek/index.htm</a></li>
<li>Teach Yourself Java in 21 Days Professional Reference Edition: <a href="http://101.lv/learn/Java/index.htm">http://101.lv/learn/Java/index.htm</a></li>
<li>Objective-C Programming Manual: <a href="http://www.gnu.org/software/gnustep/resources/documentation/Developer/Base/ProgrammingManual/manual.html">http://www.gnu.org/software/gnustep/resources/documentation/Developer/Base/ProgrammingManual/manual.html</a></li>
</ul>
</div>
Furkan (Onka) Uğurhttp://www.blogger.com/profile/14651676688138936818noreply@blogger.com1tag:blogger.com,1999:blog-3270847053892278606.post-720105122921242842012-12-04T18:22:00.001-08:002012-12-04T18:30:31.053-08:00Neden Dev C++ Kullanmamalıyız?<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://wxdsgn.sourceforge.net/themes/wxdevcpp/logo.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="wxDev-C++ Logo" border="0" height="111" src="http://wxdsgn.sourceforge.net/themes/wxdevcpp/logo.png" title="wxDev-C++ Logo" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">wxDev-C++'nın Logosu</td></tr>
</tbody></table>
<br />
<br />
Bildiğiniz gibi Dev-C++, Bloodshed Software firmasının Windows işletim sistemi için ürettiği "Bütünleşik Geliştirme Ortamı (IDE)". Gerek birçok kitapta kurulumu-kullanımı geçmesi, gerek derleyici seti ile birlikte kurulabilmesi ve belki de en önemlisi ücretsiz olması nedeniyle oldukça yaygın kullanılan bu yazılımın son güncellenme tarihi oldukça eski. Kısacası artık güncelleme ya da hata düzeltme işlemi yapılmamakta. IDE ile birlikte gelen MinGW sürümünün güncellenmesi elle yapılabilir fakat bu zaman kaybı anlamına geliyor.
<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://wxdsgn.sourceforge.net/images/screenshots/with_designer.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="Form tasarımı" border="0" height="265" src="http://wxdsgn.sourceforge.net/images/screenshots/with_designer.JPG" title="form tasarımı" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">wxDev-C++'nin yerleşik aracı ile form tasarımı</td></tr>
</tbody></table>
<br />
Benim sistemimde de sorun çıkaran Dev-C++ yazılımı yerine aynı proje üzerinden çatallanmış wxDev-C++, çok platformlu wxWidgets görsel kullanıcı arayüzü (GUI) kütüphanesinin yanında görsel form tasarım aracı da barındırıyor. Yine ücretsiz olarak dağıtılan bu ide yakın sayılabilecek bir zamanda (Ekim 2011) güncellenmiş ve güncellenmeye devam edeceği söyleniyor. Dev-C++'nin bütün özelliklerini kapsayan uygulama aynı zamanda Microsoft'a ait C++ derleyicisinin 2003 ve 2005 sürümlerini kullanmayı da sağlıyor.<br />
<br />
wxDev-C++'nin kurulum dosyasına <a href="http://wxdsgn.sourceforge.net/?q=node/4">http://wxdsgn.sourceforge.net/?q=node/4</a> adresinden ulaşabilirsiniz.Furkan (Onka) Uğurhttp://www.blogger.com/profile/14651676688138936818noreply@blogger.comtag:blogger.com,1999:blog-3270847053892278606.post-52485205925909233382012-11-21T14:26:00.002-08:002012-11-21T14:27:34.294-08:00Bugün yılın kaçıncı günü? - 2 - Bir önceki örnek kod "artık yılı" hesaba katmadan işlem yapıyor, bu nedenle şubat ayının 29 çektiği tarih için hatalı sonuç üretiyordu. Bu sorunu çözmek için bir işlev ekledim ve sizlere sunuyorum.
<br />
<script type="syntaxhighlighter" class="brush: cpp"><![CDATA[
#include <stdio.h>
/* #define NDEBUG */
#include <assert.h>
/* Ocak, subat, mart, nisan, mayis, haziran, temmuz, agustos, eylul, ekim, kasim, aralik */
/* 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 */
int SubatKacGun(int yil)
{
if (yil % 400 == 0) /* 400'e tam bolunuyorsa */
{
return 29;
}
else if (yil % 100 == 0) /* 400'e tam bolunmeyip 100'e tam bolunuyorsa */
{
return 28; /* artik yil degildir */
}
else if(yil % 4 == 0) /* 100'e tam bolunmeyip 4'e tam bolunuyorsa */
{
return 29; /* artik yildir */
}
else /* baska durumda */
{
return 28; /* artik yil degildir */
}
}
int AyKacGun(int ayno, int yil)
{
assert(ayno >= 1 && ayno <= 12 && yil >= 0);
/* Artik yili da hesaba katalim */
if (ayno == 2) /* ikinci ayi sordugunda */
{
return SubatKacGun(yil); /* yila gore subatin kac cektigini bulup,
geri dondurelim */
}
else
{
static const int aylar[12] =
{
31 , 28, 31 , 30, 31, 30, 31, 31 , 30, 31, 30, 31
};
return aylar[ayno-1];
}
}
int KacGunGecmis(int ayno, int ayingunu, int yil)
{
int tmp = 0;
int i = 1;
assert(ayingunu >= 1 && ayingunu <= 31);
assert(AyKacGun(ayno,yil) >= ayingunu);
while(i < ayno)
{
tmp += AyKacGun(i, yil);
++i;
}
tmp += ayingunu;
return tmp;
}
int main(int argc, char *argv[])
{
int ay = 0, gun = 0, yil = -1;
puts("-Kac gun gecti-\n");
printf("Ay,gun,yil olarak giris yapiniz:");
scanf(" %d,%d,%d", &ay, &gun, &yil);
printf("%d yilinin %d. ayi %d. gununden beri %d gun gecmis.", yil, ay, gun,
KacGunGecmis(ay, gun, yil));
while((getch() == '\n')){};
return 0;
}
]]></script>Furkan (Onka) Uğurhttp://www.blogger.com/profile/14651676688138936818noreply@blogger.com0tag:blogger.com,1999:blog-3270847053892278606.post-32698277500715217492012-11-09T17:25:00.000-08:002012-11-09T17:28:44.025-08:00Bugün yılın kaçıncı günü?Girilen ay ve günden hesapla yılın kaçıncı günü olduğunu hesaplayan C programının kodları aşağıdadır. Uygulama tabi ki yıla göre hesaplama yapmıyor (şubat hiçbir zaman 29 çekmiyor).
<script type="syntaxhighlighter" class="brush: cpp"><![CDATA[
/* Onka - 2012 */
/* Ceviz.NET */
#include <stdio.h>
#include <assert.h>
/* Ocak, subat, mart, nisan, mayis, haziran, temmuz, agustos, eylul, ekim, kasim, aralik */
/* 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 */
int AyKacGun(int ayno)
{
assert(ayno >= 1 && ayno <= 12);
static const int aylar[] = {31 , 28, 31 , 30, 31, 30, 31, 31 , 30, 31, 30, 31};
return aylar[ayno-1];
}
int KacGunGecmis(int ayno, int ayingunu)
{
int tmp = 0;
int i = 1;
assert(ayingunu >= 1 && ayingunu <= 31);
assert(AyKacGun(ayno) >= ayingunu);
while(i < ayno)
{
tmp += AyKacGun(i);
++i;
}
tmp += ayingunu;
return tmp;
}
int main(int argc, char *argv[])
{
int ay = 0, gun = 0;
puts("-Kac gun gecti-\n");
printf("Ay,gun olarak giris yapiniz:");
scanf(" %d,%d", &ay, &gun);
printf("%d. ayin %d. gunu yilin %d. gunudur.",ay, gun, KacGunGecmis(ay,gun));
while((getch() == '\n')){};
return 0;
}
]]></script>Furkan (Onka) Uğurhttp://www.blogger.com/profile/14651676688138936818noreply@blogger.com0tag:blogger.com,1999:blog-3270847053892278606.post-85587748089530532082012-11-02T16:13:00.000-07:002012-11-09T17:27:51.599-08:00C++ ile toplam, ortalama ve varyans hesaplama<script type="syntaxhighlighter" class="brush: cpp"><![CDATA[
// Ceviz.NET - 2012
// Onka
// İstatistik hesaplar
#include <cstdlib>
#include <iostream>
#include <vector>
using std::vector;
using std::cin;
using std::cout;
using std::endl;
typedef vector<double> Dizi;
double ToplamHesapla(const Dizi & dizi)
{
double tmp = 0.0;
Dizi::const_iterator it;
for(it = dizi.begin() ; it < dizi.end(); ++it)
{
tmp += *it;
}
return tmp;
}
double KarelerinToplamiHesapla(const Dizi & dizi)
{
double tmp = 0.0;
Dizi::const_iterator it;
for(it = dizi.begin() ; it < dizi.end(); ++it)
{
tmp += (*it) * (*it);
}
return tmp;
}
double OrtalamaHesapla(const Dizi & dizi)
{
return (ToplamHesapla(dizi) / dizi.size());
}
double VaryansHesapla(const Dizi & dizi)
{
int elemansayisi = 0;
double karelerintoplami = 0.0;
double toplam = 0.0;
double karelertoplami = 0.0;
double tmp = 0.0;
karelerintoplami = KarelerinToplamiHesapla(dizi);
toplam = ToplamHesapla(dizi);
elemansayisi = dizi.size();
karelertoplami = karelerintoplami - ( ( toplam * toplam ) / elemansayisi );
tmp = karelertoplami / ( elemansayisi - 1 );
return tmp;
}
Dizi & DiziOlustur()
{
Dizi * gecicidizi = new Dizi();
double tmp = 0.0;
int i = 1;
cout << "Degerleri giriniz. Cikmak icin sayi olmayan herhangi bir sey." << endl;
while(true)
{
cout << i++ << ": ";
cin >> tmp;
if(cin.fail())
{
break;
}
gecicidizi->push_back(tmp);
}
return (*gecicidizi);
}
void DiziSil(Dizi & dizi)
{
delete &dizi;
}
void DiziYazdir(const Dizi & dizi)
{
Dizi::const_iterator it;
int i = 0;
cout << "\nDizi:\nEleman sayisi = " << dizi.size()
<< "\n----------------------------------"
<< endl;
for(it = dizi.begin(), i = 1 ; it < dizi.end(); ++it, ++i)
{
cout << i << ": " << *it << endl;
}
cout << "----------------------------------" << endl;
}
int main(int argc, char *argv[])
{
Dizi & x = DiziOlustur();
DiziYazdir(x);
cout << "**********************************" << endl;
cout << "Toplam: " << ToplamHesapla(x) << endl;
cout << "Ortalama: " << OrtalamaHesapla(x) << endl;
cout << "Varyans: " << VaryansHesapla(x) << endl;
cout << "**********************************" << endl;
cout << "Program sonlandi.";
cin.clear();
cin.ignore(10000,'\n');
cin.get();
DiziSil(x);
return EXIT_SUCCESS;
}
]]></script>Furkan (Onka) Uğurhttp://www.blogger.com/profile/14651676688138936818noreply@blogger.com0tag:blogger.com,1999:blog-3270847053892278606.post-53600743120744865762012-11-02T12:35:00.000-07:002012-11-09T17:28:04.961-08:00C++ ile girilen sayının tabanını değiştirmeAşağıdaki kod parçası girilen sayıyı onluk tabana çevirir. ASCII oyunları ve assert makrosunu görmek için incelemekte fayda var.
<script type="syntaxhighlighter" class="brush: cpp"><![CDATA[
// Ceviz.NET - 2012
// Onka
// Girilen sayıyı ve tabanını onluk tabana çeviren kod.
#include <cstdlib> //EXIT_SUCCESS bildirimi
#include <iostream> // cin, cout, endl nesneleri
#include <cmath> // pow işlevi
#include <cstring> // strlen işlevi
#include <cassert> // assert makrosu
using std::cin;
using std::cout;
using std::endl;
using std::pow;
using std::string;
using std::strlen;
unsigned long SpecbaseToDec(const char * sayi, int giristaban)
{
int uzunluk = strlen(sayi);
assert(uzunluk > 0 && uzunluk <= 6); // sayı en fazla 6 haneli
assert(giristaban >= 2 && giristaban <= 16); //taban 2-16 arasında olmalı
unsigned long tmp = 0;
int sayideg = 0;
char simdikibasamak = 0;
char durum1 = false;
char durum2 = false;
char durum3 = false;
for(int i = 0; i < uzunluk; ++i)
{
simdikibasamak = *(sayi + uzunluk - i -1 ); // ufak bir hile, sayıyı tersten okumak için
durum1 = (simdikibasamak >= 48 && simdikibasamak <= 57); //0 - 9
durum2 = (simdikibasamak >= 64 && simdikibasamak <= 70); //A - F
durum3 = (simdikibasamak >= 97 && simdikibasamak <= 102);//a - f
assert(durum1 || durum2 || durum3); //geçerli rakamlar 0-9 && A - F && a - f
if (durum1 == true)
{
sayideg = simdikibasamak - 48;
}
else if(durum2 == true)
{
sayideg = simdikibasamak - 64 + 9;
}
else if(durum3 == true)
{
sayideg = simdikibasamak - 97 + 9;
}
assert(sayideg < giristaban); // herhangi bir basamak tabana eşit ya da
// tabandan daha büyük olamaz
tmp += sayideg * pow( giristaban, i);
}
return tmp;
}
int main(int argc, char *argv[])
{
string sayim("0");
int taban = 2;
cout << "Sayiyi giriniz: ";
cin >> sayim;
cout << "Tabani giriniz: ";
cin >> taban;
cout << '('
<< sayim
<< ')'
<< taban
<< " = ("
<< SpecbaseToDec(sayim.c_str(), taban)
<< ")10"
<< endl;
cin.ignore(255, '\n');
cout << "Press the enter key to continue ...";
cin.get();
return EXIT_SUCCESS;
}
]]></script>Furkan (Onka) Uğurhttp://www.blogger.com/profile/14651676688138936818noreply@blogger.com0tag:blogger.com,1999:blog-3270847053892278606.post-11321849146891263922012-10-22T11:08:00.002-07:002012-11-09T17:28:57.782-08:00C++ ve Winsock ile WAN IP adresini öğrenmeNot: Tekrar gözden geçirilecek girdi.
<br>
Çoğu zaman WAN IP'mizi (internete bağlandığımız ip) öğrenmede zorluk yaşarız. Windows'un ağ soketleri ve karşı sunucuya yüklediğimiz ufak bir betik yardımıyla internete eriştiğimiz ip adresini öğrenebiliriz. Burada kendi bilgisayarımdaki sunucuyu kullandım. Sunucum istekleri 85 nolu porttan dinlemekte ve php betiğine tarayıcı üzerinden http://localhost:85/IPAdres/index.php ile erişilebilir durumda. Görüleceği üzere bağlandığım karşı bilgisayar ve yolladığım HTTP başlığı da buna göre ayarlı. Siz kendi şartlarınıza göre ayarlayabilirsiniz. İstemci için C++ kodları:
<script type="syntaxhighlighter" class="brush: cpp"><![CDATA[
//Karşı sunucuya get isteği yapar ve cevabını çıkışa bastırır.
//Ceviz.NET
//Onka - 2012
#include <iostream>
#include <cstring>
#include <windows.h>
#include <Winsock2.h>
#define GELENARABELLEK 32768 //arabellek boyutu 32KB
#define GIDENARABELLEK 1024 //arabellek boyutu 1KB
using std::cout;
using std::cin;
using std::endl;
using std::string;
int main()
{
//gerekli veri/veri yapıları
WSADATA startdata;
WSAStartup( MAKEWORD(2, 0), &startdata);
SOCKET skt; //soket adý
struct hostent *hedef;
char adres[30] = "localhost";
int port = 85;
struct sockaddr_in bilgiler;
char gelveri[GELENARABELLEK] = {0};
char gonveri[GIDENARABELLEK] = {0};
int sonuc = 0;
//son
//soket oluşturma
if( (skt = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
cout << "Soket olusturulamadi!";
abort();
}
else
{
cout << "Soket olusturuldu." << endl;
}
//bitti
//soket için bilgileri alma
hedef = gethostbyname(adres);
//bitti
//gerekli bilgileri girme
bilgiler.sin_family = AF_INET;
bilgiler.sin_addr = *((struct in_addr *)hedef->h_addr);
bilgiler.sin_port = htons(port);
memset(&(bilgiler.sin_zero), 0,0) ;
//bitti
cout << "Baglaniyor... " << adres << ':' << port << endl;
//bağlantı kurma
switch(connect(skt, (struct sockaddr *)&bilgiler, sizeof(struct sockaddr) ))
{
case 0:
cout << "Soket baglandi." << endl;
break;
case -1:
cout << "Soket baglanamadi!";
abort();
}
//bitti
//veri paketini hazırlama
strcpy(&gonveri[0], "GET /IPAdres/index.php HTTP/1.1\r\nHost: ");
strcat(&gonveri[0], adres);
strcat(&gonveri[0], "\r\n\r\n");
//bitti
cout << "--------------\nGonderilecek istek basligi:\n"
<< gonveri
<< "\n--------------\n"
<< endl ;
//yolla
sonuc = send( skt, gonveri, sizeof(gonveri), 0);
//bitti
switch(sonuc)
{
case -1:
cout << "Veri gonderilemedi...";
abort();
default:
cout << "Veri basariyla gonderildi..." << endl;
break;
}
cout << "Cevap bekleniyor..." << endl;
//karşı taraftan cevap alma
recv(skt , gelveri, sizeof(gelveri), 0);
//bitti
cout << "--------------\nGelen veri:\n"
<< gelveri
<< "\n--------------"
<< endl;
//temizlik
closesocket(skt);
WSACleanup();
//bitti
system("pause");
return 0;
}
]]></script>
PHP destekli bir sunucuya yolladığımız php betiği:
<script type="syntaxhighlighter" class="brush: html"><![CDATA[
<?php
echo $_SERVER['REMOTE_ADDR'];
?>]]></script>Furkan (Onka) Uğurhttp://www.blogger.com/profile/14651676688138936818noreply@blogger.com0tag:blogger.com,1999:blog-3270847053892278606.post-287255473108193372012-10-21T15:54:00.000-07:002012-11-09T17:29:49.401-08:00C dili ve Windows ortamında Türkçe karakterler içeren klasör ve dosyalara erişmeBaşlıkta sözü edilen işlemleri yapmak göründüğü kadar kolay olmasa gerek. Dilimize özgü karakterler içeren klasör ve dosyaları aşağıdaki kod ile listeleyebiliriz.
<br />
Not: Kaynak kodu dosyasını UTF8 (BOM'suz) olarak kaydetmeyi unutmayınız.
<script type="syntaxhighlighter" class="brush: cpp"><![CDATA[
//Unicode karakterler içeren dosya ve klasörlerin isimlerinin yazdırılması
//Ceviz.NET
//Onka - 2012
#include <windows.h>
#include <locale.h>
int main(int argc, _TCHAR* argv[])
{
_wsetlocale(LC_ALL, L"Turkish");//yerelleştirme: Türçe
HANDLE hFind;
WIN32_FIND_DATAW FindFileData;
if((hFind = FindFirstFileW(L"d:/TürkçeKlasör/*.*", &FindFileData)) != INVALID_HANDLE_VALUE)
{
do
{
if (FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
{
if(wcsstr(FindFileData.cFileName, L".") != NULL || wcsstr(FindFileData.cFileName, L"..") != NULL)
{
continue;
}
wprintf(L"Klasör: ");
}
else
{
wprintf(L"Dosya: ");
}
wprintf(L"%s\n\n", FindFileData.cFileName);
}while(FindNextFileW(hFind, &FindFileData));
FindClose(hFind);
}
system("pause");
return 0;
}
]]></script>
Furkan (Onka) Uğurhttp://www.blogger.com/profile/14651676688138936818noreply@blogger.com0tag:blogger.com,1999:blog-3270847053892278606.post-63313048776849366582012-10-19T15:08:00.002-07:002012-10-19T15:09:20.263-07:00C++ ile sözcükteki harflerin frekansını bulan uygulamaBu kod parçasında yine "düzgün uygulama yazma" alıştırması yapıyoruz. Bu bakımdan ufak hileler değil de kodların okunabilirliği, standarda uyum ve yeniden kullanılabilirlik üzerinde durdum. Çok gerekli olmasa da iterator kullanımını görmek açısından uygun birkaç satır içeriyor.
<script type="syntaxhighlighter" class="brush: html">
// Girilen sözcükteki harf frekanslarını sayıyla ve çubuk grafiğiyle verir.
// Ceviz.NET 2012 - Onka
#include <cstdlib>
#include <iostream>
#include <string>
#include <cctype>
#include <vector>
using std::string;
using std::cout;
using std::cin;
using std::endl;
using std::vector;
typedef vector<int> FTABLE;
FTABLE * LetterFrequence(string &Str)
{
FTABLE * FTable = new FTABLE(27,0);
for(int i = 0; i < Str.size(); ++i)
{
++FTable->at ( (isalpha(Str[i]) ? (toupper(Str[i]) - 'A') : 26) );
}
return FTable;
}
void PrintFTable(FTABLE &ft)
{
FTABLE::iterator it;
for(it = ft.begin(); it < ft.end() - 1; ++it)
{
static int i = 0;
if (*it > 0)
{
cout << (char)(i + 'A') << ": " << *it << endl;
}
++i;
}
cout << "Harf olmayanlar: " << ft.back() << endl;
}
void DrawFTable(FTABLE &ft)
{
FTABLE::iterator it;
for(it = ft.begin(); it < ft.end() - 1; ++it)
{
static int i = 0;
if (*it > 0)
{
cout << (char)(i + 'A') << '\t';
for(int k = 0; k < *it ; ++k)
{
cout << '-';
}
cout << endl;
}
++i;
}
cout << "Diger ";
for(int k = 0; k < *it ; ++k)
{
cout << '-';
}
cout << endl;
}
int main(int argc, char *argv[])
{
string str;
cout << "Harf frekansinin ogrenilecegi sozcugu giriniz (Turkce karakterler olmadan): ";
cin >> str;
cin.ignore(255,'\n');
FTABLE * FrekansTablosu = LetterFrequence(str);
PrintFTable(*FrekansTablosu);
DrawFTable(*FrekansTablosu);
cout << "Press the enter key to continue ...";
cin.get();
return EXIT_SUCCESS;
}
</script>Furkan (Onka) Uğurhttp://www.blogger.com/profile/14651676688138936818noreply@blogger.com0tag:blogger.com,1999:blog-3270847053892278606.post-6477947704520478792012-10-19T14:52:00.001-07:002012-10-19T15:10:35.128-07:00C++ ile Palindrom Tümce TespitiUzun zamandır C++ ile ilgilenmiyordum. Gerek bilgimi tazelemek gerekse düzgün kod yazma alıştırması yapmak için aşağıdaki kodu yazdım. STL algoritmalarından reverse_copy'nin nasıl kullanılacağı açıkça görülmekte.
<script br="br" class="brush:php" gt="gt" lt="lt" type="syntaxhighlighter">
//Girilen cümlenin ya da sözcüğün palindrom olup olmadığını gösterir
//Ceviz.NET
//2012 - Onka
#include <cstdlib>
#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::getline;
//Verilen iki karakter katarını, büyük-küçük harf farklılığını
//gözetmeden karşılaştırır.
//Eğer iki karekter katarı da eşitse true, değilse false döndürür.
bool StrCompareNoCase(const string &s1, const string &s2)
{
if (s1.length() != s2.length())
{
return false;
}
bool temp = true;
for(int i = 0; i < s1.length(); ++i)
{
if(tolower(s1[i]) != tolower(s2[i]))
{
temp = false;
}
}
return temp;
}//StrCompareNoCase işlevi sonu
//main işlevi başlangıcı
int main(int argc, char *argv[])
{
string Cumle; //kullanıcının girdiği satırı tutan karakter katarı.
string TersCumle; //yukarıdaki katarın tersi
cout << "Bir cumle giriniz: ";
getline(cin, Cumle); //tüm satırı okuyoruz ve Cumle karakter
//katarına aktarıyoruz
TersCumle.resize (Cumle.size()); //TersCumle nesnesi, Cumle nesnesi
//ile aynı boyutta olmalı
cout << "Tersten: ";
reverse_copy ( Cumle.begin(), Cumle.end(), TersCumle.begin() );
//iterator ve stl algoritması yardımıyla Cumle'nin elemanlarını
//ters sırada TersCumleye atıyoruz.
cout << TersCumle << endl;
cout <<
(StrCompareNoCase(Cumle, TersCumle) ?
"Palindrom cumle." :
"Palindrom degil.")
<< endl;
//Ters ve düz satırlar eşitse cümle palindromdur.
cout << "Press the enter key to continue ...";
cin.get();
return EXIT_SUCCESS;
}//main işlevi sonu
</script>
Furkan (Onka) Uğurhttp://www.blogger.com/profile/14651676688138936818noreply@blogger.com0tag:blogger.com,1999:blog-3270847053892278606.post-59634735383649242292012-06-12T17:38:00.000-07:002014-03-03T20:43:16.974-08:00Sony Xperia Neo V ile zorunlu ICS deneyimiBirkaç gün önce (01.06.2012) cep telefonumda, kapanınca açılmama sorunu olduğunu keşfettim. Cihaz olması gerektiği gibi çalışıyor, kapatma rutinleri başarıyla gerçekleşiyor fakat kapandıktan sonra tekrar açmak için bataryayı söküp, takmak gerekiyordu (Sony Ericsson'un bu modelinde reset tuşu mevcut değil). Sorunu Sony Mobile forumlarında ve internetin geri kalanında araştırdım. Benimle aynı sıkıntıyı yaşayan kimseye ulaşamadım. Geri kalan her şey düzgün olduğundan suçu yazılıma atıp, yazılım güncellemesi yapmaya karar verdim. ICS'ye geçişimin nedeni de bu yanlış düşünceydi.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0sImUEjakq0BgLQNWNanj4sw0XbPbeStVS_CT9-iT3rwqrqUi1HFnaJvWeAxzJ8ArktR5XeUqMadU7GJA3LHUnCnU8jH2ot9npOM3qTP0S7MBXRPQ72Lg_0im0PbQlhPQs31jYgAQrNE/s1600/sonyericsson-xperia-neo-v-01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0sImUEjakq0BgLQNWNanj4sw0XbPbeStVS_CT9-iT3rwqrqUi1HFnaJvWeAxzJ8ArktR5XeUqMadU7GJA3LHUnCnU8jH2ot9npOM3qTP0S7MBXRPQ72Lg_0im0PbQlhPQs31jYgAQrNE/s320/sonyericsson-xperia-neo-v-01.jpg" height="305" width="320" /></a></div>
<br />
İlk seçeneğim Sony'nin PC Companion yazılımıydı. ICS güncellemesini (hiçbir bilgimin silinmeyeceğine güvenerek) bu yazılımla yaptım. Sonuç hüsrandı. Elime oldukça yavaş bir cep telefonu geçtiği gibi sorun da çözülmemişti. Ne yazık ki Sony'nin kendi uyarılarından sonra ICS güncellemesi yapmayı da düşünmüyordum fakat GB sürümüne dönmek için -garanti kapsamı içinde kalacağım- herhangi bir yol yoktu. SEUS (Sony Ericsson Update Services) uygulamasıyla GB sürümüne dönebileceğimi varsayarak gerekli yazılımı kurdum ve işlemlere devam ettim. Bu sefer belirgin ölçüde hızlanma olmasına rağmen performans kabul edilebilirlikten uzaktı. Üstüne üstlük sorunun çözüldüğü de kesin değildi. Paşa paşa donanım ile ilgili bir arıza yaşadığımı kabul etmek zorunda kaldım. Cihaz servise gitti ve yenisiyle değiştirildi (servis bununla ilgili açıklama yapmadı, artık elimde kutusundakinden farklı IMEI'ye sahip bir telefon var). ...ve evet servisin garanti belgesi yanında faturayı da ısrarla istemesine anlam veremedim.<br />
<br />
Artık sorun çözüldüğüne göre yapmam gereken telefonu hızlandırmaktı. Bunun için yapabileceğimiz şeyler kısıtlı. İhtiyacınız olmayan uygulamaları kaldırmak ise ilk gerçekleştirmeniz gereken eylem. Daha sonra harici bellek kartını formatlamayı deneyebilirsiniz. Bu ikisini yapıp telefonu tekrar başlattığımda ise elimde GB'ye yakın hızda çalışan (fakat daha gelişmiş) bir telefon vardı.<br />
<br />
Yeni güncelleme ile şimdiye kadar gözlemlediğim durumları sıralamakta yarar görüyorum:<br />
<br />
1. Yüz tanıma ile kilit açma gelmiş, kullanmayı planlamıyorum.<br />
2. Medya Aktarım Modu (MTP) açık olmasına rağmen bilgisayara bağladığımızda yanlış bilgi mesajı gelmekte. Çok önemli değil, çünkü olması gerektiği gibi çalışıyor.<br />
3. FB haricindeki gereksiz olduğunu düşündüğüm yazılımlar rom'dan çıkarılmış. Bu durum hoşuma gitti.<br />
4. Cihazdaki gecikmeler farkedilir ölçüde arttı.<br />
5. GB iken bir türlü gerçekleşmeyen Picasa eşitleme gerçekleşiyor gibi duruyor (Picasa'nın ne olduğunu bile bildiğim söylenemez fakat eşitleme sırasında kırmızı ünlem işareti artık yok:))<br />
6. Sözcük düzeltmesi geliştirilmiş, dilimiz daha iyi destekleniyor.<br />
7. Kamera ile ilgili değişiklikler yapılmış (sorunlu olduğu söyleniyor) fakat henüz bir hata ile karşılaşmadım. Büyük ihtimalle daha gelişmiş ayarlar yapmaya çalışırken karşılacağım.<br />
8. SE forumlarında okuduğum kendini yeniden başlatma sorunu ile bir sefer karşılaştım.<br />
9. Pil ömrü gözle görülür ölçüde düştü (GB iken kullandığımın iki katı kullanıyor olduğum da bir gerçek)<br />
10. GB sürümünde iken kolaylıkla ekran görüntüsünü alabiliyordunuz. Artık kapatma tuşu + ses kısma düğmesine aynı anda basıp 2-3 saniye bekleyerek alabiliyorsunuz.<br />
11. Çok beğenerek kullandığım timescape ve xperia gallery uygulamaları performans sorunlarından dolayı kullanılmayacak hale geldi.<br />
12. Telefon ilk kez açıldığında oldukça yavaş kullanılır hale gelmekte.<br />
13. Wi-fi bağlantısı kopma sorunları yaşamaya başladım.<br />
14. Telefonun hiçbir yerinde Ericsson ibaresi geçmiyor.<br />
<br />
Sonuç olarak Sony değerli birkaç puanı kaybetmiş gözüküyor. Cep yakmayan fiyatı ve özellikleri ile şık olduğunu düşündüğüm bu cihaz, hatalı politikanın kurbanı olmuş. Bunun yanında, üreticinin müşteri memnuniyeti ve şikayetlerini dinlemekte gönülsüz olduğu hissine kapıldım. Sorunlu olduğu açık bir ROM'u sırf daha önceden söz verdim diye kullanıcılara dayatmak pek akıllıca değil. En azından kullanıcının eski sürüme dönmesi için fırsat verilmesi gerekiyordu ki bu garanti dışı kalmadan telefonu servise götürmekle mümkün. Kısaca bu telefona sahip olan kişilerin GB'den memnun oldukları süre boyunca güncellemeyi akıllarına getirmemesini önermekteyim ta ki sorunlardan arındırılmış bir ICS rom'u piyasaya dağıtılana kadar.Furkan (Onka) Uğurhttp://www.blogger.com/profile/14651676688138936818noreply@blogger.com0