Skip to content

Category: programmingSyndicate content

Иван Ванков

 И ти ли Бруте…..

   от Иван Ванков


От няколко месеца, всеки ползваш gmail знае, че ще сменят интерфейса, как ли не го набутваха тоя нов дизайн, как ли не го отказвах. И ето, преди 2 дни корпоративните клиенти бяха задължение да минат на него, от днес и всички простосмъртни. Ама защо бе хора, защо се излагате така?
И така, какво не ми харесва в това, и в google като цяло (откакто Лари Пейдж измести ония сладур от ръководния пост).
Първо, аз съм просто програмистче, и за мен правилото „Ако работи не го пипай“ важи в пълна сила. 4 години с един интерфейс, и накрая айде нов (малко като на FB глупостите). Новия интерфейст е ужасен, не ергономичен, цветовете, контраста, четимостта са под всякаква критика, а темите правят нещата още по-ужасни. И да завиеш лай*о в опаковка, пак си остава лай*о.

 

Иван Ванков

 Какво е EXIF

   от Иван Ванков


Тези дни попаднах на една новина, че хакер от анонимус е заловен заради снимка на гърдите на приятелката му. Жалко, приятелката му има с какво да се похвали, но не за това е тази статия :)
EXIF е стандарт, позволяващ да се записва допълнителна информация в направените снимки, като дата на снимката, с какво устройство, на какво фокусно разстояние, дали е използвана светкавица, сериен номер на устройството, с което е снимана и най-вече гео координати.
Когато направите снимка с любимият си iShit, андроид или каквото и да е там произведено последните 3-4 години, на 100% имате записани EXIF данни, и след като качите тази снимка в някоя социална мрежа, те са четими от техните системи. Имайте предвид, че в огромна част от случаите оразмеряването на снимката (thumb) не премахва EXIF данните, и трябва ръчно да ги изчистите.

 

C, PHP, VB, .NET

 MySQL Query Cache

   от C, PHP, VB, .NET


Използването на “кеш за заявки” е една добра възможност за повишаване на бързодействието на СУБД. В MySQL функционалността се нарича “query cache”. Идеята е да се записват готови резултати от вече изпълнени SELECT заявки в паметта и така те да се използват наготово. За целта се използва хеш таблица. Правилната настройка на кеша за заявки може да доведе до значително ускорение в бързодействието на системата. За да направим това обаче трябва да разберем как той функционира и съответно какво можем да спечелим и какво можем да загубим от използването му.

Общи настройки, променливи и формули

Четирите най-основни настройки за кеша на заявки са:

 

C, PHP, VB, .NET

Стандартно една SQL заявка преминава през два етапа – подготовка (което включва лексикален и синтактичен анализ) и изпълнение. Подготовката е нещо подобно на компилацията при езиците за програмиране – текстът въведен в заявката се подготвя до изпълним за средата код. След това този код се изпълнява и се връща резултат към софтуерния продукт. Подготвените заявки ни дават възможност да разделим тези две стъпки и да ги изпълняваме отделно една от друга. Това означава, че имаме възможност първо да “компилираме” заявката с една команда, а да я изпълним в последствие чрез втора.

Подготвените заявки могат да бъдат с и без параметри. Ето един пример за такава заявка без параметри:

 

C, PHP, VB, .NET

Заявките от тип “EXPLAIN SELECT…” се използват предимно от администраторите на бази от данни, за да видят т.нар. “query execution plan” (план за изпълнение на заявките). При слагането на префикс EXPLAIN преди дадена SELECT заявка тя не се изпълнява, а вместо това се извежда информация за това по какъв начин MySQL ще я изпълни.

Всяка заявка EXPLAIN връща като резултат таблица с 9 колони. Нека да разгледаме пълния им списък и възможните стойности, като дадем кратко описание:

 

C, PHP, VB, .NET

Нужно е да се направи база от данни за споделяне на статии между голяма група от потребители. В нея за всички потребители се пази уникален номер и уникално име. Всеки потребител може да има три основни роли – обикновен потребител (може да чете информация), автор (може да споделя информация) и рецензент (преглежда статии и ги одобрява или отхвърля). Разбира се авторите и рецензентите сами по себе си са обикновени потребители. Освен това не е забранено на даден автор да бъде и рецензент на други статии.

 

C, PHP, VB, .NET

 Събития в MySQL

   от C, PHP, VB, .NET


“Събитията” (events) в MySQL ни позволяват да изпълняваме процедури отложено във времето. Те може да са регулярни, еднократни или ограничени в даден интервал от време. Основната полза от тях идва тогава, когато искаме да извършваме операции, които не са жизненоважни за функционирането на системата “в момента на изпълнение”. Такива може да са заявки за обобщение на данни (например изготвяне на статистически отчет в края на деня) или такава промяна на данни, която е хубаво да бъде правена, но не е съществено необходима за функционирането на системата и ако я правим всеки път, то бихме забавили излишно приложението.

 

C, PHP, VB, .NET

Към версия 5.5 MySQL продължава да НЕ поддържа CHECK ограничения. В предишна статия показахме как може да се симулира CHECK с VIEW. С версия 5.5 на MySQL вече може да се използват т.нар. SIGNALS в тригери и съхранени процедури, което ни позволява “да хвърляме грешки” от тях.

Пример 1: Нека покажем един пример – имаме елементарна таблица, в която записваме данните за потребители, каквато например използваме за примера за скрипт за автентикация в раздел ПТСК:

 

C, PHP, VB, .NET

 Тригери

   от C, PHP, VB, .NET


Тригерите са начин за автоматизиране на действия свързани с обработката на информация в базите от данни. Те са процедури, които се изпълняват при извикване на заявки insert, update или delete. Ако приемем изпълнението на такива заявки за “събитие”, то тригерите са процедури, които се изпълняват преди или след дадено събитие.

Нека покажем един пример – ще създадем таблица с няколко футболни отбора:

CREATE DATABASE football;
USE football;

CREATE TABLE clubs(
  id TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255) NOT NULL UNIQUE,
  points TINYINT UNSIGNED NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO clubs(name, points)
VALUES ('Славия', 0),
       ('ЦСКА', 0),
       ('Левски', 0);

И таблица с възможните мачове помежду им:

 

C, PHP, VB, .NET

 Insert … on duplicate key update…

   от C, PHP, VB, .NET


В предишната статия се повдигна един уместен въпрос, който можем да сведем до “поддържане на броячи в MySQL”, т.е. стойности които се инициализират на 0 ако въвежданите данни не съществуват или се увеличават с единица ако ги има.  Разбира се ще използваме примера от предишната статия. Там имахме следната примерна таблица: