Ha az Eclipse-et használod C++ projektek fejlesztésére, akkor könnyen belefuthatsz a következő üzenetbe.

A project Build-elése ugyan megtörténik, de a futtatás már a fenti hibaüzenettel elszáll. Vagyis ez nem is hibaüzenet, egyszerűen nincs megadva a Futtatási beállítások. Mi a teendő?

A projekt nevén jobb klikk és a menüből kiválasszuk a Properties menüpontot. Majd a Properties ablakban megkeresed a Run/Debug Settings menüt. Ha ez megvan létre kell hozni egy új környezetet a New… gomb megnyomásával. Itt alapvetően jó minden, de kedved szerint változtathatsz. Majd ha ez kész, akkor Apply and Close.

Maga az osztály, amit majd be szeretnénk tölteni a szokásos struktúrával rendelkezik:

<?php
// MyCaptcha.php
defined('BASEPATH') OR exit('No direct script access allowed');

class MyCaptcha
{
}

A helye az application/libraries alatt kell lennie.

Aztán irány az application/config/autoload.php fájl. Itt keressük meg ezt a sort és egészítsük ki hasonlóan.

$autoload['libraries'] = array('database', 'MyCaptcha');

Majd ha hivatkozni akarsz rá:

$this->mycaptcha->randomCaptchaPic();

CodeIgniter – version 3.1.7

create or replace function Haversine(
p1_lat double precision, 
p1_long double precision, 
p2_lat double precision, 
p2_long double precision
)
returns double precision as $tavolsag$
declare
	EarthRadius constant double precision = 6372.8;
	m_pi constant double precision = 3.1415926535;
	diffLat double precision;
	diffLong double precision;
	a double precision;

begin	
	diffLat = m_pi * (p2_lat - p1_lat) / 180;
	diffLong = m_pi * (p2_long - p1_long) / 180;
	
	p1_lat = m_pi * (p1_lat) / 180;
	p2_lat = m_pi * (p2_lat) / 180;
	
	a = sin(diffLat / 2) * sin(diffLat / 2) + sin(diffLong / 2) * 
		sin(diffLong / 2) * cos(p1_lat) * cos(p2_lat);
	return EarthRadius * 2 * asin(sqrt(a));	
end;
$tavolsag$ LANGUAGE plpgsql;

Kisvárda-Nyíregyháza távolság kilométerben.

TEST2=# select Haversine(48.21667, 22.08333, 47.95539, 21.71671);
 haversine 
------------------
 39.8318008206491
(1 row)

C++ forrás ebben a témában.

Néhány hasznos tapasztalat a Vim fül kezelésével kapcsolatban! Minimum 7-es Vim szükséges.

Fülek létrehozása és bezárása

  • :tabnew [fájlneve] – Ez létrehoz egy új fület a paraméterben megadott fájlévvel, ha a paraméter elmarad akkor ezt No Name felirattal jelzi is.
  • :tabedit fájlnév – megadott fájlnév szerkesztése.
  • :tabclose – aktuális fül bezárása.
  • :tabonly – csak az aktuális fület hagyja nyitva, a többit bezárja.
  • :tab split – az aktuális fület lemásolja egy új fülre.

Navigálás parancs módban:

  • :tabp – Az előző fülre ugrik.
  • :tabn – a következő fülre ugrik
  • :tabfirst – az első fülre ugrik
  • :tablast – az utolsó fülre ugrik
  • :tabm 0 – az aktuális fület az első helyre teszi
  • :tabm – az i+1. fülre ugrik.

Normál módban is navigálhatunk

  • gt – követkző fülre ufrik
  • gT – előző fülre ugrik

A vim indításakor is létrehozhatjuk a kívánt tabokat.

vim -p elso.txt masodik.txt harmadik.txt

 

Ebben a bejegyzésben egy Git szervert fogok létrehozni, ami egy Docker konténeren futó Debian Linuxon fog futni. A Git szervert ssh-n keresztül éri el, ezért kell egy ssh szerver, ami jelen esetben az openssh-server lesz. Telepítsük fel a szükséges csomagokat.

apt install openssh-server openssh-client openssh-known-hosts git

Ha sudo-zott rendszert használunk, akkor a sudo szükséges az elejére. Az openssh-server a telepítéskor létrehozza a szerveren az SSH privár és publikus kulcsokait, de generáljunk újakat.

rm -v /etc/ssh/ssh_host_*
dpkg-reconfigure openssh-server

Ezt követően indítsuk el az SSH szerverünket. Mivel ezen a konténeren nincs systemd, ezért a jól bevált init.d szkriptel teszem meg.

/etc/init.d/ssh start
[ ok ] Starting OpenBSD Secure Shell server: sshd.

Ellenőrizzük is a kliensen:

nmap 172.17.0.2 -p 22

PORT STATE SERVICE
22/tcp open ssh

Úgy tűnik működik. Most hozzunk létre a szerveren egy git nevű felhasználót:

useradd git
passwd git
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
mkdir /home/git
chown git.git -R /home/git/

És kész! Próbáljuk is ki működik-e az ssh elérés a git felhasználóval a kliensről:

ssh git@172.17.0.2
git@172.17.0.2's password:
$

Igen! Ha ezzel megvagyunk másoljuk fel a kliens gép publikus SSH kulcsát a ssh szerverre, így jelszó nélkül tudunk belépni és a git szervernek parancsokat kiadni a kliensről. Ez többféle módon megtehető, én most ezt választottam:

scp ~/.ssh/id_rsa.pub git@172.17.0.2:/home/git/uploaded_key.pub
ssh git@172.17.0.2 "mkdir -p ~/.ssh && cat ~/uploaded_key.pub >> ~/.ssh/authorized_keys && rm uploaded_key.pub"

Majd a ha ezzel megvagyunk konfiguráljuk be az SSH szervert, hogy csak publikus kulccsal rendelkező felhasználókat engedjen be. Szerkesszük a /etc/ssh/ssh_config fájlt a szerveren.

PasswordAuthentication no
ChallengeResponseAuthentication no

Ezt követően indítsuk újra az ssh szervert.

/etc/init.d/ssh restart
[ ok ] Restarting OpenBSD Secure Shell server: sshd.

Ezek után már kulccsal fog beengedni. Térjünk vissza eredeti témánkhoz, a Git szerverhez. Ahhoz, hogy a Git szerver repóban parancsokat tudjunk végrehajtani léteznie kell  a szerveren az adott könyvtárnak és ott egy inicializált Git adatbázisnak. hozzunk létre a szerveren egy proba repót.

mkdir -p ~/git-repos/proba
git init --bare ~/git-repos/proba
ls -la ~/git-repos/proba
total 40
drwxr-xr-x 7 git git 4096 Jan 25 13:01 .
drwxr-xr-x 3 git git 4096 Jan 25 13:00 ..
-rw-r--r-- 1 git git 23 Jan 25 13:01 HEAD
drwxr-xr-x 2 git git 4096 Jan 25 13:01 branches
-rw-r--r-- 1 git git 66 Jan 25 13:01 config
-rw-r--r-- 1 git git 73 Jan 25 13:01 description
drwxr-xr-x 2 git git 4096 Jan 25 13:01 hooks
drwxr-xr-x 2 git git 4096 Jan 25 13:01 info
drwxr-xr-x 4 git git 4096 Jan 25 13:01 objects
drwxr-xr-x 4 git git 4096 Jan 25 13:01 refs

A jogosultságoknak és a tulajdonságoknak mindenképpen a git felhasználóhoz kell, hogy rendelve legyenek. Na, OK! Klónozzuk a távoli repót.

git clone ssh://git@172.17.0.2/home/git/git-repos/proba
Cloning into 'proba'...
warning: You appear to have cloned an empty repository.

Figyelem! Mindig a teljes elérési úttal adjuk meg a repó elérését! Ezt követően nézzük meg a kliensen a repó távoli beállítását.

cd proba
git remote -v
origin	ssh://git@172.17.0.2/home/git/git-repos/proba (fetch)
origin	ssh://git@172.17.0.2/home/git/git-repos/proba (push)

És akkor próbáljuk is ki a kliensről.

[anon117@anon117box proba]$ echo alma >> alma txt
[anon117@anon117box proba]$ git add .
[anon117@anon117box proba]$ git commit -m "commit üzenet"
[master (root-commit) 1b4e9da] commit üzenet
 1 file changed, 1 insertion(+)
 create mode 100644 alma
[anon117@anon117box proba]$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 217 bytes | 108.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://172.17.0.2/home/git/git-repos/proba
 * [new branch]      master -> master

Úgy tűnik működik. A különböző rendszereken lehetnek eltérések, de az alap gondolat ugyanaz.

A SimpleSSHD androidos alkalmazást vizsgáljuk meg. Nem egy nagy kaland. Az ssh szerverre kulccsal tudunk belépni, ezt az sdcard0/ssh mappa alatt tárolja a jól ismert authorized_keys fájlban szereplő publikus kulcs segítségével. Szóval annyi a dolgunk hogy a PC-n lévő publikus kulcsunkat felmásoljuk a telefonra. Ehhez ad segítséget egy egyszer használatos jelszóval. Szóval:

~/.ssh $ scp -P 2222 id_rsa.pub user@192.168.1.212:authorized_keys

Aztán már mehet is a vigadalom:

ssh user@192.168.1.212 -p 2222

Ha már létezik authorized_keys létező kulcsokkal a szerveren, akkor a szerveren kell hozzáfűzni a publikus kulcsunkat az authorized_keys-hez.

~/.ssh $ scp -P 2222 id_rsa.pub user@192.168.1.212:myPubKey
cat myPubKey >> authorized_keys

Ehhez újból be kell majd lépj a telefon SSH szerverére, ezért a RESET KEYS menüpontban kérhetsz újabb egyszer használatos kulcsot. Lényeg, hogy létezzen a kulcsod az authorized_keys fájlban.

Az Androidos ConnectBot ssh klienssel akartam csatlakozni a router-hez publikus kulccsal. Ehhez ugye a kliensen generálni kell egy ssh kulcsot. Ezt a ConnetcBot megteszi.

Screenshot_2017-12-15-14-12-11

Majd ezt követően fel kell másolni a publikus kulcsot a ssh szerverre, jelen esetben a router-re. Ehhez engedélyezni kell a LEDE-ben a root jelszavas ssh elérést. Ezt csak ideiglenesen van nálam, mert minden kliens publikus kulccsal jelentkezik be.

Majd lépj be és másold fel a publikus kulcsot. Itt megjegyzem, hogy a ConnecBot-nak van olyan menüje, ahol a kulcsot vágólapra másolja, így könnyebb az életünk.

echo "PUBLIKUS _KULCS" >> .ssh/authorized_keys

Gyakorlatilag ennyi, ha mégsem tudna belépni, akkor PC-ről másoljuk a publikus kulcsot a LUCI System - Administration menüpontja alatt lévő SSH keys részhez.

Ide…

Megjegyzés! A képen látható kulcsok a /overlay/upper/etc/dropbear/authorized_keys fájlban találhatóak.

És már kész is. Használatra fel.

Figyelem! Javasolt a root felhasználó jelszó elérését mellőzni, ezért továbbiakban ezt az opciót vegyük ki a LEDE-ből. Én magam részéről az egyéb jelszavas elérést is mellőzném. Jelenleg elég a publikus kulcsos elérés is.

LEDE_no-root

Ubuntu/Linux Mint alatt elég régi verzió van csomagban, ezért opcionálisan feltelepíthetjük a nodejs.org oldalról. Van aktuális (current) és hosszú karbantartású (LTS). Én most az LTS verziót használtam.

wget https://nodejs.org/dist/v8.9.3/node-v8.9.3-linux-x64.tar.xz

Ezt kitömöríted…

sudo tar -C /usr/local --strip-components 1 -xJf node-v8.9.3-linux-x64.tar.xz

Majd csinálsz néhány szimlinket a /usr alá:

sudo ln -s /usr/local/bin/node /usr/bin/node
sudo ln -s /usr/local/bin/node /usr/bin/node
node --version
v8.9.3

 

Van egy ősrégi integrált nvidia VGA-s gép és szerettem volna már régen KDE 5 Plasma felületet rajta. Igazság szerint elég reménytelen volt eddig, mert még elindulni se nagyon akart. Viszont most neki kezdtem, hátha lesz valami. Lett is. Címszavakban elmesélem mi a helyzet.

  1. lépésként kapcsold ki az összes Asztal effektust. Rendszerbeállítások – Asztal működés: Aszal effektusok. Így már kevésbé omlott össze a kép.
  2. Aztán próbálkozhatsz a kompozítor állítgatásával. Rendszerbeállítások – Kijelző és monitor: Összeállító. Itt kipróbálhatod a Szakadás megelőzése (VSinc): Soha beállítást. Aztán ha még nem az igazi kikapcsolhatod a Kompozítor bekapcsolása induláskor pipát.
  3. Aztán ugye jó lenne nvidia driver is, mert a nouveau ugyan eldöcögött, de jó lenne egy kis sebesség. Először megnéztem milyen legacy driverek vannak a 304-hez.
    sudo apt show -a nvidia-304 | grep Version
    Version: 304.135-0ubuntu0.16.04.1
    Version: 304.131-0ubuntu3

    Először a 131.el próbálkoztam:

    sudo apt install nvidia-304=304.131-0ubuntu3

    Ez nem ment, csak fekete képernyő volt meg kurzor. Nézzük a másikat:

    sudo apt install nvidia-304=304.135-0ubuntu0.16.04.1

    Ez már ment. Siker!

    Ha neked nem működne, akkor rakd vissza a nouveau drivert:

    sudo apt remove --purge nvidia-304=304.135-0ubuntu0.16.04.1
  4. Igazából a feliratoknál is volt gond, sok helyen fura fekete foltok jelentek meg a tálcán. Ezen úgy segítettem, hogy a Noto betűtípust lecseréltem Dejavu Sans-ra, ezt már valamivel jobban rendereli.

Egy próbát megér.

Környezet: nvidia 7050, Linux Mint 18.2 (KDE 5)

Metódus láncolás Javascript-ben.

var Person = function() {
	this.name = undefined;
	this.hairColor = undefined;
	this.height = undefined;
};

Person.prototype.setName = function(name) {
	this.name = name;
	return this;
}

Person.prototype.setHairColor = function(color) {
	this.hairColor = color;
	return this;
}

Person.prototype.setHeight = function(height) {
	this.height = height;
	return this;
}

var person1 = new Person()
	.setName("anon117")
	.setHairColor("brown")
	.setHeight(192);

var person2 = new Person().setName("Catriona").setHairColor("blond").setHeight(175);

var person3 = new Person();
person3.setName("Goldie").setHairColor("hazel").setHeight(190);

console.log(person1);
console.log(person2);
console.log(person3);

/*
{ name: 'anon117', hairColor: 'brown', height: 192 }
{ name: 'Catriona', hairColor: 'blond', height: 175 }
{ name: 'Goldie', hairColor: 'hazel', height: 190 }
*/