Kijelölő keret eltávolítás az aktív HTML elemről

A legtöbb böngésző alapértelmezésben megjelöli a weboldalon éppen aktív elemet. Ennek oka, hogy például billentyűzetről lépkedve az oldal elemei között, a felhasználó tudhassa, az oldal melyik eleme aktív, azaz fogadja az adatbevitelt. Ez történik, ha a tab billentyűvel bejárjuk egy űrlap beviteli mezőit, vagy egy menü pontjain megyünk így végig. Bizonyos elemeknél ez azonban ronthatja a felület megjelenésének egységességét, ráadásul a látogatók többsége nincsen tisztában böngészője ezen képességével. Szerencsére a megjelenő keret kikapcsolása egyszerű, meg kell adnunk a szokásos CSS selector-t és beállítani az outline tulajdonságot:

1
2
3
.menu a {
	outline: none;
}

Ha az oldal összes eleménél, globálisan szeretnénk elvégezni a kikapcsolást, a szokásos * HTML selector-t használjuk:

1
2
3
* {
	outline: none;
}

Hálózati kapcsolat meglétének ellenőrzése C++-ban

Az alábbi kód segítségével megállapítható, hogy az operációs rendszer rendelkezik-e élő hálózati kapcsolattal (adott esetben Internet eléréssel). A megoldásban a trükk, hogy sorra vesszük az elérhető hálózati csatolókat és megvizsgáljuk, tartozik-e hozzájuk érvényes IP cím. Ez a megoldás csak dinamikus IP-kiosztás esetén működik, mivel fix IP cím esetén a hálózati interfész minden körülménytől függetlenül rendelkezik a megadott IP címmel.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <unistd.h>
#include <iostream>
#include <iomanip>
#include <sys/types.h>
#include <ifaddrs.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <string>
#include <list>
 
using namespace std;
 
bool network_connected (list<string> &ifaces) {
	struct ifaddrs *if_addr_struct = NULL;
	struct ifaddrs *if_addr = NULL;
	void *addr_pointer = NULL;
	bool ip_found = false;
 
	ifaces.clear();
	getifaddrs (&if_addr_struct);
 
	for (if_addr = if_addr_struct; if_addr != NULL; if_addr = if_addr->ifa_next) {
		if (if_addr->ifa_addr->sa_family == AF_INET) {
			addr_pointer = &((struct sockaddr_in *) if_addr->ifa_addr)->sin_addr;
			char addressBuffer[INET_ADDRSTRLEN];
			inet_ntop (AF_INET, addr_pointer, addressBuffer, INET_ADDRSTRLEN);
			if (strcmp (if_addr->ifa_name, "lo") != 0 && strcmp (addressBuffer, "127.0.0.1") != 0) {
				ip_found = true;
				ifaces.push_back (string (if_addr->ifa_name));
			}
		}
	}
 
	if (if_addr_struct != NULL) {
		freeifaddrs (if_addr_struct);
	}
 
	return ip_found;
}
 
int main() {
	list<string> ifaces;
 
	for (int i = 0; i < 3; i++) {
		if (network_connected (ifaces)) {
			cout << "Connected";
			for (list<string>::const_iterator it = ifaces.begin(); it != ifaces.end(); it++) {
				cout << " " << *it;
			}
			cout << endl;
		}
		else {
			cout << "NOT connected" << endl;
		}
 
		sleep (1);
	}
}

A 28. sorban a lo hosztnevet és a 127.0.0.1 IP-t kivételként kezeljük, mivel ezek csak a visszacsatoló (loopback) interfészek.

Új MySQL adatbázis és felhasználó létrehozása

Ha egy-két egyszerű SQL paranccsal szeretnénk egy új adatbázist (és hozzá tartozó felhasználót) létrehozni, az alábbi SQL parancsok lesznek a segítségünkre. Először magát az adatbázist kell létrehoznunk, mivel a felhasználónál erre már hivatkozni fogunk:

1
CREATE DATABASE IF NOT EXISTS `peldadb`;

Természetesen a peldadb helyére a létrehozandó adatbázis nevét kell írni. Fenti parancs azonban csak akkor működik, ha ilyen nevű adatbázis még nem létezik. Létező adatbázist az alábbi paranccsal törölhetünk:

1
DROP TABLE IF EXISTS `peldadb`;

Mindkét esetben szerepel a parancsokban egy feltétel is (exists / not exists), melynek köszönhetően az adatbázis törlését/létrehozását csak abban az esetben kísérli meg a MySQL, ha az létezik / nem létezik. Ezzel kiküszöbölhető, hogy a szkript futása hibával megálljon. Például, ha nem tudjuk, hogy az adott nevű adatbázisból létezik-e már egy korábbi verzió, a feltételes törléssel megpróbálhatjuk eltávolítani a korábbit, mielőtt az új létrehozásával próbálkoznánk. Ha ez a példa kedvéért jogosultság hiányában nem történik meg, a létrehozó parancs még mindig nem fog hibára futni, mivel létező adatbázis esetén nem kísérel meg azonos néven még egyet létrehozni.

Ha az adatbázisunk elkészült, szükségünk lesz egy MySQL felhasználóra is, aki az új adatbázist elérheti, kezelheti. Ennek legegyszerűbb módja az alábbi:

1
GRANT ALL ON peldadb.* TO 'felhasznalonev'@'localhost' IDENTIFIED BY 'jelszo';

Fenti parancsban a peldadb és jelszo az új felhasználó nevére és jelszavára cserélendő. Megjegyzendő, hogy az adatbázis nevénél nincs szükség aposztrófra, míg a felhasználónév, a hosztnév és a jelszó esetében igen. A localhost azon gép neve vagy IP címe, ahonnan az elérést az adott MySQL felhasználó számára engedélyezzük. A példában is szereplő érték esetén a hozzáférés csak akkor érvényes, ha a felhasználó a MySQL adatbázissal azonos gépen próbál kapcsolódni a kiszolgálóhoz. Webtárhely kiszolgálóknál jellemzően ez a helyzet. Ha nem szeretnénk korlátozni a hozzáférést ilyen módon, hosztnévnek a % jelet kell megadni. A külső támadások elkerülése végett azonban ezt csak indokolt esetben használjuk, lustaságból soha!

Az adatbázis neve mögötti . után szereplő * jelentése: az adatbázis összes táblája. Ez nem csak a már létező, de a később létrehozandó táblákhoz is hozzáférést biztosít a felhasználó számára. Fentiek alapján egy példa, ha egy helyi hálózaton lévő gép számára csak a logs táblát szeretnénk elérhetővé tenni:

1
GRANT ALL ON peldadb.logs TO 'felhasznalonev'@'192.168.1.100' IDENTIFIED BY 'jelszo';