![]() |
0 Всего найдено: 38
cramen
Сообщение
01/03/2012 15:32
Копия темы
да, наверное, раз так и не смог понять хода Вашим мыслей для получения этого вывода...
cramen
Сообщение
01/03/2012 15:15
Копия темы
смета составляется из простейшего отношения рублей/дней ну если за 100 рублей в день это нормальная для кого то зарплата, то для меня нет, т.к. кроме хлеба с водой мне нужно еще за квартиру платить, одежду покупать, иметь мясные продукты в рационе, платить за интернет, немного откладывать на отпуск и т.д. все житейские потребности. а сделать большой интернет магазин за даже 5000 рублей не получится, т.к. один дизайн как минимум займет неделю, не говоря о составлении ТЗ, верстке, программировании, согласованиях и т.п.
cramen
Сообщение
01/03/2012 14:53
Копия темы
не понимаю суть Вашего сообщения, но когда в студии сайт стоит 40000, с учетом всех вычетов, фрилансер может позволить минимальную стоимость этой работы в 17000-20000, а заказчик больше 3000 заэту работу не дает и уверен, что за три недели работы по 1000 рублей в неделю это просто отличная зарплата.
cramen
Сообщение
01/03/2012 14:45
Копия темы
Ага и канарейка в костюме супермена. А еще "скрипт сайта типа фриланса и вконтакте" (c) )
cramen
Сообщение
01/03/2012 14:37
Копия темы
ну так за 2000 заказчик хочет не из шаблонов, а с уникальным креативным дизайном, да еще чтобы "завтра было, что показать"
cramen
Сообщение
01/03/2012 14:34
Копия темы
да дело не в дороже или так же. допустим организация 10% от проекта забирает себе, 20% получает директор, 20% менеджер. (ну это грубо) ну тогда оставшаяся сумма и есть стоимость работы. Но не в 10 раз же. Если работа занимает две недели, и стоит 2000 рублей, то это ни в какие рамки не лезет. Дворник больше получает, чем хотят платить заказчики фрилансерам.
cramen
Сообщение
01/03/2012 14:13
Копия темы
Экономия эти стили слишком расширяли блоги и они ломались, поэтому пока закомментил--> Почему люди(заказчики) приходя к фрилансерам хотят, чтобы им выполнили работу в 10 раз дешевле, чем в организации?
Ну вот стоит в организации сделать небольшой сайт 20000 рублей. Ну как эту работу можно уложить в 2000 рублей? И почему заказчики уверены, что можно?
cramen
Сообщение
22/01/2012 09:13
Копия темы
У меня в unix like не заработает. На java надо писать, чтоб везде работало ;)
cramen
Сообщение
19/01/2012 22:37
Копия темы
Саммая лучшая программа. Часто наблюдаю, как люди начинают путаться и задавать вопросы, видя перед собой 5-10 кнопок(даже меньше) с русскими надписями. Специально для ... Набросал прототип самой лучшей программы. Такая программа позволит свести к минимуму все вопросы пользователей. Но, думаю, инструкцию и на нее надо написать. По ссылке ниже можно опробовать и убедиться. p.s. Конечно же это шутка, но в каждой шутке есть доля правды ;)
cramen
Сообщение
24/10/2011 20:03
Копия темы
Задрали уже эти посредники. Они + школьники создают 80% шлака на сайте.
cramen
Сообщение
05/09/2011 19:53
Копия темы
думаю, первый вариант и гневный камент относительно таких сайтов будет считаться за Ваш вариант ))
cramen
Сообщение
05/09/2011 19:36
Копия темы
Если на посещаемом Вами сайте заиграет музыка как Вы поступите? Если не сложно, объясните свою позицию в комментариях.
cramen
Сообщение
24/07/2011 07:44
Копия темы
Да можно было и в ворде или опенофисе проверить орфографию, если нет корректора.
cramen
Сообщение
24/07/2011 07:38
Копия темы
Я думаю, что вопрос безграмотности намного шире и выходит далеко за пределы интернета.
cramen
Сообщение
24/07/2011 07:15
Копия темы
Это просто лень или подросли дети ЕГЭ. Все чаще начинают встречаться заголовки проектов, которые вроде и содержат грамматически правильные слова, но сами эти слова довольно странно состыкованы. Причем способы стыковки странные как по причине расстановки неверных окончаний так и по причине общего непонимания процесса производства сайтов. Примеры таких заголовков: Исправить меню на сайта Нужен программист для доработка шаблона сайта Заверстать сайт и натянуть на дизайн Нужно сайта для магазина И таких примеров жутко много. И я не касаюсь содержания проектов. Это только заголовки. Скажите, откуда берутся такие заголовки? Из за лени проверить написанное или это действительно нахлынула волна жертв ЕГЭ? p.s. Если Вы один из заказчиков, не в обиду, примите за правило перечитывать написанный Вами текст, перед нажатием кнопки "отправить". Ато такие мрачные тексты уж очень отталкивают, навеивая сомнения в целесообразности сотрудничества ;)
cramen
Сообщение
31/01/2011 09:43
Копия темы
Ну к сожалению тут большинство работодателей школьники, которые делают по две ошибки на слово и хотят "зделать сациальную сети типа вот этой(тут адрес) толька дизаин нада чтобы был более савременным. плачу 1500 рублей.". Или "заверстать и натянуть". Адекватных людей давно уже не видать ))
cramen
Сообщение
31/01/2011 09:31
Копия темы
Что что а вот это забыл ) Но уже поздно добавлять. Статистика нарушится. Да и бюджет немного другого класса параметр. Более адекватным было бы отношение бюджета к временным затратам.
cramen
Сообщение
22/01/2011 12:08
Копия темы
в исходных кодах ) документация по созданию с нуля расширения для хрома. фритрей это только под винду сделано. а это для любой ОС расширение хрома.
cramen
Сообщение
22/01/2011 12:00
Копия темы
Расширение для google chrome для сайта free-lance.ru написал две статьи в своем блоге по созданию расширения, позволяющего оперативно получать информацию о новых проектах на free-lance.ru первая часть вторая часть
cramen
Сообщение
06/10/2010 17:08
Копия темы
Почему не любят фрилансеров и где делают качественные сайты? Давно известный "факт", что заказ сайта на фрилансе заканчивается получение неудобоваримого и некачественного продукта. Откуда появилось такое мнение? Давайте немного Разберемся. Какие бывают заказчики?
Какие бывают фрилансеры?
Все довольно очевидно. Такую классификацию заказчиков и фрилансеров может составить почти каждый. Но самое интересное получается, когда посмотреть на их соотношение. Заказчиков новичков из 3-го и 4-го пунктов подавляющее большинство. Фрилансеры опять же, бОльшая часть это студенты из 2-го и 3-го пункта. Что же получается? То самое большинство заказчиков хотят найти исполнителей подешевле. А большинство исполнителей-фрилансеров, живущих на деньги родителей, занимаются демпингом цен(им все равно, 2000 они получат или 1500, все равно это много пива). Вот и получается, что большинство сайтов делается не профессионалами для не профессионалов. Первые, конечно, довольны. Получили свое и пропали. А вот вторые получили ужасного качества продукт. Отсутствие поддержки со стороны исполнителя. Отказы при обращении к фрилансерам по доработке/исправлению сайта из за отсутствия желания ковыряться в некомментированной и неудобоваримой лапше. Вот как раз эти заказчики и разочаровываются во фрилансе. Но из за отсутствия денег, опять обращаются к таким же студентам и опять получают плачевный результат. Вот и выходит, что большинство заказчиков фрилансеров разочаровываются в этом ранке, пишут гневные комментарии и нагоняют негативную атмосферу вокруг рынка фрилансеров. p.s. Господа заказчики. Будьте адекватны при оплате и определении сроков. Ну не бывает так, чтобы сайт под ключ(даже самый простой) стоил 2000 рублей и делался за 1 день. Да, можно на джумле по быстрому накидать несколько страниц с шаблонным дизайном, в который вставят ваш логотип. Но ведь это не презентабельно! Один дизайн от 3000 стоит. Не забываем про верстку и программирование. Каждый этап занимает время. Более того, если сайт сложнее визитки, желательно составить хотя бы краткое техническое задание. Времени это занимает не менее недели. Но зато вы получаете презентабельный, красивый, удобный в управлении, одинаково отображающийся во всех браузерах сайт. Пожалуйста, помните об этом и не забывайте русскую поговорку: "Скупой платит дважды".
cramen
Сообщение
04/08/2010 07:18
Копия темы
Чтобы подтвердить, что это ваш номер телефона. СМС входящая бесплатно.
cramen
Сообщение
04/08/2010 04:52
Копия темы
Регистрация бесплатно. Стоимость одной СМС 50 копеек. Это дешевле, чем у остальных СМС сервисов.
cramen
Сообщение
02/08/2010 08:49
Копия темы
Отправляем SMS.ru с удобством Было дело, проскакивала на хабре статься о сервисе sms.ru Попробовал, работает. Понравилось. Тогда на этом дело и закончилось. Но вот недавно потребовалось мне сделать отправку SMS подписавшимся клиентам. API на сайте сервися хорошо документирован и приведены примеры, но не хватает удобства использования. В результате написал небольшой класс для взаимодействия с sms.ru. <?php /** * Класс взаимодействия с сервисом sms.ru */ class Z_Service_Sms { protected $_apiId = NULL; protected $_responseCode = NULL; protected $_lastAction = NULL; const HOST = 'http: // sms.ru/'; const SEND = 'sms/send?'; const STATUS = 'sms/status?'; const BALANSE = 'my/balance?'; const LIMIT = 'my/limit?'; protected $_responseCodeTranstale = array( 'send' => array( '100' => 'Сообщение принято к отправке', '200' => 'Неправильный api_id', '201' => 'Не хватает средств на лицевом счету', '202' => 'Неправильно указан получатель', '203' => 'Нет текста сообщения', '204' => 'Имя отправителя не согласовано с администрацией', '205' => 'Сообщение слишком длинное (превышает 5 СМС)', '206' => 'Превышен дневной лимит на отправку сообщений', '207' => 'На этот номер нельзя отправлять сообщения', '208' => 'Параметр time указан неправильно', '210' => 'Используется GET, где необходимо использовать POST', '211' => 'Метод не найден', '220' => 'Сервис временно недоступен, попробуйте чуть позже.', ), 'status' => array( '-1' => 'Сообщение не найдено', '100' => 'Сообщение находится в очереди', '101' => 'Сообщение передается оператору', '102' => 'Сообщение отправлено (в пути)', '103' => 'Сообщение доставлено', '104' => 'Не может быть доставлено: время жизни истекло', '105' => 'Не может быть доставлено: удалено оператором', '106' => 'Не может быть доставлено: сбой в телефоне', '107' => 'Не может быть доставлено: неизвестная причина', '108' => 'Не может быть доставлено: отклонено', '200' => 'Неправильный api_id', '210' => 'Используется GET, где необходимо использовать POST', '211' => 'Метод не найден', '220' => 'Сервис временно недоступен, попробуйте чуть позже', ), 'balanse' => array( '100' => 'Запрос выполнен', '200' => 'Неправильный api_id', '210' => 'Используется GET, где необходимо использовать POST', '211' => 'Метод не найден', '220' => 'Сервис временно недоступен, попробуйте чуть позже.', ), 'limit' => array( '100' => 'Запрос выполнен', '200' => 'Неправильный api_id', '210' => 'Используется GET, где необходимо использовать POST', '211' => 'Метод не найден', '220' => 'Сервис временно недоступен, попробуйте чуть позже.', ), ); /** * * Идентификатор api_id * @param string $id */ public function __construct($id) { $this->_apiId = $id; } /** * * @param string $to телефон: 11 знаков. например 79060000000 * @param string $text текст сообщение * @param string $from отправитель * @return string id сообщения */ public function send($to,$text,$from=NULL) { $url = self::HOST.self::SEND.'api_id='.$this->_apiId; $url .= '&to='.$to; $url .= '&text='.urlencode($text); if ($from) $url .= '&from='.urlencode($from); $body = file_get_contents($url); @list($code,$smsId) = explode("\n", $body); $this->_lastAction = 'send'; $this->_responseCode = $code; return $smsId; } /** * * @param string $id id сообщения * @return string код статуса сообщения. */ public function status($id) { $url = self::HOST.self::STATUS.'api_id='.$this->_apiId; $url .= '&id='.$id; $body = file_get_contents($url); $status = $body; $this->_lastAction = 'status'; $this->_responseCode = $status; return $status; } /** * * @return string Баланс в рублях */ public function balanse() { $url = self::HOST.self::BALANSE.'api_id='.$this->_apiId; $body = file_get_contents($url); @list($code,$balance) = explode("\n", $body); $this->_lastAction = 'balanse'; $this->_responseCode = $code; return $balance; } /** * * @return int количество оставшихся сообщений */ public function limit() { $url = self::HOST.self::LIMIT.'api_id='.$this->_apiId; $body = file_get_contents($url); @list($code,$count,$limit) = explode("\n", $body); $this->_lastAction = 'limit'; $this->_responseCode = $code; return (int)($count $limit); } /** * * @return string код результата выполнения последней операции */ public function getResponseCode() { return $this->_responseCode; } /** * * @return string расшифровка кода результата выполнения последней операции */ public function getResponseMessage() { if ($this->_lastAction) return $this->_responseCodeTranstale[$this->_lastAction][$this->getResponseCode() ]; else return 'Нет данных для возврата сообщения'; } }
cramen
Сообщение
22/07/2010 09:10
Копия темы
не перестанет, т.к. вы только MX записи будете редактировать. A и CNAME вас не будут просить трогать.
cramen
Сообщение
22/07/2010 09:02
Копия темы
Храни каждую сущность в отдельной таблице. Если это все надо как-то увязать в общую структуру, то добавляй таблицы, которые это увязывают(меню, структура и т.п.). Универсального рецепта нет и не будет. Есть популярные. Если хочется разобраться, как они работают, разбери популярные CMS: ModX, Umi, Bitrix, Drupal
cramen
Сообщение
22/07/2010 08:52
Копия темы
вот так $sql = mysql_query("SELECT gallery.tag AS tag1, gallery_album.tag AS tag2 FROM gallery, gallery_album WHERE gallery.tag LIKE '%,".$row[id].",%' OR gallery.tag LIKE '".$row[id].",%' OR gallery_album.tag LIKE '%,".$row[id].",%' OR gallery_album.tag LIKE '".$row[id].",%' ");
cramen
Сообщение
22/07/2010 08:40
Копия темы
Zend_ACL: Хранение в базе данных Рано или поздно все сталкиваются с проблемой контроля доступа и гибкостью управления этим контролем. В Zend Framework есть замечательный компонент. Называется Zend_Acl. И все вроде-бы хорошо. Нужные задачи он решает, но его конфигурирование стоит больших усилий, даже с использованием конфига и ресурслоадера. Хотелось-бы переложить задачу его конфигурирования на отдельный класс, управляемый информацией из БД. Была создана структура БД, в которую укладывались все возможности, которые предоставляет Zend_Acl. Дамп и схема этой БД находится в приложенных файлах. Так-же там находятся все необходимые для работы классы моделей. Итак, сам код необходимого нам класса: <?php class Z_Acl extends Zend_Acl { protected static $instance = null; public function __construct() { $resourcesModel = new Z_Model_Resources(); $resources = $resourcesModel->fetchAll()->toArray(); $resourceById = array(); foreach ($resources as $resource) $resourceById[$resource['id']] = $resource['resourceId']; $res_added = false; while(!$res_added) { $res_added = true; foreach($resources as $resource) { $parentResourceId = array_key_exists($resource['parentid'],$resourceById)?$resourceById[$reso urce['parentid']]:NULL; if ($parentResourceId==NULL || $this->has($parentResourceId)) { if (!$this->has($resource['resourceId'])) $this->addResource($resource['resourceId'], $parentResourceId); } else { $res_added = false; } } } $rolesModel = new Z_Model_Roles(); $roles = $rolesModel->fetchAll()->toArray();// !!! foreach($roles as $role) { $this->addRoleParents($role);// !!! if(!$this->_getRoleRegistry()->has($role['roleId'])) { $this->addRole($role['roleId'], $rolesModel->getParentsArray($role['id'])); } } $privilegesModel = new Z_Model_Privileges(); $rulesModel = new Z_Model_Rules(); $rules = $rulesModel->getAllRules(); foreach($rules as $rule) { if(empty($rule['roleId'])) { $rule['roleId'] = null; } if(empty($rule['resourceId'])) { $rule['resourceId'] = null; } $privileges = $privilegesModel->getRulePrivileges($rule['id']); foreach ($privileges as $privilege) { if(empty($privilege)) { $privilege = null; } if('allow' === $rule['rule']) { $this->allow($rule['roleId'], $rule['resourceId'], $privilege); } elseif('deny' === $rule['rule']) { $this->deny($rule['roleId'], $rule['resourceId'], $privilege); } else { require_once' Zend/Acl/Exception.php'; throw new Zend_Acl_Exception("Unsupported rule type; must be either' " . self::TYPE_ALLOW ." ' or' " . self::TYPE_DENY ." '"); } } } } /** * * @param $role */ public function addRoleParents($role) { $rolesModel = new Z_Model_Roles(); $parents = $rolesModel->getParents($role['id']); foreach($parents as $parent) { $this->addRoleParents($parent); if(!$this->_getRoleRegistry()->has($parent['roleId'])) { $this->addRole($parent['roleId'], $rolesModel->getParentsArray($parent['id'])); } } } /** * @return Z_Acl */ public static function getInstance() { if(null === self::$instance) { $acl = new Z_Acl(); } return self::$instance; } } Класс оформлен, как синглтон. Достаточно подключиться к БД и получить экземпляр класса. Класс наследуется от Zend_Acl, поэтому, как его использовать дальше, смотрите в документации к Zend_Acl. В итоге мы получили класс, у которого можно узнать в любом месте нашего приложения, какая роль, куда и имеет-ли доступ. Остается только написать админку дляуправления созданными таблицами в БД и вуаля: гибкая система контроля доступа у вас на сайте.
cramen
Сообщение
21/07/2010 07:11
Копия темы
0
Еще пара слов о переходе на Jabber или ICQ бот Сам, как приверженец свободных технологий, я давненько завел себе jabber аккаунт, но он долго пустовал, т.к. никто из асечного контактлиста не поддавался на уговоры перейти на jabber. Тут, в свете недавних проблем с AOL и нескольких хабратопиков о XMPP клиентах и способах переманивания людей на них, меня постигла идея поставить на мой UIN бота. Пускай он умеет немного говорить и отсылать всех разговорчивых в нужном направлении. Поискав на тему предмета разговора в интернете, ничего стоящего не удалось найти. Зато наткнулся на Недолго думая, скачал и попробовал на деле. Работает!!! и спустя 30 минут написал следующее: icqbot.php #!/usr/bin/php <?php include('icq.php'); //подключение zendloader require 'Zend/Loader.php'; Zend_Loader::registerAutoload(); //чтение конфига $config = new Zend_Config_Xml('config.xml',NULL,true); //подключение к БД $db = Zend_Db::factory($config->dbadapter,$config->db ->toarray()); $db->query('SET CHARACTER SET "'.$config->dbcharset.'"'); //аськоклиент $icq = new WebIcqLite(); log_write("ICQ Bot started"); //коннектимся if (!$icq->connect($config->icq->login,$config->icq-> password)) { log_write($icq->error); exit(); } log_write("Connected ok"); while($icq->is_connected()) { //читаем входящее сообщение $msg = $icq->read_message(); if($msg) { //список админских комманд if ($msg['message']=="icqbotoff") { $icq->disconnect(); log_write("Exit by admin's command."); exit(); } log_write(" Message '".$msg['message']."' from ".$msg['from']); //режем все лишние символы $msg['message'] = str_replace(array('(',')','/',':','.',',','?','!' ,'@','#','$','%','^','&','*','-','_','=','+','~','`',';','|','\\','\'','"'),'',$msg['m essage']); //ищем ответ $ans = $db->select()->from('messages')->where('q LIKE ?',trim($msg ['message']))->where('LENGTH(a)>0')->order('RAND()')->q uery()->fetch(); if ($ans) { //точное совпадение log_write(" Message '".$ans['a']."' sent to ".$msg['from']); } else { //нет совпадений. ищем полнотекстово. $db->insert('messages',array('q'=>$msg['message'],'a'=>'',' from'=>$msg['from'])); $query = "SELECT *, MATCH q AGAINST ('".$msg['message']."') as relev FROM messages WHERE LENGTH(a)>0 ORDER BY relev DESC LIMIT 1"; $ans = $db->query($query)->fetch(); if ($ans['relev']>) { //нашли ответ log_write("Message (fulltext search) '".$ans['a']."' sent to ".$msg['from']); } else { //нет совпадений. выдаем сообщение по умолчанию. $ans = $db->select()->from('messages')->where('q LIKE ?','default')-> query()->fetch(); log_write("Message 'DEFAULT' sent to ".$msg['from']); } } $icq->send_message($msg['from'], $ans['a']);//собстве нно отправка сообщения получателю } //спим секунду flush(); sleep(1); } //уходим log_write("Disconnected by unknown reason."); $icq->disconnect(); //------------------------------------------- --------------------------------------------- // //вспомогательные функции// function log_write($str) { echo date('Y.m.d H.i.s',time())." ".$str."\n"; } config.xml <?xml version="1.0" encoding="UTF-8"?> <configdata> <debug>0</debug> <db> <host>localhost</host> <username>root</username> <password>dbpass</password> <dbname>icqbot</dbname></db> <dbcharset>CP1251</dbcharset> <dbadapter>Pdo_Mysql</dbadapter> <icq> <login>UIN</login> <password>PASSWORD</password> </icq> dump.sql CREATE TABLE IF NOT EXISTS `messages` ( `id` int(11) NOT NULL auto_increment, `q` text NOT NULL, `a` text NOT NULL, `from` varchar(16) NOT NULL, PRIMARY KEY (`id`), FULLTEXT KEY `q` (`q`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=43 ; INSERT INTO `messages` (`id`, `q`, `a`, `from`) VALUES (1, 'default', 'В данный момент вы говорите с роботом.Если вы хотите говорить с моим хозяином, вам необходимо зарегистрироваться на одном из Jabber серверов, т.к. в ICQ он больше не появится.Чтобы узнать подробности о Jabber-е, введите 1.Чтобы узнать Jabber адрес хозяина, напишите, сколько будет 2плюспять.Чтобы узнать почтовый адрес хозяина, введите цифры от 1 до 7 без пробелов.', ''), (2, '1234567', 'My@mail.ri', ''), (3, '7', 'My@jabber.ru', ''), (4, '1', 'Один из популярных Jabber серверов jabber.ru (5, 'привет', 'Привет )', ''), (6, 'как дела', 'Нормально )', ''); И не забыть положить в папочку с ботом ZendFramework Не буду что-то комментировать, т.к. все достаточно тривиально. Отмечу лишь то, что не ставил задачу сделать что-то серьезное, а только отсылалку по адресу (хотя уже набрал достаточно диалогов и бот с некоторыми знакомыми уже говорил цепочками сообщений в 5-10 штук без вываливания дефолтного сообщения). Бот не работает с сообщениями в формате RTF, но в классе реализована эта возможность(можно доделать). Можно было конечно прикрутить и беседу с отдельными UIN в отдельные потоки. Но это дело другое. Главное идея ) Сие творение уже 4 дня в полете. Людей по 1-2 человека в день в jabber контактлисте прибавляется. Вот такое вот чудо получилось. |
Выразить восторг, поругаться или предложить что-нибудь можно на форуме |
Для обсуждения этого сервиса так же есть темы на фрилансе по поиску , флудотопу ,и по удалённым сообщениям ,и по Актуальным/популярным темам , и по топу "кто кому больше наотвечал" |