1 Востаннє редагувалося Regen (15.12.2015 18:02:34)

Тема: Мій перший репозиторій на GitHub

хей, привітулі усім, ось збацав свій перший репозиторій, думаю, непогано було б, якби хтось втикнув і

Прихований текст

обісрав

покритикував це все

ось лінк, хе-хе, бо я його одразу й не додав ;)
https://github.com/mHerasimov/Trie

Подякували: leofun011

2

Re: Мій перший репозиторій на GitHub

Я, взагалі, не знаю Java, але скажу по такому. За таке Commit #3 - можна відрубувати руки.

3

Re: Мій перший репозиторій на GitHub

Q-bart написав:

Я, взагалі, не знаю Java, але скажу по такому. За таке Commit #3 - можна відрубувати руки.

це в Readme, в принципі погоджуюсь, але що ж я там напишу, якщо відредактував пару рядочків

4

Re: Мій перший репозиторій на GitHub

Regen написав:
Q-bart написав:

Я, взагалі, не знаю Java, але скажу по такому. За таке Commit #3 - можна відрубувати руки.

це в Readme, в принципі погоджуюсь, але що ж я там напишу, якщо відредактував пару рядочків

пишіть, що відредактував рядки, що відповідають за таке-то, з такою-то метою

Подякували: Regen, Q-bart, leofun013

5 Востаннє редагувалося IhorGorobets (15.12.2015 19:14:45)

Re: Мій перший репозиторій на GitHub

FakiNyan написав:

відредактував рядки

Прийнято писати "Add readme.md", а не "Added readme.md". Ну тобто відмінок не той.

Подякували: Regen, leofun012

6

Re: Мій перший репозиторій на GitHub

IhorGorobets написав:
FakiNyan написав:

відредактував рядки

Прийнято писати "Add readme.md", а не "Added readme.md". Ну тобто відмінок не той.

ну я то пойняв, коли в недокоманді з двох з половиною людей працював

7

Re: Мій перший репозиторій на GitHub

IhorGorobets написав:
FakiNyan написав:

відредактував рядки

Прийнято писати "Add readme.md", а не "Added readme.md". Ну тобто відмінок не той.

Так, і ще, чудова стаття про загальні принципи використання git - http://codeguida.com/post/277/

Подякували: FakiNyan, leofun01, Анатолій3

8 Востаннє редагувалося Master_Sergius (15.12.2015 22:00:09)

Re: Мій перший репозиторій на GitHub

Англійську тра підовчити. Сам код намагався переглянути, але дуже багато коду, стало влом. Єдине, що точно можна сказати - розбиття окремих логічних шматочків на функції - це дуже добре. Ну і ідея доволі непогана. Але ще раз нагадаю за англійську - то бідонька

Подякували: Regen1

9

Re: Мій перший репозиторій на GitHub

Regen написав:

покритикував це все

В репозиторії не повинно бути службових тек і файлів IDE (.idea, .iml і т. п.)

Подякували: Regen, leofun012

10

Re: Мій перший репозиторій на GitHub

1. - пишіть у комітах що ви робите
2. - виключіть файл.idea/workspace.xml - він дуже часто міняється
3. + кльово що є рідмі
4. - спробуйте протестувати свій код (не знаю чи дял джави є ci сервіси)
6. - поправте шаблони (    // TODO Auto-generated constructor stub)

п.с. я віддаю перевагу { } але це особисте. у вас знайшов таку штуку if(isDAWG) throw new IllegalStateException();

Подякували: leofun011

11 Востаннє редагувалося iovchynnikov (24.01.2016 14:11:30)

Re: Мій перший репозиторій на GitHub

Доброго дня,

вітаю з першим репо! Хотів би виділити кілька пунктів (деякі з повторенням):
- Дуже гарний README.md
- Необхідно виключити файли Ваших IDE, бо вони узалежнюють проект від Вашого вибору середовища. Найпростіший варіант - оновити .gitignore. Ось тут є приклад: https://github.com/github/gitignore/blo … .gitignore . Ідеально перейти на Maven/Gradle.
- Dictionary.txt теж є непотрібний для Вашої реалізації. Я розумію що цей файл для тесту, але якщо він таким є, то має мати під себе якийсь Unit test.
- Щодо коду, то я б назвав Вашу реалізацію непрактичною і з зіпсованим рівнем абстракції. Коли необхідно використати якусь структуру даних, ви очікуєте щонайменше 2 операції: покласти дані, дістати дані. У Вас є метод add(Ключ, Дані), але немає get(Ключ). Натомість є get що повертає Node. Звичайно, через Node можна дістатися до даних, але Node це не те що ви "клали" у цю структуру. Node це внутрішня презентація даних і вона має бути прихована. Розгляньте можливість імплементації вбудованих інтерфейсів колекцій, на приклад Map. Усі стандартні реалізації дерев у Java імплементують його. Можливо для Ваших потреб він теж підійде.
- Чому клас final? Не бачу потреби закривати його.
- Чому Ви використовуєте factory-method createNewTrie замість конструктора? Він не робить нічого, окрім ініціалізації самого класа, самої структури даних. Це завдання для конструктора.
- Винесіть запис у файл/теці з Trie.java. Ваші класи мають виконувати якусь 1 справу, не комбінуйте. Для цього краще створіть клас TrieIO зі статичними методами запису й зчитування Trie у якій помістіть код з Saver.java (жахлива назва для класу, не робіть так. Saver чого? Тексту, картинок, списків? Незрозуміло), Loader.java (та сама ситуація) та методи запису з Trie.
- Непотрібна папка Trie. Не засмічуйте репозиторій, і так зрозуміло з назви що це Trie :) Тобто замість MikeHerasimov/Trie/Trie/src/trie/Saver.java має бути MikeHerasimov/Trie/src/trie/Saver.java.
- Розгляньте можливість зміни назви пакету за Java Package Naming Convention. На приклад, на com.github.mikeherasimov.trie.Trie.
- Текст комітів , вже писали вище.

Помилки всі звичайно не смертельні. Вітаю Вас з 1 репо, пищіть ще! :)
У приклад можу підкинути один зі своїх репо: https://github.com/wingsofovnia/canopus/tree/develop.

Якщо будуть ще питання - задавайте, допоможемо!

Подякували: Анатолій, Regen, leofun013

12

Re: Мій перший репозиторій на GitHub

iovchynnikov написав:

Доброго дня,

вітаю з першим репо! Хотів би виділити кілька пунктів (деякі з повторенням):
- Дуже гарний README.md
- Необхідно виключити .....
....
Якщо будуть ще питання - задавайте, допоможемо!

Змістовно проаналізував роботу, ніби вчитель:  "- Ось тут поправ, ось тут видали, тут прорахуй, а загалом оцінка Добре"
:) :)

Подякували: iovchynnikov1

13

Re: Мій перший репозиторій на GitHub

Regen написав:

хей, привітулі усім, ось збацав свій перший репозиторій, думаю, непогано було б, якби хтось втикнув і

Прихований текст

обісрав

покритикував це все

ось лінк, хе-хе, бо я його одразу й не додав ;)
https://github.com/MikeHerasimov/Trie

У якості навчального прикладу з Pull Request`ів на GitHub, зробив Вам запит на Pull Request з деякими змінами, про які йшлося у цій темі. До того ж переніс процес збирання проекту на Maven (в IDEA такий проект імпортується наступним чином: File -> Import Project і треба вибрати там pom.xml).

Подякували: Regen, leofun012

14 Востаннє редагувалося Regen (28.01.2016 13:08:20)

Re: Мій перший репозиторій на GitHub

Доброго дня всім, рідко заходжу на ріплейс - тому сорі, що вчасно не відповів.
Тільки вчора ввечері побачив мейл від GitHub про pull request і сьогодні зранку побачив лінк сюди з повідомлення iovchynnikov

Відверто кажучи думав, що тема мертва, чуваки, ви мене приємно здивували ;)
Бачу, що всі пости датуються 23-24 числом, коли я залив версію 2.0.0 в понеділок 25-го

Основні зміни у версії 2.0.0

  • розбив class Trie (tagged class) на ієрархію класів і інтерфейсів

  • додав ще одну реалізацію ArrayTrie з відповідним ArrayDAWG, до якого воно може бути приведене

  • видалив Saver і Loader класи

Велике дякую панові iovchynnikov за те, що не пошкодували часу і подивилися на код (щоправда паскудний)
Ви багато написали, дещо уже зробив у версії 2, дещо стараюсь переварити.
Поки що буду розбиратись з pull request`ом і гляну на приклад, який Ви мені надали. Дякую за привітання, писатиму ще ;)
І, до речі, якщо матимете час гляньте, будь ласка, на версію 2.0.0, мене цікавить Ваша думка

15 Востаннє редагувалося Regen (28.01.2016 13:15:27)

Re: Мій перший репозиторій на GitHub

funivan написав:

1. - пишіть у комітах що ви робите
2. - виключіть файл.idea/workspace.xml - він дуже часто міняється
3. + кльово що є рідмі
4. - спробуйте протестувати свій код (не знаю чи дял джави є ci сервіси)
6. - поправте шаблони (    // TODO Auto-generated constructor stub)

п.с. я віддаю перевагу { } але це особисте. у вас знайшов таку штуку if(isDAWG) throw new IllegalStateException();

зі всім згоден, в другій версії залишив тестові класи
про пі сі: знайомий з Австрії теж акцентував на цьому увагу- тому в версії 2.0.0 старався дотримуватись такого синтаксису, навіть якщо тіло займає всього один рядочок

if(<expression>) {
  // do some stuff
} else {
  // do something else
}

як він казав це робить код більш читабельним
тільки у методі equals() я відмовився від такого синтаксису

16

Re: Мій перший репозиторій на GitHub

Regen шле усім вітання!

На даний час працюю з серіалізацією/десереалізацію обох реалізацій.

Прихований текст

боже, як же ж круто звучить і водночас яка мила тавтологія

Щоправда з ручною, без використання Serializable.

З алгоритмами розібрався (роблю усе як тут http://articles.leetcode.com/2010/09/se … inary.html), хотів створити mixin TrieIO з двома методами

void saveTrie(String filename);
static Trie loadTrie(String filename);

Покруч у тім, що Java 7 не дозволяє додавати static методи до інтерфейсів, Java 8 хоч і дозволяє, але потрібно додати до нього тіло і в будь-якому випадку @Override для статичних методів не може бути застосованим, через те, що вони resolvable at compile time.

Я використовую FileChannel з ByteBuffer`ом щоб записати char[], який згенерував наданим алгоритмом, звісно можна заюзати Serializable і записати масив char`ів з допомогою writeObject, але запис з допомогою FileChannel є досить таки швидшим.

Може маєте якісь ідеї?

17

Re: Мій перший репозиторій на GitHub

Regen написав:

хотів створити mixin TrieIO з двома методами

void saveTrie(String filename);
static Trie loadTrie(String filename);

Чому saveTrie не статичний?

Regen написав:

Покруч у тім, що Java 7 не дозволяє додавати static методи до інтерфейсів, Java 8 хоч і дозволяє, але потрібно додати до нього тіло і в будь-якому випадку @Override для статичних методів не може бути застосованим, через те, що вони resolvable at compile time.

Навіщо ти його магаєшся надписати?

Regen написав:

Може маєте якісь ідеї?

Щодо чого? :) Конкретніше. Бо ти сам собі відповідаєш у повідомленні.

18 Востаннє редагувалося Regen (01.02.2016 15:38:33)

Re: Мій перший репозиторій на GitHub

а чому saveTrie має бути статичним

Прихований текст

forgive me for my rudeness

?
він ж застосовується до певного екземпляра Trie, а не просто до класу
loadTrie статичний, бо я хочу, щоб можна було застосовувати щось таке

Trie trie = Trie.loadTrie("myAwesomeTrie.txt")

Я хочу зробити це у вигляді mixin'а (інтерфейса). Щоб обидві реалізації (ArrayTrie, LinkedTrie) реалізовували його і щоб код був більш розширюваним, тобто коли я буду робити ще одну реалізацію я б міг просто реалізувати інтерфейс і написати тіло таких методів.

Ось як я хочу, щоб все виглядало, правда зараз бачу, що це неможливо

public interface TrieIO {
  void saveTrie(String filename);
  static Trie loadTrie(String filename);
} 

public class ArrayTrie implements Trie, TrieIO {
...
}

public class LinkedTrie implements Trie, TrieIO {
...
}

19 Востаннє редагувалося Regen (01.02.2016 15:39:55)

Re: Мій перший репозиторій на GitHub

Ідеї щодо архітектури, бо та яка була найбільш очевидною не працює, може є якийсь патерн, що дозволить мені зробити подібну річ?

20

Re: Мій перший репозиторій на GitHub

Я вже казав як, з моєї точки зору, краще зробити. TrieIO немає нічого спільного з Trie. Trie - структура даних, TrieIO клас для запису до файлів. Приклад: Фабрика(TrieIO), що виготовляє дизельне пальне; дизельне пальне звичайне (Trie); дизельне пальне з домішками (ArrayTrie). То чому дизельне пальне з домішками має окрім звичайного пального, успадковувати властивості і поведінку фабрики, що його виготовляє?

interface Trie {
    void add(String s);
}

class ArrayTrie implements Trie {
    //
}

final class TrieIO {
    Trie readFromFile(String filename);
    void writeToFile(Trie tree, String filename);
}

Якщо ж ти все ж таки хочеш, щоб кожен різновид Trie сам релізовував записування, считування (робити це доцільно якщо кожна структура по різному себе записує. ArrayTrie записує 1 2 3... у файл, а LinkedTrie має зовсім інший [1],[2]...) можна так:

interface Trie {
    void add(String s);
}

interface SerializableTrie {
    void serialize(String filename);
    Trie deserialize(String filename);
}

class ArrayTrie implements Trie, SerializableTrie {
    void add(String s) {}
    void serialize(String filename) {}
    Trie deserialize(String filename) {}
}

Але я думаю твої колекції будуть записуватися однаково, тільки у пам'яті будуть по інакшому виглядати.