coolwolf / 07/02/2023

Aspx için kod tabanlı MessageBox fonksiyonu

public class WebMsgBox
    {
        protected static Hashtable HandlerPages = new Hashtable();
        private WebMsgBox()
        {
        }
        public static void Show(string message)
        {
            if (!(HandlerPages.Contains(HttpContext.Current.Handler)))
            {
                var currentPage = (Page)HttpContext.Current.Handler;
                if (currentPage != null)
                {
                    var messageQueue = new Queue();
                    messageQueue.Enqueue(message);
                    HandlerPages.Add(HttpContext.Current.Handler, messageQueue);
                    currentPage.Unload += new EventHandler(CurrentPageUnload);
                }
            }
            else
            {
                var queue = ((Queue)(HandlerPages[HttpContext.Current.Handler]));
                queue.Enqueue(message);
            }
        }
        private static void CurrentPageUnload(object sender, EventArgs e)
        {
            var queue = ((Queue)(HandlerPages[HttpContext.Current.Handler]));
            if (queue != null)
            {
                var builder = new StringBuilder();
                int iMsgCount = queue.Count;
                builder.Append("<script language='javascript'>");
                string sMsg;
                while ((iMsgCount > 0))
                {
                    iMsgCount -= 1;
                    sMsg = Convert.ToString(queue.Dequeue());
                    sMsg = sMsg.Replace("\"", "'");
                    builder.Append("alert( \"" + sMsg + "\" );");
                }
                builder.Append("</script>");
                HandlerPages.Remove(HttpContext.Current.Handler);
                HttpContext.Current.Response.Write(builder.ToString());
            }
        }
    }

Kullanmak için, herhangi bir C# kod sayfasında (xxx.aspx.cs) alttakine benzer bir kod yazmanız yeterli. İlk açılacak Aspx formunda mesaj görüntülenecektir.

WebMsgBox.Show("Web Forms MessageBox denemesi");

coolwolf / 15/01/2021

OsX Seri Port İzleme

OsX altında seri port haberleşmesini izlemek istediğimizde, Windows’ta yaptığımız gibi, Putty veya benzeri terminal programı yüklemeye ihtiyacımız yoktur. Bu işlemi OsX’in dahili “screen” komutu ile yerine getirebiliriz. Alttaki adımları izleyerek, bilgisayarınıza bağlı seri cihazın veri akışını takip edebilirsiniz.

Önce kullanılabilir portaları listeleyelim:

ls /dev/cu.*

Alttaki gibi bir çıktı almalısınız:

/dev/cu.Bluetooth-Incoming-Port	/dev/cu.usbserial-012345

Seri port dinlemeyi başlatalım:

screen /dev/cu.usbserial-012345 115200
  1. parametre Seri port adı. cu.usbserial-012345 kısmını sizin listenizdeki port ile değiştirin.
  2. 2. parametre ise band hızıdır. Dinlemek istediğiniz cihazın baud hızını yazmalısınız.

Terminal (screen) ekranından çıkmak için, önce CTR + A ardından sadece k (veya İngilizce klavyede \ (ters slash)) tuşlarını kullanabilirsiniz.

coolwolf / 16/08/2019

MicroPython machine.Pin kullanımı

Öncelikle kütüphaneyi dahil etmemiz gerekiyor:

from machine import Pin

Ardından pin nesnesi oluşturalım:

EspPin = Pin(33, Pin.IN)

Pin tetiklendiğinde çalıştırılacak fonksiyonu tanımlayalım:

def PinTrigger(p):
    print("Pin Tetiklendi:"+str(p)+"||")

Şimdi Pin.irq fonksiyonu ile pin voltajına göre nasıl tetikleme yapabileceğimize bakalım.
1. trigger=Pin.IRQ_FALLING

EspPin.irq(trigger=Pin.IRQ_FALLING , handler=PinTrigger)

Bu şekilde yaptığımızda, 33 nolu pin – (eksi) değer aldığı sürece, sürekli olarak PinTrigger fonksiyonu çalışacaktır.

2. trigger=Pin.IRQ_RISING

EspPin.irq(trigger=Pin.IRQ_RISING , handler=PinTrigger)

şeklinde kullandığımızda ise pin değeri eksiden artıya döndüğünde tetiklenir.

Mekanik butonlar durum değiştirme esnasında milisaniye aralığında dalgalanma gönderirler. Bu doğal bir sonuçtur. Bu işlemin bize yansıması, pin tetikleme foksiyonumuzun butona her basıldığıdna 3-5 defa peşpeşe tetiklenmesi şeklinde olur.
Önlem olarak, fonksiyon başında, iki tetiklenme arası 200-300 milisaniye geçmemişse fonksiyondan çık şeklinde bir sorgu koyarsak sorunumuz çözülmüş olur.

coolwolf / 10/08/2019

NodeMCU serial Communication with Nextion using LUA

  1. Never forget to set a fuse in init.lua
gpio.mode(6, gpio.INPUT)
EnableBoot=gpio.read(6)

if EnableBoot==0 then dofile("main.lua") 
else print("Device will not continue booting...")
end

Consider we have a text with id t0 on Nextion.
To test two way communication, we put a button on Nextion, which send “Hello from Nextion” over serial.
This incoming data is also printed to the debug screen.
The last component on Nextion is a gauge with id z0.

Below you can found main.lua file wihch does two way communication with Nextion. It sends the Pot value to the Nextion on input trigger. And at at every second it sends Pot value to Nextion’s gauge as integer value.

print("Normal Boot")

local MyInput=5
local Threshold=1000
local LastTrig=0
local PotValue=0

gpio.mode(MyInput,gpio.INT)

local mytimer = tmr.create()

local function SendToNextion(Object,Property,Value,IsInt)
    if IsInt then
        uart.write(0,Object.."."..Property.."="..Value..(string.char (255))..(string.char (255))..(string.char (255)))
    else 
        uart.write(0,Object.."."..Property.."=\""..Value.."\""..(string.char (255))..(string.char (255))..(string.char (255)))
    end  
end

local function InputTrigger(State, Time)
    local ms=tmr.now()/1000
    local diff=ms-LastTrig
    if diff



I hope this helps.

coolwolf / 18/04/2019

NodeMCU Lua gpio.trig() kullanımı

grpio.trig fonksiyonu ile genel kullanım giriş/çıkışlarının durumlarına göre tetikleme yapabilirsiniz. Aşağıda her bir tetikleme modununun nasıl çalıştığını anlatmaya çalıştım.

up: Pin voltajı eksiden artıya değiştiğinde tetiklenir. Bir kez tetiklendiğinde, eksi görüp tekrar artı görmediği sürece tetiklenmez. Yani tekrar tetiklenmesi için pin girişinin eksi olması ve tekrar artı olması gerekir.
Örnek Kod:

local GirisPini=1 
gpio.mode(GirisPini,gpio.INT) 

local function PinUp(durum, zaman) 
 print("PinUp Durum:"..durum.." Zaman:"..zaman)    
 print("..................")  
end
 
gpio.trig(GirisPini, "up", PinUp)

down: Pin voltajı artıdan eksiye döndüğünde tetiklenir. Bir kez tetiklendiğinde tekrar tetiklenmesi için pin değerinin yeniden bir kez artı ve tekrar eksi olması gerekir.
Örnek Kod:

gpio.mode(GirisPini,gpio.INT) 

local function PinDown(durum, zaman) 
 print("PinDown Durum:"..durum.." Zaman:"..zaman)    
 print("..................")  
end
 
gpio.trig(GirisPini, "down", PinDown)

both: Pin voltajı değiştiğinde tetiklenir. Eksiden artıya veya artıdan eksiye her değiştiğinde tetiklenir.
Örnek Kod:

gpio.mode(GirisPini,gpio.INT) 

local function PinBoth(durum, zaman) 
 print("PinBoth Durum:"..durum.." Zaman:"..zaman)    
 print("..................")  
end
 
gpio.trig(GirisPini, "both", PinBoth)

low: Pin voltajı eksi olduğu sürece sürekli tetiklenir. Yukarıdakilerin tamamı bir kez tetiklenirken, low ve high sürekli olarak tekrar eder.

local GirisPini=1
gpio.mode(GirisPini,gpio.INT)

tamponsure=300
zamanfarki=0
sonokuma=0

local function PinLow(durum, zaman)
    --sürekli tekrar etmemesi için 300 milisaniyelik aralıklarla kontrol etsin
    zamanfarki=(zaman-sonokuma)/1000
    if zamanfarki




high: Pin voltajı artı olduğu sürece sürekli tetiklenir.

local GirisPini=1
gpio.mode(GirisPini,gpio.INT)

tamponsure=300
zamanfarki=0
sonokuma=0

local function PinHigh(durum, zaman)
    --sürekli tekrar etmemesi için 300 milisaniyelik aralıklarla kontrol etsin
    zamanfarki=(zaman-sonokuma)/1000
    if zamanfarki




coolwolf / 15/01/2019

AndroidStudio 3.3 Could not find method testImplementation() Error

AndroidStudio 3.3 güncellemesi yaptıktan sonra günlerce bu sorunu çözmeye uğraştım. Android ve Java ile ilgili ne varsa silip tekrar kurduğum halde sürekli alttaki hatayı aldım.

Could not find method testImplementation() for arguments [junit:junit:4.12] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

En sonunda testImplementation ibaresini testCompile olarak değiştirdim. Ardından androidTestImplementation ibarelerini de androidTestCompile yaptım.

Android Sudio’nun son sürümünü kullananlar zaten bilecektir, Implementation yerine Compile yazıldığında, Compile term is outdated and the message says “It will be removed at the end of 2018” hatası alınıyor.

2018 çoktan geçti 🙂

Compile yazarak sorunumu çözdüm. Ama bir süre sonra jeton düştü. Bu nalet olası Java’nın oldum olası Türkçe harflerle sorunu olmuştur. Implementation’un baş harfi I, halbuki bu Java küçük i’yi İ olarak istiyor. Bunun derdi bu olmasın. Şunu testİmplementation şeklinde yazayım bakalım ne olacak. Veeeee, tahmin ettiğim gibi oldu. Hatasız çalıştı.

Bu durumda, Türkçe Windows kullanılıyorsa (karakter setinde İ harfi kullanan diğer dillerde de geçerlidir bence), alttaki build.grade dosyasında bulunan alttaki kodu

testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

şu şekilde değiştirmek sorunu çözecektir:

    testİmplementation 'junit:junit:4.12'
    androidTestİmplementation 'com.android.support.test:runner:1.0.2'
    androidTestİmplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

Umarım başkalarının da günlerini ziyan etmemesinde katkım olmuştur.

coolwolf / 27/09/2018

MVC’de Controller açıklamaları eklemek ve bu açıklamaları listelemek

Controller adının üzerine Description attribute ekliyoruz:

[Description("Benim Çok Çalışan Kontrollerim")]
public class MyController : Controller
{
}

ardından uygulamamızdaki tüm controller’leri ve içlerindeki metodları listelemek için aşağıdaki fonksiyonu kullanabiliriz:
 

Assembly assembly = Assembly.GetExecutingAssembly();
IEnumerable types = assembly.GetTypes().Where(type => typeof(Controller).IsAssignableFrom(type)).OrderBy(x => x.Name);
List _controllers = new List();
List _methods = new List();
foreach (Type cls in types)
{
	AttributeCollection attributes =TypeDescriptor.GetProperties(this)[cls.Name].Attributes;
	DescriptionAttribute myAttribute = (DescriptionAttribute)attributes[typeof(DescriptionAttribute)];
	_controllers.Add(new SelectListItem() { Text= myAttribute.Description, Value= cls.Name.Replace("Controller", "") });
	IEnumerable memberInfo = cls.GetMethods(BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public).Where(m => !m.GetCustomAttributes(typeof(System.Runtime.CompilerServices.CompilerGeneratedAttribute), true).Any()).OrderBy(x => x.Name);
	foreach (MemberInfo method in memberInfo)
	{
		if (method.ReflectedType.IsPublic && !method.IsDefined(typeof(NonActionAttribute)))
		{
			_methods.Add(new SelectListItem() { Text=method.Name.ToString() });
		}
	}
}

coolwolf / 13/04/2018

SyncFusion Toolbar Visual Studio’da görünmezse yapılacaklar

Komut Satırını yönetici olarak başlatın.
Aşağıdaki dizine girin.

C:\Program Files (x86)\Syncfusion\Essential Studio\16.1.0.32\Utilities\ToolBoxInstallers>
ToolboxInstallerConsole_VS2017.exe

dosyasını (veya sizin Visual Studio sürümünüze uygun olanı) aşağıdaki parametrelerle çalıştırın.

C:\Program Files (x86)\Syncfusion\Essential Studio\16.1.0.32\Utilities\ToolBoxInstallers\ToolboxInstallerConsole_VS2017.exe reinstall 4.6 ASP.NET,WPF,WindowsForms

1. Parametre reinstall, ToolBar’ı tekrar kurduruyor.
2. Parametre 4.6 framework sürümü
3. ASP.NET,WPF,WindowsForms hangi platformlar için toolbar kurulacağını belirtiyor.

coolwolf / 22/03/2018

MVC @Html.DropDownList SelectedValue does not work

I am new to mvc. When i create @Html.DropDownList, i see sometimes i can set SelectedValue but sometimes i can not.
I tried many solutions like creating “<select” manually, passing generic List<>, passing List<SelectListItem>, passing SelectList etc.
But no success. Razor View does no select the item which i want.
After days of searching, i found a blog entry which solve my problem.
My controller side was like that:

public ActionResult Liste(int? MyValue)
{
	if (MyValue== null || MyValue == 0) MyValue = 1;
	List<SelectListItem> _sl = Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().Select(v => new SelectListItem{Text = v.ToString(),Value = ((int)v).ToString()}).ToList();
	foreach(SelectListItem _itm in _sl)
	{
		if (_itm.Value == MyValue.Value.ToString()) _itm.Selected = true;
	}
	ViewBag.ProductType= _sl;
	ViewBag.SelValue= MyValue;
	return View();
}

and my Razor View was like that:

@Html.DropDownList("ProductType", (List<SelectListItem>)ViewBag.ProductType, new { @class = "form-control" })

normally there is no problem. Problem occurs only when i try to set selected item. This completely works.
So what is the problem then?
The problem is: The name of dropdown and viewbag constant is same. 
When i change my controller to this:

public ActionResult Liste(int? MyValue)
{
	if (MyValue== null || MyValue == 0) MyValue = 1;
	List<SelectListItem> _sl = Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().Select(v => new SelectListItem{Text = v.ToString(),Value = ((int)v).ToString()}).ToList();
	foreach(SelectListItem _itm in _sl)
	{
		if (_itm.Value == MyValue.Value.ToString()) _itm.Selected = true;
	}
	ViewBag.MyProdList= _sl;
	ViewBag.SelValue= MyValue;
	return View();
}

and View to this:

@Html.DropDownList("ProductType", (List<SelectListItem>)ViewBag.MyProdList, new { @class = "form-control" })

everything works.
I wonder, why did i not understand this before.
If anyone face same problem, i hope he/she find this blog entry and not spent lot of time as i spent.

coolwolf / 29/10/2016

Sql Server kullanıcılarını yedekleme ve geri alma

Yeni bir Sql Server sunucusu kurdunuz. Eski sunucunuzdaki kullanıcıları yeni sunucuya aktarmak istiyorsunuz ama parolalarını hatırlamıyorsanız, alttaki yöntemi izleyebilirsiniz.

Sql Server Management Studio’da Security->Logins kısmını açın.
Dışarı aktarmak istediğiniz kullanıcının adına sağ tuşa tıkladıktan sonra :
Script Login As -> CREATE To -> File/Clipboard/New Query Windows seçeneklerinden size uygun olanı işaretleyiniz.
Bu şekilde dışarı aldığınız kullanıcıyı oluşturma scriptini yeni sunucunuzda çalıştırdığınızda, eski kullanıcınız kendi parolası ile yeni sunucuda oluşturulmuş olacaktır.