C, PHP, VB, .NET

Дневникът на Филип Петров


Авторски архив

* INTERSECT и ЕXCEPT в MySQL

Публикувано на 13 април 2015 в раздел Бази от Данни.

В теорията на релационните бази от данни се използват често основните операции върху множества. Досега не сме ги разглеждали в теоретичен план, а ги използвахме чисто интуитивно. Сега отново няма да се задълбочаваме във формализъм, а ще погледнем нещата от практична гледна точка, като естествено ще поставим основния акцент върху реализацията на операциите в MySQL. Прочети още...

.

 


* Добавяне на captcha към автентикационната форма

Публикувано на 05 април 2015 в раздел ОСУП.

В тази статия ще покажем съвсем елементарна форма за captcha. Първо ще започнем с файл "captcha.php", в който се прави следното: Прочети още...

.

 


* Автоматична автентикация с cookie чрез token

Публикувано на 20 март 2015 в раздел ОСУП.

В предишните примери, в които показвахме автентикация с cookie, ние записвахме името и паролата в това cookie. Основен проблем на първоначалното решение беше, че ги записвахме като най-обикновен текст. В този случай хакер може да открадне бисквитката и моментално да разбере името и паролата на човека. Първоначалното решение на проблема, което предложихме, беше да се криптират със симетричен алгоритъм за криптиране (напр. aes256-cbc) с много дълъг (хардкоднат в приложението ни, или пък защо не - записан в базата от данни и различен за всеки клиент) ключ. В тази статия ще покажем една изцяло различна концепция - няма да записваме име и парола в бисквитката, а вместо това ще записваме уникален token в базата от данни, с който ще автентикираме потребителите. За основа на кода ще използваме този осъвременен вариант на нашата автентикационна система вместо оригиналния пример (въпреки, че ще забележите, че освен key straightening и по-надеждни хеш алгоритми, като цяло кодът е еквивалентен на оригиналния). Оригиналните статии за cookies (1, 23) бяха писани преди да покажем техниките за запазване на пароли в база от данни. Именно затова в тази статия ще обвържем двете техники в един общ автентикиращ стрипт. Прочети още...

.

 


* Упражнение 2, 2015

Публикувано на 18 март 2015 в раздел ОСУП.

В това упражнение показваме login форма. Паролите са хеширани със salt (уникален ключ за всеки потребител в базата) и pepper (един общ salt в кода). Прочети още...

.

 


* Статични методи на клас Stream

Публикувано на 16 март 2015 в раздел ПИК3 Java.

В тази статия ще разгледаме статичните методи на клас Stream. Ще покажем и два начина за генериране на безкраен поток - чрез Supplier и чрез метод iterate.

Примерите с код, които ще опишем по-долу се надграждат един-друг. В началото трябва да добавите java.util.function.*, java.util.*, java.text.* и java.util.stream.*. Прочети още...

.

 


* Монади с Java 8 Stream

Публикувано на 16 март 2015 в раздел ПИК3 Java.

Във функционалното програмиране понятието "монада" означава изчисление, което се провежда в поредица от стъпки. Това може да са вержини операции или поредица от операции създадена чрез генератори на функции (примери и за двете показахме по-рано). В тази статия ще се фокусираме върху едно от сериозните нововъведения в Java 8 - клас Stream, чрез който могат да се реализират монади върху списъци и масиви. Още в началото трябва да се отбележи, че под "Stream" нямаме предвид познатите InputStream и OutputStream, а един изцяло нов клас, който се помещава в пакета java.util.stream. Прочети още...

.

 


* Генератори на функции (Currying) в Java 8

Публикувано на 14 март 2015 в раздел ПИК3 Java.

Ако имаме една функция от няколко входни параметри, която като резултат връща друга функция с по-малко параметри, ще казваме, че имаме "генератор на функции". Терминът на английски се нарича "currying" и е важен за функционалното програмиране. Нека разгледаме един пример за генератор на функция, който е написан на по-стара версия на Java (<=7). Нарочно няма да използваме функционалните интерфейси, които са налични в Java 8, а ще си дефинираме сами такъв: Прочети още...

.

 


* Шеста нормална форма

Публикувано на 14 март 2015 в раздел Бази от Данни.

Шеста нормална форма (6НФ) е предложена през 1990 г. от Кристофър Дейт с цел да бъдат разрешени проблеми с дублиране на информация при т.нар. "времеви масиви с информация" (temporal data). Става въпрос за таблици, в които записваме информация за настоящи и предишни варианти на дадени записи. Нека например разгледаме следната таблица: Прочети още...

.

 


* Затваряния (Closures)

Публикувано на 12 март 2015 в раздел ПИК3 Java.

Един интересен момент при писането на локални класове е свързан с достъпа до променливи и обекти, които са извън блока дефиниращ локалния клас. Оказва се, че локалните класове (и анонимните в частност) имат достъп до локални променливи и референции към обекти, които са извън техния обхват. Това важи също така и за новия по-модерен вариант с ламбда изрази в Java 8 (те са анонимни класове в крайна сметка). Има обаче едно сериозно ограничение - променливите или референциите трябва да са final. Нека дадем един първи елементарен пример: Прочети още...

.

 


* Вградени функционални интерфейси

Публикувано на 11 март 2015 в раздел ПИК3 Java.

В Java 8 има една поредица от вградени функционални интерфейси, които имат важна роля при използването на ламбда изрази в библиотечните функции. Използването на тези интерфейси е силно насърчително (вместо създаването на собствени еквивалентни такива). В предишната статия вече говорихме за добре познатите Comparator, ActionListener и Runnable. Сега ще обърнем внимание на някои от новите интерфейси, които идват с Java 8. Прочети още...

.