официально -- логин/пароль/email самоутерян :-)
Andrej / Андрей
29 January 2011 @ 11:56
что касается javascript и ";" -- то лично для себя я (примерно как уже полгода) сделал определённые выводы...
но вот наконец я воодушевился передать эту банальнейшую тему -- и на всеобщее обозрение.... потомучто интернеты кипят новыми www-технологиями :-)
...и Javascript конешно же развивается тоже -- стремительными темпами :-) :-)
но так или иначе..
# нужно ли ставить точку с запятой после каждой Javascript-инструкции?
считаете ли Вы что в Javascript -- знак ";" разделяет инструкции между собой (по аналогии с C/C++)?
ответить на этот вопрос -- поможет простой отрывок от скрипта:
// этот скрипт написан в стиле C/C++ .
// то есть -- после каждой операции поставлен знак ";"
//
// ......но есть ли в этом хоть какой-то смысл?
// ...считаете ли Вы что знак ";" разделяет инструкции между собой?
// сейчас и проверим...
function test_semicolon_core() {
// ядро проверки смысла указания ";"
//
// если знаки ";" действительно разделяют инструкции между собой
// то -- функция вернёт значение <true>.
// иначе -- функция вернёт значение <undefined>
return
true;
};
function on_test_button_click(event) {
var test_results = test_semicolon_core();
var result_msg;
if(test_results) {
result_msg =
'Да!\n' +
'\n' +
'Действительно знак ";" разделяет инструкции друг от друга\n' +
'\n' +
'То есть в Javascript -- знак ";" (после каждой инструкции) ИМЕЕТ тот же СМЫСЛ что и для языка C/C++';
} else {
result_msg =
'Нет!\n' +
'\n' +
'На огорчение любителям языков C/C++ (зато на РАДОСТЬ любителей языка Python =^____^=) -- ' +
'в Javascript указание знака ";" -- СЛАБО влияет на разделение инструкций друг от друга\n' +
'\n' +
'То есть в Javascript -- инструкции разделяются через знак новой строки "\\n" (как в и Python), ' +
'а излишний знак ";" попросту игнорируется ' +
'(кроме конечно случаев когда хочется указать сразу две инструкции в одной строчке)';
}
alert(result_msg);
};вот так вот!! :-) :-)
готовый опытный образец скрипта -- здесь -- http://test-semicolon.narod.ru/
22 October 2010 @ 12:19
видимо -- в человеческом социуме -- есть противоположные друг другу вещщи/сущности , но противоположные таким образом , что в то время как на <одной-стороне> противоположность <другой-стороны> кажется очевидной, то на <другой-стороре> противоположность <первой-стороны> вообще незамечается :-)
вот например:
сущность -- подярок :
не существует людей которые любят беспорядок... однако существуют люди которые:
- любят подярок
- игнорируют понятие порядка/беспорядка
cущность -- здоровый образ жизни (ЗОЖ) :
не существует людей которые любят вредный образ жизни... однако существуют люди которые:
- любят полезный образ жизни
- игнорируют понятие о полезности/вредности образа жизни
сущность -- свобода :
не существует людей которые любят когда их держут в рабстве :-) ... однако существуют люди которые:
- предпочитают свободу и быть свободными
- игнорируют понятие свободы и рабства
сущность -- Свободное Программное Обеспечение (СПО [*] ) :
не существует людей которые любят проприетарщину (Собственническое ПО [*] )... однако существуют люди которые:
- предпочитают СПО
- игнорируют весомость (или вообще понятие) различия между СПО и ППО
<...вобщем..примеров..может..быть..мно
...но суть всего этого в том что если вдруг разгорается тематичный спорный диолог между людьми <первой> категории и <второй> категории... то спор часто переходит в неконструктивность и глупость :-D :-D...
например в то время пока <первые> люди начинают говорить о том как хорошо когда человек ведёт здоровый обзаз жизни... -- то <вторые> люди начинают говорить о том что они совсем не против здорового образа жизни (но им якобы некогда, у них якобы работа жена дети и т п и т д)
тоесть <вторая> категория людей просто непонимают о чём им хотят сказать <первая> категория людей :-) ... (<вторые> видят <первых> просто как каких-то психов ненормальных :-) :-))
но зачастую и <первая> категория может не адекватно понять людей из <второй> категории.. <первым> может случайно показатсья что ктото является именно любителем вредного обаза жизни :-) [хотя как выше уже было сказано -- любителей вредного образа жизни -- не бывает]
а вот корпорации и маркетологи пользуются тем что люди могут запутаться -- и пытаются внести ещё побольше смуты (чтобы пропихнуть свои говнотовары)
разумеется что преднамеренное запутывание происходит в "пофигистическую" сторону. то есть корпорациям важнее чтобы люди относились -- ко <второй> категории -- по как можно большему числу действительно-важных сущностей...
например призедент компании Майкрософт_Рус -- когда хотел высказать своё отвращение к СПО -- то сказал о том что "правительство должно не обращать внимания на модель распространения" (ну то есть он имел ввиду что правительство должно положить хрен на понятия СПО и Проприетарщина :-))
таким образом -- любая критика в адресс Говнопрянишникова -- по отношению к тому что он мешает развитию СПО в России -- отвечается им фразой "на самом деле я не против СПО"
:-D :-D
вот такие дела :-)
17 October 2010 @ 13:31
на самом деле -- это до бесконечности элементарно... ...
...но вот меня осенило достаточно недавно :-)
суть такая: предположим есть какая-то система.. в которой постоянно появляются новые динамические элементы, ну а старые (неактивные) элементы подлежат удалению
..предположим срок не-активности элемента -- 2 недели ( обозначим это как: lifetime_const = 60 * 60 * 24 * 7 * 2 = 1209600 # секунд :))
в этом случае как(?) нам удалить элементы из системы (из базы данных, например) которые долгое время не модифицировались ?
в терминах MySQL можно _попробовать_ вот так :-) :-) [как советуют в некоторых книжках.. и исходных когдах некоторых продуктов] :
DELETE FROM `my_dynamic_elements` WHERE last_modified + lifetime_const <= current_time; # <-- ОШИБОЧНЫЙ ПРИМЕР
с точки зрения логики -- это пример неверен, так как он не учитывает что в один прекрасный момент разрядная сетка времени может переполнится и current_time -- уже никогда не станет больше чем last_modified + lifetime_const :-) :-D :-D ..
я щитаю что для всяких динамических элементов -- намного правильнее учитывать не текущее _СОСТОЯНИЕ_ времени -- а _РАЗНОСТЬ_ (тобишь _разниццу_ ) между состояниями времён!
ведь именно _разницца_ является _критерием_ , когда мы думаем мысли наподобие "оООО!! да это изменение было целых 15 дней назад" !
тоесть в терминах MySQL это значит:
DELETE FROM `my_dynamic_elements` WHERE ABS(current_time - last_modified) >= lifetime_const; # вполне ЛОГИЧНО !
в качестве побочного негатичного эффекта который может быть нежелательным -- это ситуация когда изза плохой батарейки системного блока -- время биоса обнулится и -- удалятся все данные :-)
но уж лучше такая ситуация (тоесть с полным удалением всех элементов).. чем ситуация с вечным оставлением некоторых "мусорных" элементов... (так как восстановить базу из backup`а , найти корень проблемы и поменять батарейку на материнской плате -- проще чем обнаружить что какие-то из элементов базы данных бессрочно существуют и хрен когда удалятся :))
а если в качестве динамических_элементов -- выступают: какой-нить Кэш или Данные_Сессий -- то и подавно надо сравнивать разность времён! :-)
впрочем, для защщиты от явных сбоев переменной_времени (current_time) -- достаточно в эту формулу ввести маленькую поправку [совершенно не уменьшая её эпической логичности] :
DELETE FROM `my_dynamic_elements`
WHERE ABS(current_time - last_modified) >= lifetime_const
AND ABS(current_time - last_modified) < error_lifetime_const;
где error_lifetime_const например равняется 5 годам :-) ..
вот такая фигня!
19 September 2010 @ 01:25
нада же! Django делали явно умудрёные опытом люди!
***
защита от CRSF-атак -- там включена ПОУМОЛЧАНИЮ(!!!)! .. ыыыЫЫ :-) :-) :-) :-)!!
хотя, как известно любой сайт в котором НЕТ средств защиты от CRSF -- уязвим для этой атаки поумолчанию (изначально!). :-) :-)
...то-есть это НЕ тот вид атаки, который основан на ОПЛОЩНОСТИ допущенной СЛУЧАЙНО разработчиком.. а тот вид который который основан на ЛЕНИ разработчика (или незнании :)... но вероятнее всего конешно лени :-D )
ну к примеру сайты -- www.liveinternet.ru и vk.com (vkontakte.ru) -- довольно долгое время (а может и до сих пор?) -- этим атакам были подвержаны! [...и куча других сайтов... не менее половины x_X ]
...то-есть это НЕ тот вид атаки, который основан на ОПЛОЩНОСТИ допущенной СЛУЧАЙНО разработчиком.. а тот вид который который основан на ЛЕНИ разработчика (или незнании :)... но вероятнее всего конешно лени :-D )
ну к примеру сайты -- www.liveinternet.ru и vk.com (vkontakte.ru) -- довольно долгое время (а может и до сих пор?) -- этим атакам были подвержаны! [...и куча других сайтов... не менее половины x_X ]
***
а ещё в Django -- в шаблонизаторе включена экранизация символов -- и тоже ПОУМОЛЧАНИЮ(!) [но можно конешно же использовать конструкции отключающщие экранизацию в "индивидуальном" порядке]... :-)
...и как после такого -- можно случайно допустить XSS-дыру(?)..
да практически никак! :-)
хотя... -- даже в thepiratebay.org -- потенциально есть XSS-дыры, что можно заметить, зайдя на страничку thepiratebay.org/torrent/3649668/GTA_San _Andreas_full_game_pc__lt__lt_with_crack _gt__gt_ и внимательно поглядев HTML-код:
,
.. :O
да практически никак! :-)
хотя... -- даже в thepiratebay.org -- потенциально есть XSS-дыры, что можно заметить, зайдя на страничку thepiratebay.org/torrent/3649668/GTA_San
,
.. :O***
а взаимодействия с SQL-кодом -- в Django вообще ИСКЛЮЧАЮТСЯ (..и вся работа ведётся только с объектами :)) , так как используется механизм Object-relational mapping (Объектно-реляционное отображение) ...
если нет SQL-кода, то SQL-Injections отпадают автоматически :-) :-)
***
впрочем -- только самый безграмотный-школьник -- сможет допустить оплошность вида SQL-Инъекция или XSS-дыра -- независимо от того какой он использует программный каркас для своего WWW-сайта.. WWW-дыр такого типа -- в реальных Интернетах -- почти наверно и не встречаются нигде....
(неговоря уже о том что в Python-DB-API-2.0 [PEP 249] -- вообще трудно допустить возможность SQL-Инъекции, так как параметры-SQL-запроса передаются отдельным списком :))
....но суть этого журнального файла -- в том что всё это включено в Django -- ПОУМОЛЧАНИЮ! :-) ...и это радует ^__^ , ведь безопасность она и должна быть поумолчанию! :-)
# p.s. а почему так радуюсь -- я(?).. всё очень просто! -- я ведь тоже являюсь пользователь Интернетов.. и тоже пользуюсь различными сайтами.... а было бы неприятно если на каком-то из этих сайтов меня скомпрометируют (отправят сообщение от моего имени.. или ещё чего плохое сделают :):))... вот так-то :-)
01 September 2010 @ 00:32
Google-переводчик теперь более новый и более няшный ^__^
он может перевести всё что угодно!! [ j.mp/bTUBYm ]
# p.s.: зато вчерашней ночью Google не работал всю ночь :-D
26 August 2010 @ 16:22
если приходится много пробовать разных Instant-Messenger-программ -- то всегда приходится делать ОДИН И ТОТ ЖЕ ряд настроек чтобы эти программы работали ДЕЙСТВИТЕЛЬНО как Instant Messenger, а не как <сверх-активный-неугомонный-комбайнер-пыт
1. отключить смайлики.
если использование смайликов НЕ предпологает АВТОЗАМЕНУ, то так и быть, можно смайлики НЕ убирать :-D...
....но если я (или мой собеседник) напечатал ":-)" а вместо этого у меня на экране "
" то простите ЭТО ХАМСТВО когда коверкают сообщения :-/2. отключить звук.
кто первый догадался делать звук в Instant-Messenger`ах (?), это для слепых чтоле(?).. %) %)
3. отключить все-возможные всплывающщие сообщения (и агрессивные уведомления).
достаточно ведь всего-лишь нотификации на панеле задач (или в области нотификации) ...
но для кого делается лишнее привлечение внимания(?)... опять для слепых(?) %) :-D :-D .
неужеле [см.. картинку ниже] -- так плохо видно что появились новые сообщения? %) %) %)

нотификация на панеле задач [см.. прошлую картинку] -- по моему скромному мнению -- это ЛУЧШЕЕ что может быть для скромного (не агрессивного) уведомления! ^__^
4. отключить проверку орфографии
я и так знаю про то что не так написал всякие там "тсья", и не нада мне постоянно это напоминать :-D .. как хочу так и пишу :-/
(по крайней мере из нас двоих [я и Instant-Messenger] -- именно Я носитель языка.. такчто мне лучше знать как что пишется!! :-D :-D )
5. отключить авто-смену статусов
статусы существуют чтобы я сам указывал какой у меня статус...
...зачем эти программы постоянны пытаются -- уплавоять мною[?].. (виртуальным сетевым мною, в данном случае, автоматически меняя статус виртуального меня :)) ..
6. <что-то-ещё-автоматическое>
у каждой навороченной Instant Messenger-программы -- могут быть дополнительные сверх-активные функции "Искусственного Автоматического Интеллнета"...
....которые как и прошлые другие -- ЛЕЗУТ КУДА НЕ ПРОСЯТ :-D , и мешают спокойно работать и общаться :-/
~~~
вот такая вот борьба .. человека и "Автоматического Интеллекта"..
..я хочу "программу" а мне подсовывают "искусственный интеллект".. и зачем %) %) %)...
.....лучше бы вместо этого AI -- разработчики потратили бы время на прикручивание безглючного Audio/Video в свой Instant-Messenger ! :)
21 August 2010 @ 21:55
так как Пайсон (CPython) это интепретатор... то много говорить о компиляции не приходится :-)
однако делается это так:
# компиляция:
$ python -m compileall ДИРЕКТОРИЯ # просто компиляция "по-обычному" :) $ python -O -m compileall ДИРЕКТОРИ # "-O" для применениея оптимизации $ python -m compileall -b ДИРЕКТОРИЯ # "-b" для "традиционного" компилирования, начиная с версии Python-3.2
вот так вот всё просто!! :-) :-) :-)
а что качается Python-3.2 -- то тут появилось нововведение PEP-3147 . и если ЦЕЛЬ компиляции заключается не в ускорении будущей программы, а для КОПИРАСТИЧЕСКИХ целей сокрития исходника -- то "традициднный режим" как раз будет кстате :-D
# декомпиляция:
чуть сложнее чем компиляция :-) :
>>> import marshal, dis
>>> fd = open('ПУТЬ/К/ФАЙЛУ.pyc', 'rb')
>>> magic = fd.read(8)
>>> code = marshal.load(fd)
>>> dis.dis(code)
(на экран выводитсья результат в АССЕМБЛЕРО-виде... наподобие следущего текста...)
2 0 LOAD_CONST 1 (3)
3 STORE_FAST 0 (a)
3 6 LOAD_CONST 2 (4)
9 STORE_FAST 1 (b)
4 12 LOAD_FAST 0 (a)
15 LOAD_FAST 1 (b)
18 BINARY_ADD
19 STORE_FAST 2 (c)
22 LOAD_CONST 0 (None)
25 RETURN_VALUEне очень прям супер ясно, но при желании понять суть можно :-)
# декомпиляция по человечески
программа Decompyle [ decompyle.sourceforge.net/ ] -- восстанавливает исходный код -- почти в том же виде в котором он изначально писался :-) :-D ..
.... ....однако кажется проект "слегка" устарел :-[ :-[ :-[ (что впринцепе не стоит воспринимать прям уж фатально :), так как есть/разрабатываются и другие проекты... :-) например UnPyc [ unpyc.sourceforge.net/ ] )
###
так-то!
11 August 2010 @ 23:32
чем больше в стране ПГМ-инфицированных , тем больше эта инфекция влияет на здоровых людей с иммунитетом :-)
...я всмысле про то что -- теперь здоровх людей -- щитают незаконными.. :-D . дожили :-) :-)
рашка -- такая рашка :-/
тема -- "Запретное Искусство ЖЖ" раскрыта тут: teh-nomad.livejournal.com/364313.html
:-)
11 August 2010 @ 02:48
GStreamer неплохая вешь.... :-)
многие жалуются на GStreamer, говоря что он не так быстро проигрывает видио-фильмы как mplayer .. или ещё какие-то там причины (показ DVD-меню и прочее)...
...но это всё фигня! :-D
главное что GStreamer модульный! и... мммм..э..эээ........ стандартный! :)
если нужно запортить какойнитбудь FLAC-файл [например для записи в глупый MP3-плеер] -- то GStreamer приходит на помошь вот так:
$ gst-launch \(gst-launch -- из пакета "gstreamer-tools" . а для таго чтобы работал кодировщик MP3 (Lame) -- нужен GStreamer-плугин "...-ugly-multiverse" )
filesrc location=ВХОДНОЙ.flac ! \
decodebin ! audioconvert ! lamemp3enc quality=0 ! id3v2mux ! \
filesink location=ВЫХОДНОЙ.mp3
....
........
..............ну и к слову сказать, если уж затронули тему GStreamer -- то думаю стоит отметить что существует и команда которая проигрывает аудио-файл :-)
$ gst-launch filesrc location=ВХОДНОЙ-АУДИО-ФАЙЛ ! decodebin ! autoaudiosink
конешно основная главная фигня +ещё в том что данный мультимедия-фрэймворк можно довольно не сложно подключать к своим программам... но об этом в две строчки не написать.... зато прочитать можно тут:
вобщем.... ДАЁШЬ ИНТЕГРАЦИЮ GSTREAMER ВО ВСЁ! :-) :-D
# Update 2010-08-12 10:54
простой bash-скрипт для массовой порчи FLAC-файлов:
#!/bin/bash
if [ "$1" == "-mass" ]; then
if [ "$#" != 3 ]; then
echo "Invalid arguments"
false
exit
fi
self="$0"
flac_dirname="$2"
export_dir="$3"
exec find "$flac_dirname" -type f -name "*.flac" \
-exec "$self" \{\} "$export_dir" \;
false
exit
fi
if [ "$#" != 2 ]; then
echo "Usage: "
echo -e "\tНадо чтобы был первый агрумент указывал путь какой брать flac-файл,"
echo -e "\tи чтобы второй агрумент указывал директорию для экспорта"
echo -e "\t\t(А если перед первым агрументом указать ключ -mass, "
echo -e "\t\tто можно конвертировать целые директории)"
true
exit
fi
flac="$1"
export_dir="$2"
flac_dirname="$(dirname "$flac")"
flac_basename="$(basename "$flac")"
mp3_dirname="$export_dir/$flac_dirname"
mp3_basename="$flac_basename-downgraded.mp3"
mp3="$mp3_dirname/$mp3_basename"
mkdir -p "$mp3_dirname"
echo "\`$flac' -> \`$mp3'"
exec gst-launch \
filesrc location="$flac" ! \
decodebin ! audioconvert ! lamemp3enc quality=0 ! id3v2mux ! \
filesink location="$mp3"
false
...так-что теперь можно сделать чтото типа этого:
$ $ ./flac-downgrade -mass МОЯ/ДИРЕКТОРИЯ/CО/ВСЕЙ/МУЗЫКОЙ export-mp3:-)
###