IOT Denemeleri – LUA Dili

Bir zamanlar malum ülkeden Çin’den birkaç akıllı alet almıştık. Bunlardan bir tanesi WiFi üzerinden Röle açıp kapayan ufak, minnak bir cihazdı. Cihaz’ı Cep telefonu uygulaması üzerinden WiFi ayarlarını vs. yaptıktan sonra uygulama üzerinden Röle’yi açıp kapatabiliyorsunuz. Ufak bir elektrik bağlantısı ile birlikte, Kombinizi, Kapınızı, Televizyonunuzu, Evinizdeki Lambayı vs. Elektrik ile çalışan birçok şeyi cep telefonu üzerinden kontrol edebilir hale geliyorsunuz.

Bir zaman sonra bu cihazın içini merak edip açtığımızda birçok IOT severinde sevdiği ufak bir çip bizi karşıladı. ESP32. ESP32 nin üzerine Node’lardan birini yerleştirmişler. WiFi’ye de bağlanıyor, bişiler de çalışıyor. Sonra TX, RX bağlantı pimlerini görünce dedik ki acaba ? Acaba biz bunun içine girebilir miyiz 🙂 Okumaya devam et “IOT Denemeleri – LUA Dili”

PHP Ufak Tefek Fonksiyonlar – 4

PHP üzerinde ufak tefek fonksiyonlarımdan paylaşmaya devam ediyorum. Bir önceki yazıya buradan ve  buradan tüm ufak tefeklere ulaşabilirsiniz.

Basit ve zaman kazandıran fonksiyonlara yeni bir yazı ile merhaba.

Birkaç yerde tarih işkemi için date( “Y-m-d H:i:s” ) yazıp duruyorum/uz. Kısaltmak lazım. Ne de olsa 3 5 saniye çok önemli. 🙂 datee adında bir fonksiyon ile birkaç karakter fazla yazmaktan kurtuldum diyebilirim. 🙂

function datee( )
{
return date( 'Y-m-d H:i:s' );
}

Okumaya devam et “PHP Ufak Tefek Fonksiyonlar – 4”

PostgreSQL Saatlik Yedekleme Script’i

Projemizde birden fazla Postgresql veritabanı bulunmakta.  Hepsinde de anlık değişiklikler olabiliyor. Sistemsel olarak yedeklemeler mevcut fakat .SQL uzantılı yedeğimiz bulunmamakta. Çünkü bir tablo veya bir satır içerik / veri için tüm sistemi geri döndürmek oldukça mantıksız duruyor.

Daha öncesinde MYSQL için yapmış olduğum yedekleme BASH SCRIPT’ini POSTGRESQL için uyarladım ve çalışır hale getirdim. Database boyutu düşük olduğu için 24 saatlik yedekleme şuanda gayet uygun. Database boyutunu ve server disk kapasitesini düşünerekten geçmişe dönük yedekleri silmeyi unutmayın. Canınız yanar 🙂

Okumaya devam et “PostgreSQL Saatlik Yedekleme Script’i”

MsSql Server Select İçin Türkçe Karakter Çevirme

Entegrasyonunu yaptığımız bir projede karşımıza gelen Türkçe karakter problemi için çözüm arayışına girdiğimde aşağıdakine benzer bir yöntem buldum. Tabiki işe yaradı. Fakat uzun hali ile kısa hali oldukça farklı 🙂

SQL’den SELECT edilen verinin Türkçe karakterler ile geldiği için dosyalama tarafında bozulmalara yol açıyordu. Aşağıdaki Fonksiyon yardımı ile çözüme ulaştık. Fakat bu sırada çözüm arayışı için yardım aldığım yazılımcı bir arkadaş ( İsmail T. )işlemler bittikten sonra bir kod parçası daha gönderdi. Olsun ikiside işe yarıyor 🙂

CREATE FUNCTION tr_replace ( @str_tr NVARCHAR(100) ) RETURNS NVARCHAR(100)
AS
BEGIN
DECLARE @str_x NVARCHAR(100)
set @str_x = @str_tr
set @str_x = REPLACE(@str_x,'ı','i')
set @str_x = REPLACE(@str_x,'ş','s')
set @str_x = REPLACE(@str_x,'ç','c')
set @str_x = REPLACE(@str_x,'ö','o')
set @str_x = REPLACE(@str_x,'ğ','g')
set @str_x = REPLACE(@str_x,'ü','u')
return (@str_x)
END

Kullanım;

SELECT dbo.tr_replace('diplomasız mühendis')

SELECT username, dbo.tr_replace( fullname ), email FROM users;

Diğer yöntem ise aşağıdaki kaynakta yer alıyor. Bu Fonksiyonu kullanırken  “‘TRANSLATE’ is not a recognized built-in function name.” benzer bir hata alırsanız Fonksiyon tanımlı olmadığından yapıyor olabilir.

Kaynak 

Kullanım : SELECT TRANSLATE(string, ‘ĞÜŞİÖÇğüşıöç’, ‘GUSIOCgusioc’) FROM dual;

Fonksiyon tanımlamak için buradaki kaynağı kullanabilirsiniz veya farklı kaynakları tercih edebilirsiniz. Sql server versiyonunuza dikkat etmenizi öneririm

 

Linux Servis Takip & Autostart

Linux ortamlarında birşeyler koşturuyorsanız bazen servisleriniz size naz yapıyor olabilir. Bu nazlı haller geldiğinde ise servisleri restart edip işimize devam ederiz. Genellikle neden nazlandığını bulamayız. Çok derin inceleme ve araştırma gerekebilir. 🙂

Bunun için servisi takip edip durma durumuna göre hızlıca restart eden scriptler mevcut tabiki. Stackoverflow’da bulduğum örneklerden bir tanesi;

#!/bin/bash
service=SERVICE_NAME

if (( $(ps -ef | grep -v grep | grep $service | wc -l) > 0 ))
then
echo "$service is running!"
else
/etc/init.d/$service restart
fi

SERVICE_NAME yazısını servisinizin adı olarak değiştirmeniz yeterli. Örnek olarak “httpd” olabilir. Bash script’i kaydedip CRON olarak eklemeniz ve isteğe göre zaman tanımı yapmanız yeterli. Ben genellikle dakikalık periyotları kullanıyorum.

* * * * * sudo sh /home/service_check.sh > /dev/null 2>&1

Linux dağıtımıza göre yetkilendirme işlemleri gerekebilir.  Bu işlemin arkasına web servis veya mail ortamı bağlayıp kendinize de bildirimler gönderebilirsiniz.

C# Oracle Veritabanı Bağlantı Hatası ( TNS:listener was not given the SERVICE_NAME in CONNECT_DATA )

Bir entegrasyon projemizde gittik Oracle’a denk geldik. Onda da hata ile karşılaştık. Yanlış anlaşılmasın denk geldik işte 🙂 Oracle tarafı ile pek bir tecrübem olduğu söylenemez. Fakat Google gibi bir kaynak elimizin altındayken çözümü bulmamak ayıp olurdu.

Alınan hata aşağıdaki gibi bir hatadır.

System.Data.OracleClient.OracleException (0x80131938): ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA

konum: System.Data.OracleClient.OracleException.Check(OciErrorHandle errorHandle, Int32 rc)
konum: System.Data.OracleClient.OracleInternalConnection.OpenOnLocalTransaction(String userName, String password, String serverName, Boolean integratedSecurity, Boolean unicode, Boolean omitOracleConnectionName)
konum: System.Data.OracleClient.OracleInternalConnection..ctor(OracleConnectionString connectionOptions)
konum: System.Data.OracleClient.OracleConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
konum: System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options)
konum: System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)
konum: System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
konum: System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
konum: System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
konum: System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
konum: System.Data.OracleClient.OracleConnection.Open()

Yukarıdaki gibi bir hata alıyorduk. Hatanın ana teması ise “TNS:listener was not given the SERVICE_NAME in CONNECT_DATA” artık bu ne demekse ( ORACLE ile uğraşanlar biliyorlardır diye tahmin ediyorum 🙂 )

Çözümümüz ise Program tarafında SQL Connection için yazılan string içerisine HOST kısmında aşağıdaki cümleciği yazmak oldu.

(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=BAGLANTI_YAPILACAK_SERVER)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=opera)))

BAGLANTI_YAPILACAK_SERVER bilgisi bağlanacak olduğunuz server bilgisidir. localhost, Server’ın kendi hostname’i, IP Adresi gibi bilgiler olmaktadır.

 

Javascript / JQuery Input Virgül Yerine Nokta

JQuery kullanarak geliştirdiğimiz arayüz çalışmasında matematiksel işlemler yapan ufak bir sayfamız vardı. Fakat Klavyenin sağ tarafındaki Number Pad kullanılığında el alışkanlığı olaraktan ondalıklı sayılar için Virgül kullanıldığında Javascript hataları alıyorduk. Bize gerekli olan ise Virgül tuşuna basıldığında Nokta’ya çevirmesiydi.

Bununla ilgili olaraktan Javascript / JQuery kod parçasını paylaşıyorum. Aynı zamanda ondalıklı sayılar için tek bir ondalık parçası yani tek bir Nokta işareti almalıydı. Kod parçasında nokta yani ondalık var ise tekrardan Nokta basmayacak şekilde düzenleme yaptık.

$( document ).on( 'keypress', '.input_calc', function( e )
{
if( e.keyCode == 46 && $( this ).val().indexOf( '.' ) != -1 )
e.preventDefault();

var tmp = $( this ).val();
if( e.keyCode == 44 )
{
setTimeout(function()
{
if( tmp.indexOf( '.' ) == -1 )
e.target.value += '.';
}, 4 );
e.preventDefault();
}
});

Bu olay / hata / problem artık ne demek isterseniz sadece javascript / web ortamında değil aynı zamanda hemen hemen bütün programlama dilleri ve veritabanı kayıt işlemlerinde ondalıklı sayıların nokta ile gelmesi durumlarını kapsayabilir. Geliştirmekte olduğunuz projede sayısal işlemleriniz mevcut ise dikkat etmenizi öneririm. 🙂

MySql Parçalı Dosyaları İçeri Aktarma

Yedekleme sistemleri her yazılım ve sistem için oldukça önemlidir. Farklı yedekleme senaryoları mevcuttur. Bundanlar en basit olanı veritabanını dump etmektir. Diğeri ise tüm veritabanını tek bir dosyada dump etmek yerine tabloları ayrı ayrı dump etmektir.

Tek bir dosya halindeki yedekleriniz veritabanınızdaki veri büyüklüğüne göre başarılı olabilir. Fakat büyük bir veritabanınız mevcut ise tek bir dosya halinde yedeklemenizi tavsiye etmem.

Elimizde MySql veritabanınızın dump edilmiş hali yani tüm veritabanının dosyaya çıktı alınmış halini aşağıdakine benzer bir komut ile Linux Terminal üzerinden içeriye tekrar alabilirsiniz.


mysql -u MYSQL_USER -pMYSQL_SIFRENIZ VERITABANI_ADI < $d

Okumaya devam et “MySql Parçalı Dosyaları İçeri Aktarma”

Linux CentOS Geçmiş Silme / History Clear

Linux kullanıcılarının çoğu bilir. Hatta HACKER muhabbetlerinde de sürekli geçer.
Asla ayak izlerini belli etme”.
Hacker işlemlerinden çok bir sunucuda konfigürasyon sırasında girilen şifreler olabilir veya yapılan işlemler, adımlar, sql sorguları vb. linux terminal üzerinde yön tuşlarından Yukarı veya Aşağı tuşları ile neler yapılmış neler edilmiş görebilirsiniz. Hatta kullanmış olduğunuz Linux dağıtımına göre history komutu ile listeleme yapabilir, farklı dosyaya çıktı dahi alabilirsiniz.

Hacker muhabbetlerinden ziyade yapılan işin güvenliğini düşünecek olursak – ki bu da hacker muhabbetine dönebilir – geçmişinizi muhakkak kontrol edin, temiz tutun. Bunun için en basit ve birinci adımlardan birisi aşağıdaki komutlardır diyebilirim. Terminalinizden logout / çıkış yapmadan önce komutları uygulayınız..

cat /dev/null > ~/.bash_history && history -c
cat /dev/null > ~/.mysql_history && history -c

 

Tabiki daha detaylı işlemler mevcut. Aklıma gelmişken sizinle paylaşayım dedim. Bunu yapınca hacker vs. olunmuyor onu da söylim 🙂