2008-09-17

Singular vs. Plural как называть таблички или тупики развития информационных систем.

программирование

Как то само собой получилось что традиционно таблицы в реляционных базах данных называются в множественном числе как то users, pages, items. Однако последнее время наметилась тенденция к переходу на имена в единственном числе как то user, page, item возможно такая тенденция связана с объектно ориентированным подходом когда каждая запись рассматривается как объект. На мой взгляд множественное число более предпочтительно так как таблица это все же коллекция объектов а не сам объект однако многие фреймворки предлагают совершенно новый подход взаимодействия с базами данных исключая или минимизируя написание программистом непосредственно SQL запросов при помощи различного рода ОО маппингов.

Не могу сказать что использование ОО маппингов это верх технологической мысли. Наоборот это технологический нонсенс. Задумайтесь, язык SQL изначально был предназначен для общения человека с реляционной базой данных не машины а именно человека. Именно поэтому он основан на простых конструкциях английского языка SELECT INSERT UPDATE. Со временем написание комманд на языке SQL стало уделом программистов и системных администраторов. Пользователи же получили GUI, оконный интерфейс и мышу. Однако SQL все также используется для общения с базой данных однако теперь на нем разговаривают не люди и компьютеры а только компьютеры то есть сами программы. То есть программы разговаривают друг с другом на естественном языке! Язык разработанный как средство для общения человека с машиной де факто стал стандартом общения машин между собой. Но программам очень не удобно общаться между собой на естественном языке а тем более программистам совсем не удобно писать программы которые будут использовать этот язык для работы с данными поэтому придумали ОО маппинг технологию когда реляционная модель заменяется объектной. То есть для облегчения хождения на протезах были изобретены костыли. С костылями на протезах ходить намно-о-о-ого приятней. Но может быть пора попробовать что нибудь новое оригинальное. Например, попробовать встать на собственные ноги тем более что они у нас слава богу вроде бы есть взять к примеру те же объектно-ориентированные базы данных.

К слову сказть, также дела обстоят и с протоколами Интернета SMTP, HTTP, POP3 - все они разрабатывались как текстоввые протоколы для работы через телнет. Со временем telnet заменили на специализированные программы - браузеры и майлклиенты а протоколы остались без изменений. Отсюда и тонны спама и проблемы совместимости браузеров и сложности настройки почтовых клиентов. Возможно когда нибудь кретинизм в высоких технологиях и будет побежден но пока клубок противоречий запутывается все сильнее.

 

Оставить комментарий

 
  2008-09-16

как обработать BMP изображение используя PHP

программирование, PHP

Как известно библиотека GD не поддерживает возможность прочитать файлы формата BMP а пользователи (особенно малограмотные пользователи) часто так и норовят закачать на сайт фото или картинку в формате BMP. Как быть если закачать нельзя но очень хочется? Оказывается есть способ.

Здесь работающая демка а здесь сходник

Собственно всю грязную работу выполняет класс написанный Джеймсом Хайнрихом (James Heinrich) для своего проекта getID3(). Что интересно, в последних версиях проекта класс уже не умеет преобразовывать BMP в GD а только читает метаинформацию. На старую версию класса наткнулся совершенно случайно - она есть в phpThumb уже в полном варианте. Большое спасибо Джемс :)

 

Коментариев: 4

 
  2008-06-30

Таскание мышью используя JavaScript

программирование, JavaScript
Здесь работающий пример как сделать сабж. Потаскайте мышью красный квадрат. Работает в IE и FF, в других браузерах тоже должно, хотя и не тестировал.
 

Оставить комментарий

 
  2008-06-20

Как проставить неразрывный пробел ( ) с использованием document.createTextNode

программирование, JavaScript

Долгое время не получалось при работе со структурой документа использовать спец символы типа   - если пишешь что-то типа document.createTextNode('&nbps') то получается не неразрывный пробел а его html представление поэтому приходилось присваивать свойство innerHTML вместо того чтобы оставаться в рамках модели XML DOM что не очень то красиво.

Просто createTextNode не понимает html разметки, ему нужно скармливать символы как они есть без использования html замен, но вот беда, на клавиатуре у нас нет неразрывного пробела - есть только обычный. Оказывается набрать неразрывный пробел можно на клавиатуре - подсказка в виндовой таблице символов - нажимаем alt и не отпуская набираем на дополнительной клавиатуре 0160 (в режиме Num Lock), отпускаем alt - появляется пробел - но это не обычный пробел а самый что не на есть неразрывный, html код которого и есть   его можно вставлять в createTextNode без проблем.

 

Оставить комментарий

 
  2008-06-19

Private методы и свойства в JavaScript

программирование, JavaScript
Наткнулся на замечательную статью про то как в JavaScript можно создавать приватные методы и свойства для объектов. Никогда не задумывался над этим под таким углом, но вещь несомненно очень интересная.
 

Оставить комментарий

 
  2008-06-05

onReady

программирование, JavaScript

Сегодня клиенты пожаловались что если что нибудь на странице не загрузилось то не работатет часть JavaScript'овского функционала - конкретно у них не сработала загрузка видео с ютуба - чето последнее время у них не быстро там все работает. Просто основная логика на странице подключается с использованием события onLoad - в принципе штука не обязательная в человечьих браузерах, но вот в Эксплорере при попытки поменять что либо до этого события возникает очень плохая ошибка.

Беда в том что onLoad возникает когда все изображения и все связные документы подгружены и если например одно из изображения подгружается с другого сервера, который умер, то ждать этого события придется довольно долго иногда несколько минут, и были случаи что событие так и не наступало...

Оказывается вносить изменения в объектную модель браузера можно и до возникновения события onLoad, т.е. когда не все изображения еще подгружены

ниже привожу функцию для отслеживания момента когда в браузере становится возможным вносить изменения в объектную модель документа. Идея позаимствована из JQuery

/** * faster way to load content in browser idea taken frin JQuery * this allows do not wait until data will be completely loaded * seems only opera can allow load faster using this function - * though in JQuery they say it's supported... */ //alert(document.addEventListener); function bindReady(){ if ( bindReady.readyBound ) return; bindReady.readyBound = true; if (document.addEventListener){ document.addEventListener( "DOMContentLoaded", bindReady.ready, false ); } // Mozilla, Opera (see further below for it) and webkit nightlies currently support this event // If IE is used and is not in a frame // Continually check to see if the document is ready if ( Object.isIE && window == top ) (function(){ if (bindReady.isReady) return; try { // If IE is used, use the trick by Diego Perini // http://javascript.nwbox.com/IEContentLoaded/ document.documentElement.doScroll("left"); } catch( error ) { setTimeout( arguments.callee, 0 ); return; } // and execute any waiting functions bindReady.ready(); })(); if ( Object.isSafari || Object.isOpera ) { var numStyles; (function(){ if (bindReady.isReady) return; if ( document.readyState != "loaded" && document.readyState != "complete" ) { setTimeout( arguments.callee, 0 ); return; } bindReady.ready(); })(); } } bindReady.readyBound = false; bindReady.isReady = false; bindReady.ready = function(){ bindReady.isReady = true; var i; for (i=0;i

Тестировал в IE6/IE7, Safari, Opera, FF. Не нравится только как работает в Опере - там скрипт срабатывает позже onLoad, в остальных браузерах гораздо раньше

 

Оставить комментарий

 
  2008-06-04

Вредные советы вебмастерам

разное, вебдизайн, программирование

1. Побольше используйте стилей с именами style1, style2, style3... и не нужно проверять существуют ли такие стили в каскадной таблице - результат может оказаться даже лучше чем вы его представляли - так оно даже интересней. Человеческие имена стилей - удел ламеров и юзеров, нормальные пацаны с компьютером на ты и всегда могут отличить стиль style13 от style12. Побольше стилей с такими именами!

2. Почаще используйте функции создаваемые дримвювером типа - MM_validateForm это очень хорошие функции, не беда что слишком избыточные и громоздкие, ведь для чего-то они нужны правда?

3. Побольше вложенных таблиц! Это просто праздник когда много таблиц вложены одна в другую! Не беда что в большинстве случаев можно обойтись вообще без них, давайте таблиц и побольше!

4. Одиночные теги закрывать не нужно, что мы не знаем что они одиночные что ли...

5. Стили Вайтсмита и Кернигана-Ричи - отстой, будем использовать все сразу и отступы делать как придется - тот кто будет после нас переделывать переформатирует так как ему нравится если такой дотошный...

 

Коментариев: 4

 
  2008-05-01

Как используя GnuPG зашифровать сообщение из программы на PHP?

программирование, PHP

Встала задача - закодировать мейлы посылаемные с сервера крипростойким образом.

В принципе что сложного - ставим на сервер GnuPG, на рабочую станцию PGP импортируем на сервер открытый ключ с рабочей станции и дело в шляпе. Одна загвосдка - GnuPG - это консольная утилита которой для того чтобы зашифровать файл нужно его передать через stdin, результат будет выдан на stdout. Как вызвать ее из программы на PHP? Можно конечно создать временный файл и уже через переадресацию ввода вывода залить его в программу, но это то как то не секьюрно.

Оказывается в PHP есть отличная функция - proc_open, которая позволяет реализовать переадресацию стандартных потоков через pipes - просто и элегантно.

Вот что получилось:

$s = "string to encrypt"; $descriptorspec = array( 0 => array("pipe", "r"), // stdin is a pipe that the child will read from 1 => array("pipe", "w"), // stdout is a pipe that the child will write to 2 => array("pipe", "w") // stderr is a file to write to ); $cmd = 'gpg -e --always-trust -r USERID'; $cwd = '/tmp'; $env = array('HOME' => '/tmp'); $process = proc_open($cmd, $descriptorspec, $pipes, $cwd, $env); if (is_resource($process)) { // $pipes now looks like this: // 0 => writeable handle connected to child stdin // 1 => readable handle connected to child stdout // Any error output will be appended to /tmp/error-output.txt fwrite($pipes[0], $s); fclose($pipes[0]); echo stream_get_contents($pipes[1]); fclose($pipes[1]); $error = stream_get_contents($pipes[2]); echo $error; fclose($pipes[2]); // It is important that you close any pipes before calling // proc_close in order to avoid a deadlock $return_value = proc_close($process); echo "command returned $return_value\n"; }
 

Коментариев: 2

 
  2008-04-14

Полезная функция для валидации email на JavaScript

программирование, PHP, howto
function validateEmail(elementValue){ 
    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;  
    return emailPattern.test(elementValue);  
}
 

Оставить комментарий

 
  2008-02-15

Error Reporting

программирование, PHP

Всем известен оператор @ - если его поставить перед вызовом функции, то любые ошибки случившиеся внутри этой функции не будут выводиться на экран.

Для того чтобы погасить вывод ошибок на экран этот оператор просто локально меняет значение error_reporting а затем возвращает его в предыдущее значение.

Чтобы проверить этот факт создал простейший скрипт:

error_reporting(E_ALL); function test(){ print "inside ".error_reporting()."<br />"; } print "outside: ".error_reporting()."<br />"; @test();

вывод на экран:

outside: 6143 inside 0

Что и требовалось доказать.

 

Оставить комментарий

разное (194)
howto (124)
программирование (110)
гад-же-ты (76)
мысли (42)
PHP (41)
JavaScript (39)
вебмастеринг (37)
linux (29)
гондураша (28)
юмор (25)
полезное (22)
софт (17)
движок (17)
Android (16)
diy (15)
кино (14)
видео (14)
книги (14)
деньги (14)
путешествия (11)
музыка (10)
интернет (10)
беспредел (10)
занимательная физика (9)
умный дом (8)
ztools (8)
хостинг (7)
Nokia 5800 (7)
языки (7)
lifehack (6)
css (6)
вебдизайн (6)
движек (5)
apple (5)
прелоадер (5)
козлы (5)
oDesk (5)
связной (5)
arduino (5)
сказочная страна (4)
Python (4)
svn (4)
кухня (4)
занимательная юриспруденция (4)
аниме (4)
энергия (3)
рестораны (3)
synphony (3)
гаджеты (3)
software (3)
фото на документы (2)
webmastering (2)
Берлин (2)
Java (2)
Ruby on Rails (2)
bash (2)
спорт (2)
гитара (2)
programming (1)
микросервисы (1)
SEO (1)
технологии (1)
C++ (1)
наука (1)
сайты (1)
восстановить (1)
Приехал ESP32 - Cam (1)
авторское право (1)
Поиск по блогу:

Valid XHTML 1.0 Strict