Сообщество программистов Autodesk в СНГ
Разное => Работа для программистов => Работа для разработчиков => Тема начата: Александр Пекшев aka Modis от 10-04-2014, 10:18:47
-
Одна фирма в Москве (достаточно знаменитая) заказала мне в свое время разработку приложения для автокада. Естественно все официально, естественно за деньги :)
Приложение разработал. Можно сказать 80% готово. Теперь требуется толковый программист для продолжения работы. Причина проста - я уже давно не работаю в этой сфере, не работаю с автокадом, да и некогда мне этим заниматься.
Приложение написано на .Net с использованием WinForms. Сборки для автокадов 2007-2014 + самодельный установщик. Краткое описание: приложение служит для вставки в чертеж стандартных решений из "базы данных". База данных представляет собой папку с кучей подпапок. В каждом каталоге есть файлы чертежей, скрины (если нужно) и xml-файл с описанием и настройкой.
Кстати - решение вот этой http://adn-cis.org/forum/index.php?topic=649.0 проблемы связано с этим приложением
Название фирмы не называю, т.к. они сами просили. Исходники также будут переданы через них - коммерческие права и все такое :)
Естественно я все расскажу, все покажу, отвечу на вопросы
-
Можно сказать 80% готово. Теперь требуется толковый программист для продолжения работы. . Причина проста - я уже давно не работаю в этой сфере...
Я не смог подобрать слов выражающие мое этношение к такой постановке вопроса.
п.с. простите за оффтоп.
-
Приложение разработал. Можно сказать 80% готово. Теперь требуется толковый программист для продолжения работы. Причина проста - я уже давно не работаю в этой сфере, не работаю с автокадом, да и некогда мне этим заниматься.
Во первых, данная ветка форума предназначена не для поиска работы - такие гранаты лучше бросать на dwg.ru - там весьма высока вероятность того, что с низкого старта, на перебой, рванутся даже "за бесплатно".
Во вторых - поиском должны заниматься работодатели, ибо "подхвативший знамя" с вероятностью 99% окажется в заднице, раз уж его ищет тот, кто собирается "сделать ноги", а не сам заказчик. То, что поиском занимается тот, кто сделал "80% готово" (потом окажется, что и не 80 вовсе..) очень похоже на ситуацию, когда проект находится в глубокой заднице и нужен кто-то, на кого это нужно повесить, а самому слиться (во всяком случае лично у меня именно такое ощущение и возникает).
В третьих, перелопачивать чужой код, особенно если он написан через одно место, не имеет надлежащих комментариев и не документирован - это занятие неблагодарное, глупое и заведомо бесполезное: в этом случае проще самому с нуля писать, чем пытаться разобраться в чужом "творчестве". Твоего кода я не видел, возможно, что он и идеален... :).
P.S. То, что я высказал - относится к любой подобной ситуации.
-
Во вторых - поиском должны заниматься работодатели, ибо "подхвативший знамя" с вероятностью 99% окажется в заднице, раз уж его ищет тот, кто собирается "сделать ноги", а не сам заказчик. То, что поиском занимается тот, кто сделал "80% готово" (потом окажется, что и не 80 вовсе..) очень похоже на ситуацию, когда проект находится в глубокой заднице и нужен кто-то, на кого это нужно повесить, а самому слиться (во всяком случае лично у меня именно такое ощущение и возникает).
Я не собираюсь "делать ноги". Я объяснил - я более не работаю в этой сфере. Разработка программ под автокад - это было хобби. Сейчас мне просто некогда - это раз, а два - мне сложнее, потому-что нет постоянного опыта.
Программой уже пользуются. Там просто некоторые разделы не доделаны, т.к. зависят от заказчика
В третьих, перелопачивать чужой код, особенно если он написан через одно место, не имеет надлежащих комментариев и не документирован - это занятие неблагодарное, глупое и заведомо бесполезное: в этом случае проще самому с нуля писать, чем пытаться разобраться в чужом "творчестве". Твоего кода я не видел, возможно, что он и идеален... :).
В принципе старое практически и перелапачивать не нужно особо - нужно, можно сказать, делать новое.
Идеальных кодов не существует! Каждый пишет по своему.
Могу привести пример:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Xml;
namespace SEToolbar.NKUwins
{
public partial class NKUsub_1 : Form
{
private static readonly string BaseDir = SettingsFile.GetSettings("BasePath");
public NKUsub_1()
{
InitializeComponent();
// Первичное распределение
FillComboBoxByFolderNames(Path.Combine(BaseDir, "НКУ\\Первичное распределение"), this.CbDevice_1);
}
// Закрыть окно
private void PbClose_Click(object sender, EventArgs e)
{
this.Close();
}
// Первичное распределение - выбор устройства
private void CbDevice_1_SelectedIndexChanged(object sender, EventArgs e)
{
if (((ComboBox)sender).SelectedIndex != -1)
{
// Заполняем типы
FillComboBoxByFolderNames(
SEHelpers.CombineAsPath(BaseDir, "НКУ\\Первичное распределение",
((ComboBox) sender).SelectedItem.ToString()),
this.CbType_1);
}
}
// Первичное распределение - Выбор типа
private void CbType_1_SelectedIndexChanged(object sender, EventArgs e)
{
if (((ComboBox)sender).SelectedIndex != -1)
{
// Заполняем ток
FillComboBoxByFolderNames(
SEHelpers.CombineAsPath(BaseDir, "НКУ\\Первичное распределение",
this.CbDevice_1.SelectedItem.ToString(),
((ComboBox) sender).SelectedItem.ToString()),
this.CbAmp_1);
FillDescr();
}
}
// Первичное распределение - нажатие кнопки "Выбрать"
private void BtSel_1_Click(object sender, EventArgs e)
{
string path = SEHelpers.CombineAsPath(
BaseDir, "НКУ\\Первичное распределение",
this.CbDevice_1.SelectedItem.ToString(),
this.CbType_1.SelectedItem.ToString(),
this.CbAmp_1.SelectedItem.ToString());
//this.Close();
OpenSelectItemWindow(path, this.CbAmp_1.SelectedItem.ToString());
}
private void OpenSelectItemWindow(string path, string amp)
{
try
{
// Проверяем, что по указанному пути находится файл detail.xml
string detailFile = Path.Combine(path, "detail.xml");
if (File.Exists(detailFile))
{
// Далее проверяем, что путь указанный в файле совпадает
XmlDocument detDoc = new XmlDocument();
detDoc.Load(detailFile);
if (path.Equals(
BaseDir + detDoc.DocumentElement.GetAttribute("path"))
)
{
// Проверка доступности
XmlAttribute xatr = detDoc.DocumentElement.Attributes["avail"];
if(xatr != null)
if (xatr.Value.Equals("0"))
{
MessageBox.Show("Не доступно в данной версии!");
return;
}
// Заголовок берем из файла
string winHead = string.Empty;
xatr = detDoc.DocumentElement.Attributes["winHead"];
if (xatr != null)
winHead = xatr.Value;
// Берем из файла значения ширины столбцов
List<int> widths = new List<int> { 50, 120, 60, 160, 150, 100 };
for (int k = 0; k < widths.Count; k++)
{
xatr = detDoc.DocumentElement.Attributes["col" + k.ToString(CultureInfo.InvariantCulture)];
if (xatr != null)
{
int w;
if (int.TryParse(xatr.Value, out w))
widths[k] = w;
}
}
// Если все верно, то открываем окно выбора
this.Hide();
NKUitem win = new NKUitem(winHead, detDoc, path, widths);
win.FormClosed += delegate { this.Show(); };
win.Show();
}
else
MessageBox.Show("Свойства файла " + detailFile +
" не соответствуют указанным параметрам выбора!" + Environment.NewLine +
"Обратитесь к администратору");
}
else MessageBox.Show("Файл " + detailFile + " не найден!");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
// Заполнение ComboBox именами папок по указанному пути
// Если в указанной папке нет подпапок - делаем его неактивным
private void FillComboBoxByFolderNames(string path, ComboBox cb)
{
//cb.Items.Clear();
cb.DataSource = null;
string[] dirs = Directory.GetDirectories(path, "*", SearchOption.TopDirectoryOnly);
if (dirs.Length == 0)
{
cb.SelectedIndex = -1;
cb.Enabled = false;
}
else
{
List<string> lst = new List<string>();
cb.Enabled = true;
foreach (string dir in dirs)
{
DirectoryInfo di = new DirectoryInfo(dir);
lst.Add(di.Name);
//cb.Items.Add(di.Name);
}
lst.Sort(new StringLogicalComparer());
if (cb.Name.Equals("CbType_1"))
{
lst.Reverse();
}
cb.DataSource = lst;
cb.SelectedIndex = 0;
}
}
// Comparer:
public class StringLogicalComparer : IComparer, IComparer<string>
{
[DllImport("shlwapi.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]
public static extern int StrCmpLogicalW(string x, string y);
public int Compare(object x, object y)
{
return StrCmpLogicalW(x.ToString(), y.ToString());
}
public int Compare(string x, string y)
{
return StrCmpLogicalW(x, y);
}
}
// Отображение описания
private void FillDescr()
{
try
{
// Проверяем наличие файла с описанием
string file = Path.Combine(BaseDir, "Desc.xml");
if (File.Exists(file))
{
string desc = string.Empty;
string desc2 = string.Empty;
// Открываем его
XmlDocument descFile = new XmlDocument();
descFile.Load(file);
// Открываем главную группу
foreach (XmlElement xml1 in descFile.DocumentElement.GetElementsByTagName("main"))
{
if (xml1.Attributes["name"].Value.Equals("НКУ"))
{
// Открываем подгруппу
foreach (XmlElement xml2 in xml1.GetElementsByTagName("group"))
{
if (xml2.Attributes["name"].Value.Equals("Первичное распределение"))
{
foreach (XmlElement xml3 in xml2.GetElementsByTagName("subgroup"))
{
if (xml3.Attributes["name"].Value.Equals(this.CbDevice_1.SelectedItem.ToString()))
{
desc += xml3.Attributes["desc"].Value;
foreach (XmlElement xml4 in xml3.GetElementsByTagName("item"))
{
if (xml4.Attributes["name"].Value.Equals(this.CbType_1.SelectedItem.ToString()))
{
desc2 += xml4.Attributes["desc"].Value;
break;
}
}
break;
}
}
break;
}
}
break;
}
}
this.TbDescr.Text = !string.IsNullOrEmpty(desc) ? desc : string.Empty;
this.TbDescr_2.Text = !string.IsNullOrEmpty(desc2) ? desc2 : string.Empty;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + ex.StackTrace);
}
}
#region win move
private void MainWin_Load(object sender, EventArgs e)
{
this.MouseDown += new MouseEventHandler(AppFormBase_MouseDown);
this.MouseMove += new MouseEventHandler(AppFormBase_MouseMove);
this.MouseUp += new MouseEventHandler(AppFormBase_MouseUp);
}
void AppFormBase_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Left)
{
return;
}
downPoint = new Point(e.X, e.Y);
}
void AppFormBase_MouseMove(object sender, MouseEventArgs e)
{
if (downPoint == Point.Empty)
{
return;
}
Point location = new Point(
this.Left + e.X - downPoint.X,
this.Top + e.Y - downPoint.Y);
this.Location = location;
}
void AppFormBase_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Left)
{
return;
}
downPoint = Point.Empty;
}
public Point downPoint = Point.Empty;
#endregion
}
}
-
не имеет надлежащих комментариев и не документирован - это занятие неблагодарное, глупое и заведомо бесполезное
Могу привести пример: далее код с минимумом комментариев
Андрей Бушман, шаман и пророк, однако 8)
ЗЫ.
То же попробую по шаманить ...
В коде говорится что московская фирма называется "НКУ-что то там" ;)
-
Хорош флудить, а то тему снесу. Тем более, что пока не решили, что с такими темами делать.
-
Вообще удручают такие вот вещи :(
Сразу все воспринимается в штыки и не всерьез. Сразу все себя воспринимают "программистами от Бога" и все, что тут люди приводят в пример - это "говнокод"... Печально.
А с Андреем уже как-то обсуждал этот вопрос - про то, что одни делают, а другие - умные - флудят на форумах. Я может и не мегапрограммист, но вот мой продукт заинтересовал много людей и мне были предложения на разработку. Ну вот нет у меня времени этим заниматься.
Главное, что я получил отклик на свое предложение отдать проект. Поэтому одни будут дальше флудить на форумах, а другие иметь подработку
-
Главное, что я получил отклик на свое предложение отдать проект.
Так вопрос уже решился? Честно говоря тема совсем в этом разделе не к месту. Единственно что её здесь оправдывает - это .NET и отсутствие специального раздела на этом форуме.
-
Так вопрос уже решился? Честно говоря тема совсем в этом разделе не к месту. Единственно что её здесь оправдывает - это .NET и отсутствие специального раздела на этом форуме.
Нет, вопрос еще не решился. Человек обдумывает предложение. Прошу разрешения повисеть теме еще денек - потом можно сносить. Я согласен, что тема "не в тему", но вариантов не много
Сорри за оффтоп
ЗЫ.
То же попробую по шаманить ...
В коде говорится что московская фирма называется "НКУ-что то там" ;)
НКУ - низковольтное комплектное устройство
-
Прошу разрешения повисеть теме еще денек - потом можно сносить.
Ладно. До понедельника пусть повисит.
-
Прошу разрешения повисеть теме еще денек - потом можно сносить.
Ладно. До понедельника пусть повисит.
Александр, просто надо отдельную тему по коммерцию завести и все =)