Светлана Сташкевич
53 года, Россия
39 сообщений
#12 лет назад
Вчера меня бросил еще один программист. Четвертый по счету. Год потерянного времени и 150000 рублей. Если есть желание, можете посмотреть, куда ушли 90000 рублей. Ниже код. И оцените, что это может стоить.

Сейчас я хочу обратиться к заказчикам. Друзья мои, помогите. Есть ли здесь люди, которые заказывали сложные проекты, со сложной иерархией, отношение многие к многим, большим уровнем вложенности элементов и большим количеством элементов в уровне.
Есть положительный опыт завершения таких проектов? Есть ли у вас проекты, которые работают стабильно, быстро. Подскажите, кто вам делал? Поделитесь исполнителем.

Что мне нужно:
Проводник как в винде с отношением многие к многим.
Ссылочное наследование
Мультиязычность с возможностью перевода интерфейса и проводника не только на славянские языки.
Шаблонизатор
Многопоточность

Естественно джентельменски набор по стандартному функционалу
Добавление
Удаление
Копирование
Перемещение
Поддержка ссылочной целостности.


Мне предлагали выполнить проект на самописных CMS - ках, но так только начинаешь разбираться, как реализован функционал, хватаешься за голову.
Чего стоит, например, решение делать наследование страниц, а не элементов.
Вы представляете себе проводник? Одна рубрика содержит до 100000 путей, а их 60.

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

Еще пару лет и напишу проект сама.

Вопрос к программистам. Кто сможет проконсультировать по выбору платформы? Планируемый пассажиропоток  до 300000 человек единовременно (не в день) в день до 5000000.

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

Ребята, спасите мой проект, заказчики откликнитесь.


А вот собственно в таком виде мне оставили работу.


# SQL Manager 2005 for MySQL 3.7.7.1
# ---------------------------------------
# Host : localhost
# Port : 3306
# Database : super_db


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES cp1251 */;

SET FOREIGN_KEY_CHECKS=0;

DROP DATABASE IF EXISTS `super_db`;

CREATE DATABASE `super_db` charACTER SET 'utf8'
COLLATE 'utf8_general_ci';

USE `super_db`;

#
# Structure for the `links` table :
#

DROP TABLE IF EXISTS `links`;

CREATE TABLE `links` (
`link_id` int(10) unsigned NOT NULL auto_increment,
`link_ancestor_id` int(10) unsigned NOT NULL default '0',
`node_id` int(10) unsigned NOT NULL,
`link_terminal` tinyint(1) NOT NULL default '1',
`link_level` int(10) unsigned NOT NULL default '1',
`link_shortcut` int(10) unsigned NOT NULL default '0',
`link_show_order` int(10) unsigned NOT NULL,
`link_name` varchar(255) default NULL,
PRIMARY KEY (`link_id`)
) ENGINE=MyISAM DEFAULT charSET=utf8;

#
# Structure for the `links_rels` table :
#

DROP TABLE IF EXISTS `links_rels`;

CREATE TABLE `links_rels` (
`link_id` int(10) unsigned NOT NULL,
`link_ancestor_id` int(10) unsigned NOT NULL default '0',
`link_ancestor_pos` int(10) unsigned NOT NULL default '1'
) ENGINE=MyISAM DEFAULT charSET=utf8;

#
# Structure for the `nodes` table :
#

DROP TABLE IF EXISTS `nodes`;

CREATE TABLE `nodes` (
`node_id` int(10) unsigned NOT NULL auto_increment,
PRIMARY KEY (`node_id`)
) ENGINE=MyISAM DEFAULT charSET=utf8;

#
# Structure for the `shortcuts` table :
#

DROP TABLE IF EXISTS `shortcuts`;

CREATE TABLE `shortcuts` (
`shortcut_id` int(10) unsigned NOT NULL auto_increment,
`source` int(10) unsigned NOT NULL,
`target` int(10) unsigned NOT NULL,
`pos` int(10) unsigned NOT NULL,
PRIMARY KEY (`shortcut_id`)
) ENGINE=MyISAM DEFAULT charSET=utf8;

#
# Definition for the `LS` procedure :
#

DROP PROCEDURE IF EXISTS `LS`;

CREATE PROCEDURE `LS`(IN __link_ancestor_id__ INTEGER)
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
SELECT links.*
FROM links
WHERE links.link_ancestor_id = __link_ancestor_id__
ORDER BY links.link_show_order;
END;

#
# Definition for the `MK_SHORTCUT` procedure :
#

DROP PROCEDURE IF EXISTS `MK_SHORTCUT`;

CREATE PROCEDURE `MK_SHORTCUT`(IN __link_source_id__ INTEGER(11), IN __link_target_id__ INTEGER(11))
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
-- Получаем максимальный идентификатор
DECLARE $max_index INT UNSIGNED DEFAULT (SELECT MAX(link_id) FROM links);
-- Получаем уровень исходного узла
DECLARE $source_level INT UNSIGNED DEFAULT (SELECT link_level FROM links WHERE link_id = __link_source_id__);
-- Получаем уровень узла - цели
DECLARE $target_level INT UNSIGNED DEFAULT IF(__link_target_id__=0,1,(SELECT link_level+1 FROM links WHERE link_id = __link_target_id__));
-- Новый show_order для исходного узла
DECLARE $new_show_order INT UNSIGNED DEFAULT (
SELECT COUNT(tbl.link_id) FROM (
SELECT 0 AS link_id union SELECT link_id FROM links WHERE link_ancestor_id = __link_target_id__
) AS tbl
);
-- ПРОИЗВОДИТ ПЕРВИЧНУЮ СИНХРОНИЗАЦИЮ ДВУХ УЗЛОВ
DECLARE $done INT DEFAULT 0;
DECLARE $link_id, $link_ancestor_id INT UNSIGNED DEFAULT 0;
DECLARE $cur CURSOR FOR SELECT T_LINKS_BUFFER.link_id, T_LINKS_BUFFER.link_ancestor_id FROM T_LINKS_BUFFER ORDER BY T_LINKS_BUFFER.link_level;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET $done = 1;
-- Устанавливаем переменную max_index
SET @max_index = $max_index;
SET @max_index2 = $max_index;
-- Создаем временную таблицу
CREATE TEMPORARY TABLE IF NOT EXISTS
T_LINKS_BUFFER (
link_id INT(10) UNSIGNED,
link_ancestor_id INT(10) UNSIGNED,
node_id INT(10) UNSIGNED,
link_terminal TINYINT(1) UNSIGNED,
link_level INT(10) UNSIGNED,
link_shortcut INT(10) UNSIGNED,
link_show_order INT(10) UNSIGNED,
link_name VARCHAR(255)
);
TRUNCATE TABLE T_LINKS_BUFFER;
-- Заполняем временную таблицу
INSERT INTO T_LINKS_BUFFER (
link_id,
link_ancestor_id,
node_id,
link_terminal,
link_level,
link_shortcut,
link_show_order,
link_name
)
SELECT
tbl1.px1 AS link_id,
IF(tbl2.px2 IS NULL, __link_target_id__,tbl2.px2) AS link_ancestor_id,
links.node_id AS node_id,
links.link_terminal AS link_terminal,
$target_level + (links.link_level - $source_level) AS link_level,
IF(links.link_shortcut=0,$max_index+1,links.link_shortcut) AS link_shortcut,
IF(links.link_id<>__link_source_id__,links.link_show_order,$new_show_order) AS link_show_order,
links.link_name AS link_name
FROM (
SELECT @max_index := @max_index + 1 AS px1, links.link_ancestor_id, links.link_id
FROM links_rels
LEFT JOIN links ON (links.link_id = links_rels.link_id)
WHERE links_rels.link_ancestor_id = __link_source_id__
ORDER BY links.link_level
) AS tbl1
LEFT JOIN (
SELECT @max_index2 := @max_index2 + 1 AS px2, links_rels.link_id
FROM links_rels
LEFT JOIN links ON (links.link_id = links_rels.link_id)
WHERE links_rels.link_ancestor_id = __link_source_id__
ORDER BY links.link_level
) AS tbl2 ON (tbl1.link_ancestor_id = tbl2.link_id)
LEFT JOIN links ON (links.link_id = tbl1.link_id)
;
-- Заполняем таблицу links
INSERT INTO links (
link_id,
link_ancestor_id,
node_id,
link_terminal,
link_level,
link_shortcut,
link_show_order,
link_name
)
SELECT
link_id,
link_ancestor_id,
node_id,
link_terminal,
link_level,
link_shortcut,
link_show_order,
link_name
FROM T_LINKS_BUFFER;
-- Выполняем построение ссылочных связей
OPEN $cur;
REPEAT
FETCH $cur INTO $link_id, $link_ancestor_id;
IF NOT $done THEN
INSERT INTO links_rels (link_id, link_ancestor_id, link_ancestor_pos)
SELECT $link_id, IF($link_ancestor_id=0,$link_id,$link_ancestor_id), 1&nbsp;union&nbsp;SELECT
$link_id,
IF(links_rels.link_ancestor_id<>links_rels.link_id,links_rels.link_ancestor_id,$link_id),
links_rels.link_ancestor_pos+1
FROM links_rels
WHERE links_rels.link_id = $link_ancestor_id;
END IF;
UNTIL $done END REPEAT;
CLOSE $cur;
-- Обновляем признак терминальности узла - приемника
UPDATE links SET link_terminal = 0 WHERE link_id = __link_target_id__;
-- Выполняем построение дерева ссылочной иерархии
/*
INSERT INTO shortcuts (source, target, pos)
SELECT __link_source_id__, $max_index+1, 1&nbsp;union&nbsp;SELECT tbl.source, lnk2.link_id, tbl.pos+1
FROM (
SELECT shortcuts.source AS source, shortcuts.pos AS pos
FROM (
SELECT link_ancestor_id AS x1
FROM links_rels
WHERE link_id = __link_source_id__&nbsp;union&nbsp;SELECT link_id AS x1
FROM links_rels
WHERE link_ancestor_id = __link_source_id__
) AS tb1
INNER JOIN shortcuts ON (shortcuts.target=tb1.x1)&nbsp;union&nbsp;SELECT __link_source_id__ AS source, 777 AS pos
) AS tbl
LEFT JOIN links AS lnk1 ON (lnk1.link_id = tbl.source)
LEFT JOIN links_rels ON (links_rels.link_ancestor_id = $max_index+1)
INNER JOIN links AS lnk2 ON (lnk2.node_id = lnk1.node_id AND lnk2.link_id = links_rels.link_id)
;
*/
-- Выполняем построение дерева ссылочной иерархии
INSERT INTO shortcuts (source, target, pos)
SELECT __link_source_id__, $max_index+1, 1&nbsp;union&nbsp;SELECT shortcuts.source, $max_index+1, shortcuts.pos+1
FROM (
SELECT link_ancestor_id AS x1
FROM links_rels
WHERE link_id = __link_source_id__&nbsp;union&nbsp;SELECT link_id AS x1
FROM links_rels
WHERE link_ancestor_id = __link_source_id__
) AS tbl
LEFT JOIN shortcuts ON (shortcuts.target = tbl.x1)
HAVING shortcuts.source IS NOT NULL;
END;

#
# Definition for the `new_proc` procedure :
#

DROP PROCEDURE IF EXISTS `new_proc`;

CREATE PROCEDURE `new_proc`(IN _link_id_ INTEGER(11))
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
SELECT _link_id_&nbsp;union&nbsp;SELECT tbl2.link_id
FROM (
SELECT links_rels.link_id, links.node_id
FROM (
SELECT links_rels.link_ancestor_id AS link_id
FROM links_rels
WHERE links_rels.link_id = _link_id_&nbsp;union&nbsp;SELECT links_rels.link_id AS link_id
FROM links_rels
WHERE links_rels.link_ancestor_id = _link_id_
) AS tbl
INNER JOIN shortcuts ON (shortcuts.source = tbl.link_id)
LEFT JOIN links_rels ON (links_rels.link_ancestor_id = shortcuts.target)
LEFT JOIN links ON (links.link_id = links_rels.link_id)
) AS tbl2
WHERE tbl2.node_id = 5&nbsp;union&nbsp;SELECT shortcuts.target
FROM (
SELECT tbl2.link_id
FROM (
SELECT links_rels.link_id, links.node_id
FROM (
SELECT links_rels.link_ancestor_id AS link_id
FROM links_rels
WHERE links_rels.link_id = _link_id_&nbsp;union&nbsp;SELECT links_rels.link_id AS link_id
FROM links_rels
WHERE links_rels.link_ancestor_id = _link_id_
) AS tbl
INNER JOIN shortcuts ON (shortcuts.source = tbl.link_id)
LEFT JOIN links_rels ON (links_rels.link_ancestor_id = shortcuts.target)
LEFT JOIN links ON (links.link_id = links_rels.link_id)
) AS tbl2
WHERE tbl2.node_id = 5
) AS tbl3
LEFT JOIN links_rels ON (
links_rels.link_ancestor_id = tbl3.link_id
)
INNER JOIN shortcuts ON (
shortcuts.source = links_rels.link_id
)
;

/*
SELECT tbl2.link_id
FROM (
SELECT links_rels.link_id, links.node_id
FROM (
SELECT links_rels.link_ancestor_id AS link_id
FROM links_rels
WHERE links_rels.link_id = _link_id_&nbsp;union&nbsp;SELECT links_rels.link_id AS link_id
FROM links_rels
WHERE links_rels.link_ancestor_id = _link_id_
) AS tbl
INNER JOIN shortcuts ON (shortcuts.source = tbl.link_id)
LEFT JOIN links_rels ON (links_rels.link_ancestor_id = shortcuts.target)
LEFT JOIN links ON (links.link_id = links_rels.link_id)
) AS tbl2
WHERE tbl2.node_id = 5;
*/
END;

#
# Definition for the `RM_PROC` procedure :
#

DROP PROCEDURE IF EXISTS `RM_PROC`;

CREATE PROCEDURE `RM_PROC`(IN __link_id__ INTEGER(11))
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
-- Признак ярлыка
DECLARE $link_shortcut, $node_id INT UNSIGNED DEFAULT 0;

SELECT link_shortcut, node_id INTO $link_shortcut, $node_id
FROM links WHERE link_id = __link_id__;
/*
-- Создаем временную таблицу
DROP TABLE T_LINKS_REMOVE;
CREATE TEMPORARY TABLE IF NOT EXISTS T_LINKS_REMOVE (
link_id INT(10) UNSIGNED
);
TRUNCATE TABLE T_LINKS_REMOVE;
-- Заполняем временную таблицу
INSERT INTO T_LINKS_REMOVE (link_id)

SELECT tbl.link_id
FROM (
*/
SELECT __link_id__ AS link_id&nbsp;union&nbsp;SELECT shortcuts.target AS link_id
FROM links_rels
INNER JOIN shortcuts ON (
shortcuts.source = links_rels.link_id
)
WHERE links_rels.link_ancestor_id = __link_id__&nbsp;union&nbsp;SELECT 111111111111&nbsp;union&nbsp;SELECT links.link_id
FROM links_rels
INNER JOIN shortcuts ON (shortcuts.source = links_rels.link_ancestor_id)
LEFT JOIN links_rels AS lr1 ON (lr1.link_ancestor_id = shortcuts.target)
INNER JOIN links ON (links.link_id = lr1.link_id AND links.node_id = $node_id)
WHERE links_rels.link_id = __link_id__
;
/*
) AS tbl
ORDER BY tbl.pos DESC
;

SELECT * FROM T_LINKS_REMOVE;
*/
/*
DELETE links.*, links_rels.*, nodes.*
FROM links, links_rels, nodes, T_LINKS_REMOVE
WHERE
links.link_id = T_LINKS_REMOVE.link_id AND
nodes.node_id = links.node_id AND
links_rels.link_id = T_LINKS_REMOVE.link_id
;
*/
END;

#
# Definition for the `MK_LINK` function :
#

DROP FUNCTION IF EXISTS `MK_LINK`;

CREATE FUNCTION `MK_LINK`(__link_ancestor_id__ INTEGER(11))
RETURNS int(11)
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
DECLARE
-- Идентификатор узла - родителя
$node_id,
-- Идентификатор нового узла
$new_node_id,
-- Идентификатор созданной ссылки
$link_id,
-- Признак ярлыка
$link_shortcut
INT UNSIGNED DEFAULT 0;
-- Создаем запись в таблице nodes
INSERT INTO nodes SET node_id = 0;
-- Получаем идентификатор созданной записи
SELECT LAST_INSERT_ID() INTO $new_node_id;
-- Проверяем идентификатор элемента - родителя
IF (__link_ancestor_id__ <> 0) THEN
-- Добавление узла не в корень дерева
-- Получаем идентификатор узла - родителя и признак ярлыка
SELECT node_id, link_shortcut INTO $node_id, $link_shortcut
FROM links WHERE link_id = __link_ancestor_id__;
-- Проверяем признак ярлыка родителя создаваемого элемента
IF ($link_shortcut=0) THEN
-- Добавление элемента не к ссылке
-- Создаем записи в таблице links
INSERT INTO links (
node_id,
link_ancestor_id,
link_level,
link_shortcut,
link_show_order
)
SELECT
$new_node_id,
links.link_id,
links.link_level+1,
links.link_shortcut,
(SELECT COUNT(*) FROM links AS lnks WHERE lnks.link_ancestor_id = links.link_id)+1
FROM links
WHERE links.node_id = $node_id;
-- Получаем идентификатор созданного узла
SELECT link_id INTO $link_id FROM links
WHERE node_id = $new_node_id AND link_ancestor_id = __link_ancestor_id__;
/*
-- Создаем записи в таблице links_rels
INSERT INTO links_rels (link_id, link_ancestor_id, link_ancestor_pos)
SELECT links.link_id, links.link_ancestor_id, 1 FROM links WHERE links.node_id = $new_node_id&nbsp;union&nbsp;SELECT
links.link_id,
IF(links_rels.link_ancestor_id<>links_rels.link_id,links_rels.link_ancestor_id,links.link_id),
links_rels.link_ancestor_pos+1
FROM links
LEFT JOIN links_rels ON (links_rels.link_id = links.link_ancestor_id)
WHERE links.node_id = $new_node_id;
*/
ELSE
-- Добавление элемента к ссылке
-- Создаем записи в таблице links
INSERT INTO links (
node_id,
link_ancestor_id,
link_level,
link_shortcut,
link_show_order
)
SELECT
$new_node_id,
tbl.link_id,
tbl.link_level+1,
tbl.link_shortcut,
(SELECT COUNT(*) FROM links AS lnks WHERE lnks.link_ancestor_id = tbl.link_id)+1
FROM (
SELECT links.link_id, links.link_level, links.link_shortcut FROM links_rels
INNER JOIN shortcuts ON (shortcuts.source = links_rels.link_ancestor_id)
LEFT JOIN links_rels AS rels ON (rels.link_ancestor_id = shortcuts.target)
INNER JOIN links ON (
links.link_id = rels.link_id AND
links.node_id = $node_id AND
links.link_shortcut = $link_shortcut
)
WHERE links_rels.link_id = __link_ancestor_id__&nbsp;union&nbsp;SELECT __link_ancestor_id__ AS link_id, link_level, 0 AS link_shortcut
FROM links WHERE link_id = __link_ancestor_id__
) AS tbl;
-- Получаем идентификатор созданного узла
SELECT link_id INTO $link_id FROM links
WHERE node_id = $new_node_id AND link_ancestor_id = __link_ancestor_id__;
END IF;
-- Создаем записи в таблице links_rels
INSERT INTO links_rels (link_id, link_ancestor_id, link_ancestor_pos)
SELECT links.link_id, links.link_ancestor_id, 1 FROM links WHERE links.node_id = $new_node_id&nbsp;union&nbsp;SELECT
links.link_id,
IF(links_rels.link_ancestor_id<>links_rels.link_id,links_rels.link_ancestor_id,links.link_id),
links_rels.link_ancestor_pos+1
FROM links
LEFT JOIN links_rels ON (links_rels.link_id = links.link_ancestor_id)
WHERE
links.node_id = $new_node_id AND
IF($link_shortcut=0,TRUE,links.link_shortcut = $link_shortcut OR links.link_id = $link_id);
-- Обновляем признак терминальности
UPDATE links, links AS p
SET links.link_terminal = 0
WHERE p.node_id = $new_node_id AND links.link_id = p.link_ancestor_id;
ELSE
-- Добавление узла в корень дерева
-- Создаем запись в таблице links
INSERT INTO links
SET
-- Присваиваем созданный iNode - идентификатор
links.node_id = $new_node_id,
-- Расчитываем новый show_order
links.link_show_order = (
SELECT tbl.mx+1 FROM (SELECT COUNT(*) AS mx FROM links WHERE link_ancestor_id = 0) AS tbl
);
-- Получаем идентификатор созданного элемента
SELECT LAST_INSERT_ID() INTO $link_id;
-- Создаем запись в таблице links_rels
INSERT INTO links_rels SET link_id = $link_id, link_ancestor_id = $link_id;
END IF;
-- Возвращаем идентификатор созданного элемента
RETURN $link_id;
END;

#
# Definition for the `RM` function :
#

DROP FUNCTION IF EXISTS `RM`;

CREATE FUNCTION `RM`(__link_id__ INTEGER(11))
RETURNS tinyint(4)
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
-- ЗДЕСЬ ЧТО ТО НЕ ТО!!!
DELETE FROM shortcuts
USING shortcuts, links_exp3
WHERE shortcuts.target = links_exp3.link_id
;

DELETE FROM nodes
USING nodes, links_exp3, links
WHERE
links.link_id = links_exp3.link_id AND
links.link_shortcut = 0 AND
nodes.node_id = links.node_id
;

DELETE FROM
links, links_rels
USING
links, links_rels, links_exp3
WHERE
links.link_id = links_exp3.link_id AND
links_rels.link_id = links_exp3.link_id
;
RETURN TRUE;
END;



/*!40101 SET&nbsp;charACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET&nbsp;charACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Илья К.
36 лет, Россия
120 сообщений
#12 лет назад
Не проще заказать студии, с заключением договора и соответствующими санкциями, чем играться в детский сад?
Илья К.
36 лет, Россия
120 сообщений
#12 лет назад
В ваших проектах я увидел неплохие предложения (хотя конечно в полной мере судить об этом не могу). Кого вы в итоге выбирали? Согласно каким критериям?
Андрей Халецкий
33 года, Беларусь
3563 сообщения
#12 лет назад
Сочувствую.
Можно посмотреть на задание? *** ?
Светлана Сташкевич
53 года, Россия
39 сообщений
#12 лет назад
Что по вашему есть неплохие предложения? Перечисленный набор технологий, который указан в портфолио? или отзывы заказчиков н а написание простого скрипта? и соответственный рейтинг на такие отзывы? когда я разговариваю с фрилансерами по их движкам, по поводу реализации в движке того или иного функционала со мной либо не хотят говорить, объясняя это тем, что какая вам разница, все будет работать, либо даже мои вопросы по поводу решений их заводят в тупик. И я понимаю, что не все что называется Cms кой, ей является.
Светлана Сташкевич
53 года, Россия
39 сообщений
#12 лет назад
https://www.weblancer.net/projects/32297.html в этом проекте описание того, что мне нужно, в притаченных файлах.
Певцов Евгений
36 лет, Украина
4 сообщения
#12 лет назад
Однозначно нужно заказывать проект у студии с заключением договора иначе всё может повторится. К тому же судя по всему, проект надо будет переписывать с нуля.
Николай М.
35 лет, Украина
1895 сообщений
#12 лет назад
SmartDesign, весь прикол в том что его надо составить, вехать в проект с головой, реализовать всьо, у него очень сложная логика работы и БД, отказывались многие, даже очень крутые программисты, не могли справиться с колоссальной сложностью логики, брались, но потом понимали что не потянут, поищите на форуме, здесь били разборки с программистом. Не смотрите что у меня рейта всего 5, лучше посмотрите кто за него хватался и не справился.
Илья К.
36 лет, Россия
120 сообщений
#12 лет назад
WOMAN, извините, я похоже заглянул в другой ваш проект, отличный от данной вами ссылки
Андрей Халецкий
33 года, Беларусь
3563 сообщения
#12 лет назад
Не справиться можно по разным причинам.
1. Не способность сделать (если не хватает квалификации у команды)
2. Невыгодность (когда затраты не окупаются).

1-ое лечится поиском нужных людей (в Миснке это можно сделать, если со вторым пунктом нет проблем)
2-ое увеличением бюджета.
Николай М.
35 лет, Украина
1895 сообщений
#12 лет назад
SmartDesign, отвечу за Светлану, причини:
1. нет опыта сложных проектов и иерархий
2. не способны работать в команде с заказчиком
3. не способны отвечать за поступки, даже после договорености об оплате бросают проект или делают непонятно что, зато поморочат голову хорошенько и постоянно просят денег, а когда у ных просиш кода... то в ответ "работаем", но даже показать нечего, не говорю об визуальной странице, а об текущих наработках, бояться всяческого контроля.
Андрей З.
39 лет, Украина
57 сообщений
#12 лет назад
Бюджет по проекту https://www.weblancer.net/projects/32297.html от 10000$ (а возможно больше, если копнуть глубже) и для такого проекта необходимо ТЕХ.ЗАДАНИЕ (не бриф, анкета или ссылки на аналогичные сайты)

Серьезные разработчики не взялись бы за ТАКОЙ проект с ТАКИМ бюджетом, Вы получили исполнителя с уровнем этого бюджета, который даже не смог адекватно оценить объем работ.

Указанного в проекте бюджета хватит в лучшем случае на составление ТЗ.
Игорь Грицишин
37 лет, Украина
519 сообщений
#12 лет назад
WOMAN, просто Вам не повезло с исполнителем. Если хотите, дам контакты очень надёжного программиста.
Одного из лучших
Светлана Сташкевич
53 года, Россия
39 сообщений
#12 лет назад
Да начиная проект конечно я сделала ошибку.я не могла оценить стоимость и сложность работ, я не могла оценить исполнителя и предложения....я полагалась на людей с которыми буду работать, что они\подскажут последовательность действий и дадут оценку проекту. Ну распните меня за мою неопытность. А то что 4 человека, а один из них с очень высоким рейтом взяли мои деньги и просто кинули.........это ли не тенденция?
А то что с меня опять просят предоплату в 50 процентов, а когда я предлагаю СБС мне говорят что я их злю и что я скупая...........и это говорит человек у которого на счету более 180 проектовя .........и бюджет я готова рассматривать и на ТЗ за 1000 согласилась, а с меня ждут предоплату 100$ контора по рекомендации.......а аналитик конторы задает мне вопрос.почему у меня повторяются ссылки на странице. Знаете это он ог чем? о проводнике, где два разных родителя имеют набор одинаковых детей.вот тут уж задумаешься..........
Андрей З.
39 лет, Украина
57 сообщений
#12 лет назад
Странно что кого-то злит СБС, за исключением ситуации когда Вас изначально хотели кинуть...

Предоплату берут чтобы гарантировать оплату своей работы, а СБС также ее гарантирует.
Если бюджет большой, то по договоренности можно проводить оплату частями за логически законченные участки.

Если правильно разделить этапы работы, то даже в том случае, если исполнитель завершив опр. этап работы откажется от дальнейшего сотрудничества, Вы сможете найти другого подрядчика и продолжить работу над следующим этапом проекта.
Быков Василь
339 сообщений
#12 лет назад
В принципе когда бюджет большой то предоплата необходима - разрпаботчики должны же на что-то жить....
Светлана Сташкевич
53 года, Россия
39 сообщений
#12 лет назад
Вот они и жили.я только с этого ничего не получила.и не забота заказчика на что будет жить программист........у меня никто не спрашивал из какого кармана я достаю деньги.а если не устраивает СБС.это значит нет уверенности в своих знаниях или ответственности..........а то получется хотите жить за чужой счет
Agency B&o
Россия
46 сообщений
#12 лет назад
WOMAN, Девушка, что бы небыло кидков в Вашу сторону. Заключайте контракт, с пунктами и тд. Это, на мой взгляд, самый оптимальный вариант. Предоплата это железно, но под контракт. Без контракта сегодня нельзя, он и обязывает и дисциплинирует (если конечно исполнителю дорога его репутация). Ну и выбирайте студии, может так Вам больше повезет. Вообще странно, что Вы для большого проекта выбрали одиночного фрилансера. Этим лучше напрягать студию, по времени быстрее выйдет и с наименьшей головной болью. Плюс опятьже контракт компанию сильнее обязывает нежели отдельного человека.
Андрей Халецкий
33 года, Беларусь
3563 сообщения
#12 лет назад
Цитата ("WOMAN"):
а если не устраивает СБС.это значит нет уверенности в своих знаниях или ответственности..........а то получется хотите жить за чужой счет
Не всегда так. В период разработки нужны деньги на то что бы жить, СБС их дать не может, только предоплата.
А в общем, договор должен решить вашу проблему.
Владимирович Александр
37 лет, Россия
417 сообщений
#12 лет назад
WOMAN, большим кораблям большое плаванье. Большой и сложный проект? - ищите серьезную команду разработчиков, а у серьезных людей все по серьезному и договор и обязательства по нему.