Recent Posts

PowerShell API İstek Gönderme | Sistem

PowerShell API İstek Gönderme | Sistem

Merhaba, bir sunucudan bir API uygulamasına zaman zaman erişim problemi yaşadığımızı düşünüyordum.Bir IP’ye ping atar gibi o servise sürekli istek gönderip izleyeyim diye düşündüm.Windows Powershell’de şu şekilde yapılabiliyormuş: Selamlar.

Dizin Dosya İzleme | C#

Dizin Dosya İzleme | C#

Merhaba, ağ üzerindeki bir yoldan WEB uygulaması ile dosyaya erişemedim bir türlü.Uygulama havuzunda Administrator yetkisi de verdik olmadı.Ben de mesele daha fazla çözümsüz kalmasın diyerek ufak bir uygulama yazdım ağdaki bu dizini dinleyen.Orada bir dosya oluştuğu anda WEB sunucusunda bir dizine çekiyorum ve web uygulamasından 

TopShelf İle Windows Servis Uygulaması | C#

TopShelf İle Windows Servis Uygulaması | C#

Merhaba, Windows açılışında bazı uygulamaların otomatik başlaması için bir ufak konsol uygulaması yazdım.
Bunu da Tolshelf kullanarak Windows Servisi’ne çevirdim.
Örnek kodlar şu şekilde:

Program.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Xml;
using Topshelf;

namespace ConsoleWinSrvBatStart
{
    public class Program
    {
        /// <summary>
        /// ConsoleWinSrvBatStart install diyerek kuruyoruz.
        /// ConsoleWinSrvBatStart uninstall diyerek kaldiriyoruz.
        /// </summary>
        /// <param name="args"></param>
        public static void Main(string[] args)
        {
            try
            {
                ayarlariYukle();
                HostFactory.Run(hostConfig =>
                {
                    hostConfig.Service<BaslangicService>(serviceConfig =>
                    {
                        serviceConfig.ConstructUsing(() => new BaslangicService());
                        serviceConfig.WhenStarted(s => s.Start());
                        serviceConfig.WhenStopped(s => s.Stop());
                    });
                    hostConfig.RunAs(@".\Administrator", @"Admin şifresi....");
                    hostConfig.StartAutomaticallyDelayed();
                    hostConfig.SetServiceName("BaslangicUygulamaCalistirmaServisi");
                    hostConfig.SetDisplayName("Baslangic Uygulama Calistirma Servisi");
                    hostConfig.SetDescription("Baslangic Uygulama Calistirma Servisi .Net 4.8 ve Topshelf kullanildi.");

                    hostConfig.OnException(ex =>
                    {
                        File.AppendAllText(Sabitler.UygulamaDizini + "/ServiceLogg.txt", Environment.NewLine + DateTime.Now.ToString("yyyyMMddHHmmss") + " : " + ex.ToString());
                    });
                });
            }
            catch (Exception ex)
            {
                File.AppendAllText(Sabitler.UygulamaDizini + "/ServiceLogg.txt", ex.ToString());
            }
        }

        static void ayarlariYukle()
        {
            Sabitler.LstUygulama = new List<Uygulama>();
            XmlDocument xmlAyarlar = new XmlDocument();
            xmlAyarlar.Load(Sabitler.UygulamaDizini + "/Settings.xml");
            XmlNodeList lstUygulama = xmlAyarlar.SelectNodes("/KOK/Uygulama");
            foreach (XmlNode node in lstUygulama)
            {
                string tur = node.Attributes["Turu"].Value;
                int beklemeSuresi = Convert.ToInt32(node.Attributes["BeklemeSuresi"].Value);
                string yol = node.Attributes["Yolu"].Value;
                if (!string.IsNullOrEmpty(yol))
                {
                    Sabitler.LstUygulama.Add(new Uygulama() { Turu = tur, BeklemeSuresi = beklemeSuresi, Yolu = yol });
                }
            }
        }
    }
}

Settings.xml

Settings.xml
<?xml version="1.0" encoding="utf-8" ?>
<KOK>
  <Uygulama Turu="BAT" BeklemeSuresi="10" Yolu="d:\canias\iasAppServers\iasRmiRegistry.bat" />
  <Uygulama Turu="BAT" BeklemeSuresi="10" Yolu="d:\canias\iasAppServers\iasControl.bat" />
  <Uygulama Turu="BAT" BeklemeSuresi="10" Yolu="d:\canias\iasAppServers\iasServer-S1.bat" />
  <Uygulama Turu="BAT" BeklemeSuresi="10" Yolu="d:\canias\iasAppServers\iasServer-S2.bat" />
  <Uygulama Turu="BAT" BeklemeSuresi="10" Yolu="d:\canias\iasAppServers\iasServer-S3.bat" />
  <Uygulama Turu="BAT" BeklemeSuresi="10" Yolu="d:\canias\iasAppServers\iasLoadbalancer.bat" />
  <Uygulama Turu="BAT" BeklemeSuresi="10" Yolu="d:\canias\iasAppServers\5-iasWebSrv.bat" />
  <Uygulama Turu="EXE" BeklemeSuresi="10" Yolu="" />
  <Uygulama Turu="SERVICE" BeklemeSuresi="10" Yolu="" />
</KOK>

BaslangicService.cs

using System;
using System.Diagnostics;
using System.IO;
using System.ServiceProcess;
using System.Threading;

namespace ConsoleWinSrvBatStart
{
    public class BaslangicService
    {
        public void Start()
        {
            foreach (Uygulama item in Sabitler.LstUygulama)
            {
                switch (item.Turu)
                {
                    case Sabitler.UygulamaTuruBat:
                        string batFilePath = item.Yolu;
                        ProcessStartInfo processInfo = new ProcessStartInfo();
                        processInfo.FileName = "cmd.exe";
                        processInfo.Arguments = $"/c \"{batFilePath}\"";
                        processInfo.RedirectStandardOutput = true;
                        processInfo.RedirectStandardError = true;
                        processInfo.UseShellExecute = false;
                        processInfo.CreateNoWindow = false;
                        processInfo.WorkingDirectory = Path.GetDirectoryName(batFilePath); ;  // BAT dosyasının bulunduğu dizin

                        Process processStartBat = new Process();
                        processStartBat.StartInfo = processInfo;
                        processStartBat.Start();
                        break;
                    case Sabitler.UygulamaTuruExe:
                        Process processStart = new Process();
                        processStart.StartInfo.FileName = item.Yolu;
                        processStart.Start();
                        break;
                    case Sabitler.UygulamaTuruServis:
                        ServiceController controller = new ServiceController(item.Yolu);
                        if (controller.Status == ServiceControllerStatus.Stopped || controller.Status == ServiceControllerStatus.Paused)
                            controller.Start();
                        break;
                    default:
                        break;
                }
                Thread.Sleep(item.BeklemeSuresi * 1000);
            }
        }

        public void Stop()
        {
            foreach (Uygulama item in Sabitler.LstUygulama)
            {
                Process[] allProcesses = Process.GetProcesses();
                try
                {
                    switch (item.Turu)
                    {
                        case Sabitler.UygulamaTuruBat:
                            // Batlari Windows Servis uygulamasi ile baslatinca BAT isimlerinde yakalayamiyoruz maalesef.
                            foreach (Process processBat in allProcesses)
                            {
                                if (processBat.ProcessName == "conhost"
                                    || processBat.ProcessName == "cmd"
                                    || processBat.ProcessName == "java")
                                {
                                    try
                                    {
                                        if (!processBat.HasExited)
                                        {
                                            processBat.Kill();
                                            processBat.WaitForExit();
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        File.AppendAllText(Sabitler.UygulamaDizini + "/ServiceLogg.txt", Environment.NewLine + DateTime.Now.ToString("yyyyMMddHHmmss") + " : Process Name : " + processBat.ProcessName + ", Id : " + "" + processBat.Id + ", " + ex.ToString());
                                    }
                                }
                            }

                            // Eger isimden yakalamak mumkun olsaydi asagidaki sekilde yakalayip sonlandirabiliyorduk.

                            //////foreach (Process process in cmdProcesses)
                            //////{
                            //////    if (process.MainWindowTitle.Contains(Path.GetFileName(item.Yolu)))
                            //////    {
                            //////        ///Once alt islemleri halledelim...
                            //////        ManagementObjectSearcher searcher = new ManagementObjectSearcher($"SELECT * FROM Win32_Process WHERE ParentProcessId={process.Id}");
                            //////        foreach (ManagementObject obj in searcher.Get())
                            //////        {
                            //////            int childProcessId = Convert.ToInt32(obj["ProcessId"]);
                            //////            Process childProcess = Process.GetProcessById(childProcessId);
                            //////            childProcess.Kill();
                            //////        }
                            //////        ///Sonra ana islemi...
                            //////        process.Kill();
                            //////    }
                            //////}
                            break;
                        case Sabitler.UygulamaTuruExe:
                        case Sabitler.UygulamaTuruServis:
                            string islemAdi = item.Turu == Sabitler.UygulamaTuruServis ? item.Yolu : Path.GetFileName(item.Yolu);
                            foreach (Process servisProcess in allProcesses)
                            {
                                if (servisProcess.ProcessName == islemAdi)
                                {
                                    try
                                    {
                                        if (!servisProcess.HasExited)
                                        {
                                            servisProcess.Kill();
                                            servisProcess.WaitForExit();
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        File.AppendAllText(Sabitler.UygulamaDizini + "/ServiceLogg.txt", Environment.NewLine + DateTime.Now.ToString("yyyyMMddHHmmss") + " : Process Name : " + servisProcess.ProcessName + ", Id : " + "" + servisProcess.Id + ", " + ex.ToString());
                                    }
                                }
                            }
                            break;
                        default:
                            break;
                    }
                }
                catch (Exception ex)
                {
                    File.AppendAllText(Sabitler.UygulamaDizini + "/ServiceLogg.txt", DateTime.Now.ToString("yyyyMMddHHmmss") + " : " + ex.ToString());
                }
            }
        }
    }
}

Selamlar.

Bir Karakterin Unicode Değeri | Javascript

Bir Karakterin Unicode Değeri | Javascript

Merhaba, geçenlerde bir web uygulamasında …startsWith ile kontrol ettiğim bir yerde “C” harfi ile başlayan bir değere hata veriyordu. Girilen değer de “C” harfi ile başlıyordu oysa… Excelden kopyalanan bir değerdi. Bakıldığında bir fark yok gibi geliyor ama aslında iki farklı karaktermiş. Şu şekilde yazdırdığımda 

.Net Framework Değiştirme | C#

.Net Framework Değiştirme | C#

Merhaba, 4.7.1 yazılmış bir projeyi 4.8’e çevirmem gerekiyordu.Proje özelliklerinden 4.8’e çevirip çıkan 2-3 hatayı giderdim.Ancak yerelimde çalışan uygulama sunucuda çalışmadı.Bu zaten alışıldık durum. “System.Web.Mvc” ve “System.Net.Http” DLL’leri ile ilgili hatalar verdi.Araştırdığım kadarıyla, Web.Config dosyasında assemblyBinding nodunda bindingRedirect değerleri ile ilgili bir soruna işaret ediyordu hata.Bunları 

GPT-4o İle Çeviri | C#

GPT-4o İle Çeviri | C#

Merhaba GPT-4o modelini kullanarak çeviri yapabilir miyim diye biraz araştırdım.
Elimde Türkçe açıklamaları olan araç parça listesi vardı.
Bunu 5 farklı dile çevirmem gerekiyordu.
İlk etapta hesabıma 5 dolarlık bir yükleme yaptım ve çeviri yapmayı başardım.
Açıkçası çevirdi çevirmesine ama ben DeepL Çeviri‘yi daha başarılı buldum.

static async Task gptIleCevir()
{
    string apiKey = "aq-trye-jdueryassjdh7kasjoıqw0jljasd012nklsadkj89as";
    string apiUrl = "https://api.openai.com/v1/chat/completions";
    Console.WriteLine("Lütfen bir dosya yolu giriniz:");
    string dosyaYolu = Console.ReadLine();

    if (File.Exists(dosyaYolu))
    {
        Console.WriteLine("Dosya bulundu: " + dosyaYolu);
		// Dosyayi bir listeye atiyorum. Listede malzeme numarası ve Turkce aciklama var.
		// Ama Almanca, Fransizca, Hollandaca, Rusca ve Ingilizce eksik
        List<MalzemeAciklama> lstMalzeme = ExcelIslemleri.Excel2List(dosyaYolu);
        try
        {
            foreach (MalzemeAciklama objMalzemeAciklama in lstMalzeme.Where(objMalzemeAciklama => string.IsNullOrEmpty(objMalzemeAciklama.UzunAciklamaDE)))
            {
                string ifade = objMalzemeAciklama.UzunAciklamaTR.Trim(); 
				// Aciklama sadece rakamlardan olusan bir sekilde ise onu aynen yaziyorum, bos yere kontorumuzu yemesin.
                Regex harfKelimeRegex = new Regex(@"\b[^\W\d_]+\b", RegexOptions.IgnoreCase | RegexOptions.Multiline);

                // Harf Kelime Regex'in metinde en az bir kez geçip geçmediğini kontrol etme
                if (harfKelimeRegex.Matches(ifade).Count == 0)
                {
                    objMalzemeAciklama.UzunAciklamaDE = ifade;
                    objMalzemeAciklama.UzunAciklamaEN = ifade;
                    objMalzemeAciklama.UzunAciklamaFR = ifade;
                    objMalzemeAciklama.UzunAciklamaNL = ifade;
                    objMalzemeAciklama.UzunAciklamaRU = ifade;
                }
                else
                {
                    string text = "lütfen şu dolar işareti arasındaki, bir otomotiv yedek parçasına ait olan ifadeyi sırasıyla İngilizce, Fransızca, Almanca, Hollandaca ve Rusça'ya çevirir misin? : $" + ifade + "$";
                    using (var client = new HttpClient())
                    {
                        client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
                        var requestBody = new
                        {
                            model = "gpt-4o",
                            messages = new[]
                            {
                                new { role = "system", content = text }
                            }
                        };
                        var response = await client.PostAsJsonAsync(apiUrl, requestBody);
                        if (response.IsSuccessStatusCode)
                        {
                            var responseBody = await response.Content.ReadAsStringAsync();
                            ChatCompletionResponse jsonResponse = JsonSerializer.Deserialize<ChatCompletionResponse>(responseBody);
                            string aiResponse = jsonResponse.choices[0].message.content.Trim().Replace("\"", "");
							// Bana dondugu cevap belirli bir standartta oluyor. 
							// Ben de o dondugu cevabi parse eden bir REGEX yazarak her dili ayirdim.
                            UrunAciklama aciklama = dillereGoreAyir(aiResponse);
                            objMalzemeAciklama.UzunAciklamaDE = aciklama.Almanca;
                            objMalzemeAciklama.UzunAciklamaEN = aciklama.Ingilizce;
                            objMalzemeAciklama.UzunAciklamaFR = aciklama.Fransizca;
                            objMalzemeAciklama.UzunAciklamaNL = aciklama.Hollandaca;
                            objMalzemeAciklama.UzunAciklamaRU = aciklama.Rusca;
                        }
                        else
                        {
                            Console.WriteLine("An error occurred: " + response.ReasonPhrase);
                            var responseContent = await response.Content.ReadAsStringAsync();
                            Console.WriteLine(responseContent);
                        }
                    }
                }
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
        }
        finally
        {
            ExcelIslemleri.List2Excel(lstMalzeme, "MalzemeAciklama", dosyaYolu.Replace("-Ceviri.xlsx", "-Ceviri_Auto.xlsx"));
        }

    }
    else
    {
        Console.WriteLine("Dosya bulunamadı: " + dosyaYolu);
    }
}

static UrunAciklama dillereGoreAyir(string p)
{
    UrunAciklama sonuc = new UrunAciklama();
    string pattern = @"(?:İngilizce|Fransızca|Almanca|Hollandaca|Rusça):\s*([^\n]*)";
    Regex regex = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Multiline);

    MatchCollection matches1 = regex.Matches(p);
    int dilIndeks = 1;
    ///Console.WriteLine("Metin 1:");
    foreach (Match match in matches1)
    {
        switch (dilIndeks)
        {
            case 1:
                sonuc.Ingilizce = match.Groups[1].Value.Trim().Replace("$", "");
                break;
            case 2:
                sonuc.Fransizca = match.Groups[1].Value.Trim().Replace("$", "");
                break;
            case 3:
                sonuc.Almanca = match.Groups[1].Value.Trim().Replace("$", "");
                break;
            case 4:
                sonuc.Hollandaca = match.Groups[1].Value.Trim().Replace("$", "");
                break;
            case 5:
                sonuc.Rusca = match.Groups[1].Value.Trim().Replace("$", "");
                break;
            default:
                throw new ArgumentException("Ne isin var ulan burada senin?!");
        }
        dilIndeks++;
    }
    return sonuc;
}

Selamlar.

DeepL API İle Ücretsiz Çeviri | C#

DeepL API İle Ücretsiz Çeviri | C#

Merhaba, DeepL API ile ayda 500.000 karakteri ücretsiz çevirebiliyoruz. Sitesinden kayıt oluyoruz sadece. Kaydolurken bir kredi kartı istiyor ama 1 TL limitli bir sanal kart oluşturabilirsiniz. Çekim yapmıyor. Sonrasında size bir doğrulama anahtarı veriyor. Onu kullanarak aşağıdaki şekilde çeviri yapabiliyoruz. // Nuget Manager’dan DeepL.net indiriyoruz