Pull to refresh
11
0
Send message
Я бы так сказал — объекты реального мира — это трюк, который поможет вникнуть в ООП.

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

А вот когда пишешь игру какую-нибудь? Например, мортал комбат :) здесь сразу понятно — объект — персонаж, у него руки — объекты, ноги — объекты, пальцы — также объекты :) Этакая получается композиция из объектов.

Теперь снова возьмём сайт. Допустим — он доставляет посылки из одной страны в другую. У нас такие объекты:
Страна
Посылка
Склад

У посылки можно выделить метод getCountry() — вернёт объект страны, в которой теперь сейчас посылка. Или сложнее — у посылки вызвать getWarehouse() — вернёт объект склада, а у объекта склада можно сделать getCountry(). Потом чтобы послать посылку можно вызвать метод sendToCountry и передать ему страну назначения. При желании, можно даже взвесить посылку :)

Я сам втыкал в ООП довольно долго и был одним из тех, кто также не мог понять чем классы всё-таки отличаются от функций. В итоге, наверное, яваскрипт помог — когда видишь на экране эти самые объекты, которые двигаешь и т.п.
Настораживает, что слишком много раз употребляется слово класс, и так мало — объект.

Объектно ориентированное программирование — это мышление объектами. Представляем себе объекты реального мира и манипулируем ими в своей программе. Вместо того, чтобы передавать айдишники — передаём объекты и т.п.

Где-то читал, что когда ООП появилось — многие говорили, что это лишняя надстройка и всё можно сделать функциями. Но это совсем не так — это другой подход, и синтаксис тут не причём.

В языке TCL до того, как появилась там нормальная поддержка ООП — люди умудрялись функциями программировать объектно.
Если у вас виджет запускается через яваскрипт — то если тот сайт, с которого он запускается взломали — считайте и ваш также взломали (ну либо виджет со стрёмного ресурса взяли). Можно будет сделать любые изменения на вашей странице и, кроме того, вытянуть куки пользователя.

Если сделать window.parent у ифрэйма, который с другого домена — бравзер ругнётся.
Попробовал через таймаут — ситуация действительно улучшилась :)

По-поводу node-mysql-libmysqlclient — пока что переходить не собираюсь, т.к. сайт уже практически закончен, но в felixge-node-mysql есть несколько косяков, которые заметил (максимальный размер пакета 10мб, местами невозможно словить эксепшн) — если они вдруг помешают чему-то либо скорость решу улучшить — перейду, спасибо.
Оборвалось на полуслове…

getAllCountries(function(countries){
for(var x=0;x < countries.length;x++){
getUsersByCountryId(countries[x].id,function(users){
for(var xx=0;xx < users.length;xx++){
console.log(users[x].name)
}
})
}
})

Вот это не проканает (и array.map тоже) :) А что если нам дальше нужно что-нибудь с юзерами сделать?

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

db.online.fetchRows(«select * from users where name = 'aleks_ja'»,function(user){
db.online.fetchRow(«select * from settings where user_id=»+user.id,function(settings){
console.log(settings.news_amount)
})
})
db.online.sync(function(){
console.log('the end')
})

А как бы это выглядело на пхп?

Опять же буду рад если не прав и можно было сделать проще (inner join не предлагать, примеры от-балды для большей наглядности:))
У меня узких мест нету :)

Вот в яваскрипте (который в бравзере) программирование выглядит похоже на php в плане — всё идёт сверху вниз. А колбэки если и есть — то как-то незаметны, что-ли. А здесь, со мной происходят неприятные вещи именно из-за того, что очень много работы с базой данных. Если бы как-то можно было автоматом засинхронизировать всё что внутри каждого коннекта к серверу — принесло бы большую радость.

Т.е. было бы так:

io.sockets.on('connection',function(socket){
var user=getLoggedInUserDetails()
var settings = getUserSettingsById(user.id)
})

Но если сделать коннекты к бд блочащими, чтобы getLoggedInUserDetails() — внутри подгребали данные пользователей и возвращали в переменную user. То эта блокировка затронет и других подконнекченных пользователей.

И потом, проблемы с колбэками начинаются сразу же как только начинается более-менее логика насыщенная. Когда разные функции что-то подгребают и т.п.

Я до сих пор не нашел, как нормально цикл сделать, когда внутри колбэки (только извращёнными методами) :)

Например,

getAllCountries(function(countries){
for(var x=0;x
Сейчас снова проверил на felixge-node-mysql.

100 запросов типа select, более-менее увесистых (операционка — Ubuntu):
felixge-node-mysql 0.8
php — 0.27

10000 запросов мелких:
felixge-node-mysql — 23.52
php (версия 5.3.6) — 14.04

По вашим бенчмаркам картина похожая. Здесь «в 10 раз», конечно, преувеличено.

А теперь мы сделаем 2 очень мелких запроса:
felixge-node-mysql — 0.109
php — 0.0039

А теперь мы сделаем 5 поувесистей:
felixge-node-mysql — 0.281
php — 0.0149

Здесь получается «в 10 раз» — преуменьшено.

Sannis-node-mysql-libmysqlclient — сейчас не пробовал, но раньше пробовал и там было немного лучше чем felixge-node-mysql, но до пхп всё же очень далеко. Возможно, что-то изменилось с тех пор, либо что-то с настройками, какими-нибудь.

Я надеюсь, что не прав, и дела обстоят лучше, т.к. сам использую и php и node.js
Мне совсем не понятно почему.

$select->from($table);

Не экранирует обратную ковычку.
«Правильно, возьмем и увеличим кол-во php процессов, сразу до 20 или 30 и проблема вроде как ушла, хотя на самом деле проблема просто немного отдалилась и момент когда придет 30 запросов Б наступит. Вся беда в том что мы не можем создавать бесконечно много php процессов и путь наращивать их в запредельных количествах неверен.»
Ну если PHP скрипт у нас просто выполняет какой-то запрос и выдаёт результат (т.е. обычная страница), а не висит выдавая по-немного какие-нибудь яваскрипты (например, чат). То не вижу ничего страшного, что если в долю секунды придёт 60 запросов, 20 из них выполнятся за 0.1, следующие 20 в следующие 0.1 и т.п. т.е. на обработку последнего запроса с учётом ожидания уйдёт 0.3 секунды. Поидее производительность нашего сервера будет 20 запросов за 0.1 секунду, т.е. 200 запросов в секунду или 17280000 в день.

Про node.js + mysql — попробовал я протестировать скорость выполнения запросов — оказалось, что на быстрых запросах php+mysql раз в 10 быстрее работает. Сразу же попробовал различные библиотеки к node.js — та же ситуация.

Теперь немножко про ад :) Каждый раз возвращаясь к программированию на php после node.js — ощущаю эйфорию :) Когда можешь сделать так $user->getCountry()->getCurrency()->getCode(), вместо того, чтобы писать

user.getCountry(function(country){
country.getCurrency(function(currency){
console.log(currency.getCode())
})
})

Про ифы и циклы, в которых есть запросы к бд вообще молчу. (доп библиотеки для синхронизации, конечно, немного помогают, но всё равно совсем не элегантно)

В программе которую я переделывал на node.js почему-то выходит, что начиная с подсоединения к веб-серверу — всё должно идти синхронно. т.е. результат подключения к базе данных 99.8% оказывается нужен в следующей строке кода. А зачем тогда все эти колбэки? А вот когда делаешь что-то блокирующее — блокируется уже полностью все коннекты.
Не ожидал такого от зенд фреймворка. Интересно, есть ли во второй бете такие же недочёты?
Отчасти его я и имел в виду, когда писал про «имеет склонность глючить».

Иногда приходится руками влазить в дампы, что-нибудь подправлять и т.п.

Не говоря уже про базы данных по-больше, которые бэкапятся вечность (пхпмайадмином, хайди и т.п.), а потом ещё и обрывается что-нибудь где-нибудь. И приходится смотреть, для каких таблиц может и структуры хватит :)
Спасибо за ссылку. Осталось полбеды — дамп базы :) а здесь… ничего лучше mysqldump не придумали. Всё что сливается другими способами имеет склонность глючить.
Chosen — это уже чуток не настоящий селектбокс. Например, мне очень хотелось бы видеть в поведении селектбокса, чтобы, когда вводишь букву он именно переходил на нужный пункт, как это делаю бравзерные селектбоксы, а не через поле ввода. Т.к. совсем не обязательно дизайнеры нарисуют поле ввода такое оригинальное как в chosen :) А вот чутка шире/выше/уже обычный дропдаун нарисовать — это всегда пожалуйста.
Хм… у меня вроде как трудностей вообще не было с wkhtmltopdf и wkhtmltoimage (сервер на убунте… без иксов). Просто взял «static binary» версию.
А вот нам, когда говорят — вот наш сайт — доработайте что-нибудь и дают доступ только по фтп — запрет таких вот функций принесёт один гемор. Например, вызвать tar и mysqldump через exec уже не получиться, и придётся реально файлик за файликом по фтп сливать, а он может и прерватья загрузка на каком-нибудь 10 000чном файле и каких битых файлов ещё заодно переслать.

Так что, надеюсь, таким способом не будут сражаться с нарастающей угрозой форк бомб.
Советую wkhtmltopdf. Там же есть и wkhtmltoimage.
Каким-то образом всё же пост связан с информационной безопасностью, хоть и, возможно, отдалённо. Но… что было делать, если пост уже написан, а кармы не хватает разместить его в более подходящий блог? Удалить, чтобы поберечь ваше психологическое состояние?

Пост заплюсовали — значит всё же что-то полезное кто-то для себя нашел.
Карму заминусовали — значит за вас уже отомстили.
Ну можно ведь купить sandboxie — если надоедят попапы. 13 евро в год — это ведь не тоже самое что и какая-нибудь штука баксов. Кто-то может и программу купить после прохождения триал версии несколько раз — если она действительно того стоит, есть деньги, и всплывающие окна бесят.
Интересно, а установка программы на другой комп или в другую операционную систему будет тоже самое что и «устранить ограничения использования произведения, установленные путем применения технических средств защиты авторских прав»?
Бывают такие проги, для которых кряка не найдёшь. А про противоправность — это ещё нужно дообсуждать :)

Information

Rating
Does not participate
Location
Кокосовы (Килинг) о-ва
Date of birth
Registered
Activity