Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Представляем вам ORMjs (https://javascript.ru/forum/offtopic/63642-predstavlyaem-vam-ormjs.html)

ORMjs 20.06.2016 06:29

Представляем вам ORMjs
 
Ссылка на скачку https://www.npmjs.com/package/ormjs

ORMjs это использования стандартных структур языка яваскрипт, таких как классы, для взаимодействия с базой данных. Класс представляет собой аналог коллекции в базе данных, а инстанс класса документ в коллекции. Более подробно вот тут https://ru.wikipedia.org/wiki/ORM

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

Я намеренно скрыл реализацию базы данных, чтобы можно было подключать разные драйверы для разных баз данных. База данных должна быть лишь под капотом, и учавствовать лишь в сохранении состояния инстансов, а как она это будет делать, программиста пользователя, не должно волновать. В этом и суть этого фреймворка =)


Перевод документации:

ORMjs это javascript ООП интерфейс для базы данных.
Он использует ArangoDB, но в будущем я добавлю драйверы для других баз (таких как mongodb)

Концепция: Используя ES6 оператор await, геттеры и промисы,
мы можем ассинхронно совершать навигацию по дереву графов документов в базе данных.

Оно рекомендуется с использованием ES6, но вы так же можете писать на ES5

Я думаю что это эпично =) Это крайне крайне крайне крайне крайне элегантное API для работы с базой данных.
А что вы думаете об этом?

Она использует ArangoDB https://www.arangodb.com/2015/10/ben...godb-arangodb/
По ссылке тест производительности с другими базами данных типа Mongo.


API


static:
Model.get(_id) // получает модель по id
Model.add(obj) // создает модель на основе переданного обьекта
Model.remove(model) // удаляет модель
Model.restore(model) // восстанавливает удаленую модель
Model.save(model) // сохраняет изменения модели в базу данных
Model.update(model) // загружает состояние модели из базы данных


instance
Model.prototype.save() // псевдоним для Model.save(this)
Model.prototype.update() // псевдоним для Model.update(this)
Model.prototype.remove() // псевдоним для Model.remove(this)
Model.prototype.restore() // псевдоним для Model.remove(this)


Основы


Определим коллекцию User (именем коллекции станет имя класса)
let Model = require('ormjs')

class User extends Model {

	static schema = {
		// базовые типы
		name: String,
		male: Boolean,
		age: Number,
		birth: Date,
		tags: Set, // как массив, только с уникальными элементами
		status: ['sleep', 'eat'], // enum (значением поля может быть одно из перечисленных значений)

		// структуры
		messages: [String], // массив строк
		prop1: {prop2: [{tags: [String]}] }, // можно описывать сколь угодно сложные вложенные структуры

		// ссылки на сущности из других коллекций (ну или этой же)
		bestFriend: User, // ссылка на инстанс User
		friends: [User], // ссылка на массив инстансов User

		// опции поля
		name: String,
		name: {$type: String},
		name: {$type: String, test: /^\w+$/},
	}

}



Example 0:


let Model = require('ormjs')


class User extends Model {

	static schema = {
		name: String,
		age: Number,
	}

}


Usage:

(async function () {

	// adding user to db
	let user = await User.add({
		name: 'Ашот',
		age: 24,
  	})

	user._id // 'User/434370324723'
	user._removed // false
	user.name // 'Ашот'
	user.age // 24

	// change field
	user.name = 'Ololo'
	console.log(user.name) // 'Ololo' field is changed

	// reset changes
	await user.update() // load state from db
	user.name // 'Ашот'

	// saving changes
	user.name = 'Ololo' // change field
	await user.save() // save changes to db
	await user.update() // load state from db
	user.name // 'Ololo' because we save

}())


Example 1:

let Model = require('ormjs')


class User extends Model {

  static schema = {
    name: String,
    age: Number,
    friends: [User]
  }


  async addFriend(user) {
    let friends = await this.friends
    friends.push(user)
    await this.save()
  }


  async removeAllFriends(){
    this.friends = []
    await this.save()
  }

}


Usage:

(async function(){

  let user = await User.add({
    name: 'Ivan',
    age: 24,
    friends: []
  })

  await user.addFriend(user)
  await user.addFriend(user)
  await user.friends // [user, user]  two itself =)

  await user.removeAllFriends()
  await user.friends // []

  await user.friends === await user.friends // true

  user.name = 22
  await user.save() // ValidationError: Field `name` must be String, but have Number

})()



Example 2:

let Model = require('ormjs')


class Sector extends Model {

	static schema = {
		size: Number
	}

}


class User extends Model {

	static schema = {
		name: String,
		sector: Sector,
	}

}


Usage:

(async function () {

	let sector = await Sector.add({
		size: 236
	})

	let user = await User.add({
		name: 'Ашот',
		sector: sector
	})

	(await user.sector).size // 236


	let sector2 = await Sector.add({
		size: 1004
	})
	user.sector = sector2
	await user.save()

	(await user.sector).size // 1004 because this another sector ^__^


})()


Custom types:

System types is: String, Number, Boolean, Data, Set
Actually we can use custom types:

let Model = require('ormjs')


class Color {

	constructor(r, g, b) {
		this.r = r
		this.g = g
		this.b = b
	}


	// convert to db document
	toJSON() {
		return {
			r: this.r,
			g: this.g,
			b: this.b
		}
	}


	// restore from db document
	static fromJSON(json) {
		return new Color(json.r, json.g, json.b)
	}

}


class User extends Model {

	static schema = {
		name: String,
		color: Color
	}

}


Usage:

(async function () {

	let user = await User.add({
		name: 'Ашот',
		color: new Color(0, 255, 0)
	})

	user.color instanceof Color //true

}())


Schemas


Number
schema = {
	age: Number,
	age: {$type: Number},
	age: {$type: Number, min:0, max:100}
}



String
schema = {
	name: String,
	name: {$type: String},
	name: {$type: String, min:3, max:20, test:/^\w+$/}
}



Set
schema = {
	tags: Set,
	tags: {$type: Set},
	tags: {$type: Set, set: ['animals', 'porn', 'movie']}
}



Enum (for any type) Field value must be one of from enum array
schema = {
    status: ['pending', 'resolve', 'reject']
}



Это часть большого проекта, но я выгрузил её как отдельный модуль NPM, возможно она будет кому-то полезна.
https://github.com/uMaxmaxmaximus/ui...erver/core/orm

Напишите кто нибудь статью на хабре, кто умеет писать на хабре =)

Erolast 20.06.2016 07:26

Лол, ты же плевался с ES6) Изменил мнение?

И да, async/await - это уже ES7.

ORMjs 20.06.2016 07:38

Цитата:

Сообщение от Erolast
Лол, ты же плевался с ES6) Изменил мнение?

Блин :D :D :D :D :D ну че началось то?
Ну было дело, ну ошибался я, и про кофескрипт ошибался, ну я просто думал что вы все врете и хотите мне плохое посоветовать и зла желаете. И сами мучаетесь и хотите меня мучать. На самом деле я по прежнему ненавижу ES синтаксис и у меня в списке TODO 3 технических проэкта на ближайшие 2 года

1) MegaJS (это такой изоморфный фреймворк на базе UIjs (плюс позволит писать и под десктопы и мобилки как React Native))
2) CoffeeScript ES6
3) Аналог THREE с физикой (на Rust компилируемый в asm.js и wasm)

На самом деле эту ORM я написал за неделю, а там писать особо и нечего, потестируйте кто нить. Никогда в подобных ORM не хватало такой вот удобной ссылки на другую коллекцию let frields = await user.frields.

А вообще я поражаюсь как Babel написали стейт машину для ассинхронки. Это верх элеганства. Я бы не додумался, при том каллбак выполняется в том же конетксте следовательно сохраняются общие ппеременные и общий скоуп. Это феноминально.

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

Чтобы больше не пистаь на клиенте api.getUsers() а писать как будто бы у нас база данных прям в браузере есть. Ну как в Meteor

============== Ребят ну активнее активнее, пожалуйста =)

ORMjs 20.06.2016 17:12

Ну ребята, я даже доку написал, все как вы просили, ну скачайте кто нибудь, протестируйте ну. Ну 0 даунлоадов за сутки ну...

destus 20.06.2016 18:53

Будет custom validation и populate как в mongoose? Можно писать на генераторах с подключенной библиотекой co вместо async/await?

cyber 20.06.2016 19:35

ORMjs, ты серьезно на гитхаб закинул после babel?

ORMjs 20.06.2016 19:48

Цитата:

Сообщение от destus
и populate как в mongoose?

Тут как бы если ты сделаешь популейт то как он узнает какой глубины граф тебе отдать? Это бессмысленно. Я делаю щас прослойку для клиенд сайда, где можно используя такой же api общаться с базой и лазить по её графу (но с учетом кастомной логики привелегий и разрешений, и доступа к полям и все такое, проверка на юзера и все такое). Так что в популейт не будет необходимости, ровно как и в api.getUsers() и все такое прочее. Вы просто в браузере будете работать с массивоподобными обьектами которые являются срезами с базы данных, делать по ним выборки, изменять их, где у вашего юзера не доступа то будет ошибка и.т.п.

Цитата:

Сообщение от destus
Можно писать на генераторах с подключенной библиотекой co вместо async/await?

Я же так и написал) тут ссылки на другие коллекции возвращают промис и все, то есть можно вообще писать вот так user.friends.then(friendsArr=>) просто оператор async он как бы сахар для этого и ждет выполнения промиса, а если там не промис то просто возвращает это значение.

Цитата:

Сообщение от cyber
ты серьезно на гитхаб закинул после babel?

Ну а что не так? Как надо было? Я вообще-то на гитхаб весь проджект свой закинул, а orm это часть бякенда, который лежит в папке server. решил просто отдельный гитхаб не делать для orm

ORMjs 20.06.2016 19:54

Цитата:

Сообщение от destus
Будет custom validation

Да кстати, мелочь но щас сделаю. Ты и так можешь делать кастомную валидацию перекрыв статический метод validate() но тогда вручную придется пробегаться по полям схемы, а она может быть крайне сложной. По этому я лучше добавлю просто опции полям типа {$type:String, $test: function(){}}

Но вообще предполагается что валидация должна делаться на уровне модели. То есть у неё есть методы типа addUser
removeMessages и они уже валидируют параметры передаваемые в них и как то сейвят состояние. Максимум что должно быть на слое ORM это как бы длинна данных (чтобы память не жрала 10000к строка например) и какие-то вещи связанные с длинной данных в базе данных и типом, а корректность данных, с точки зрения приложения, должна проверяться самими моделями и прогарммистом отдельно. То есть валидация это уже уровень ИСПОЛЬЗОВАНИЯ ORM а не внутри ORM. Но для удобства я щас добавлю функции $test

destus 20.06.2016 20:03

Цитата:

Я же так и написал) тут ссылки на другие коллекции возвращают промис и все, то есть можно вообще писать вот так user.friends.then(friendsArr=>) просто оператор async он как бы сахар для этого и ждет выполнения промиса, а если там не промис то просто возвращает это значение.
ок, просто для async надо Babel, а если делать проект с поддержкой ES6 браузерами из коробки, то можно всего-лишь подключить co размером ~4kb

ORMjs 20.06.2016 20:19

Ну а кто вообще пишет на es6 и es7 без Babel? К тому же await это просто сахар на промисы, так что ограничений тут нет =)

(В typescript кстати await например есть)

cyber 20.06.2016 20:52

Цитата:

Сообщение от ORMjs
Ну а что не так? Как надо было?

например так
/src - тут проект в исходном виде
/dist - после бабел
gulpfile.js|webpack.config.js - для сборки проекта (или другой сборщик)

ORMjs 20.06.2016 21:50

Цитата:

Сообщение от cyber
/src - тут проект в исходном виде
/dist - после бабел

А нет, так код комплишен и node дебаггинг плохо работает у phpstorm. Чтобы скрывать исходники из npm нужно использовать .npmignore я просто забыл ^_^, да и в целом не вижу причин это делать.

НЕ обязательно разделять сорцы и билды на разные папки, если не предполагается делать сборку. Я не делаю сборку я делаю транспиляцию, сохраняя структуру и имена файлов, по этому для меня удобнее держать сорцы с одном месте с "билдом".

> webpack.config.js
вебпак нужен когда ты делаешь пак для веба, то есть обьединяешь разные файлы в один. для бакенда это обьединение файлов не нужно, более того, нужно максимально сорцы оставить, чтобы человек если что мог залезть в код модуля твоего и глянуть что там да как. то есть мне в целом сборку не нужно делать для бакенда. Я сборку делаю для фронтенда, вебпаком. Но на node собирать вебпаком это странно. у меня было и src и build но я понял что такая структура папок крайне неудобна и не подходит для моих проджектов. Это имхо.

Erolast 20.06.2016 21:51

Цитата:

/src - тут проект в исходном виде
/dist - после бабел
Причем, src пушится на гитхаб, но не пушится в нпм, а dist пушится в нпм, но не пушится в гитхаб.

ORMjs 20.06.2016 21:54

Цитата:

Сообщение от Erolast
Причем, src пушится на гитхаб, но не пушится в нпм, а dist пушится в нпм, но не пушится в гитхаб.

Выше прочитай.

Erolast 20.06.2016 21:55

Когда я писал пост, ты еще не ответил.

ORMjs 20.06.2016 21:57

Цитата:

Сообщение от Erolast
Когда я писал пост, ты еще не ответил.

Спасибо кэп). По этому и говорю.

cyber 20.06.2016 22:21

Цитата:

Сообщение от cyber
для сборки проекта (или другой сборщик)

babel -d ./dist ./src -s

Цитата:

Сообщение от ORMjs
вебпак нужен когда ты делаешь пак для веба, т


ORMjs 21.06.2016 04:38

cyber,
Почему не нужно чтобы были es6 файлы в npm модуле? Чтобы не увеличивать вес модуля. По этому надо добавить их в npm ignore.

1) Почему на гитхабе не должно быть собранных файлов? нипочему
2) Phpstorm не может делать дебаггинг если они в разных папках лежат
3) Phpstorm красиво подсвечивает скомпилированный файл, он прячет его в сорц файл как бы в папку так, что я всегда, в один клик, могу посмотреть во что оно там скомпилировалось, что повышает удобство разработки.

ORMjs 21.06.2016 07:51

А по поводу ORM че думаете? Игрался кто нибудь?) Разве это не самое удобное ORM что вы видели? (осталось только дать индексы настраивать)

destus 21.06.2016 08:33

Цитата:

Сообщение от ORMjs (Сообщение 420058)
А по поводу ORM че думаете? Игрался кто нибудь?) Разве это не самое удобное ORM что вы видели? (осталось только дать индексы настраивать)

Надо под Mongo релиз :)

fancy 21.06.2016 13:27

Цитата:

Сообщение от ORMjs (Сообщение 419974)
Это часть большого проекта, но я выгрузил её как отдельный модуль NPM, возможно она будет кому-то полезна.
https://github.com/uMaxmaxmaximus/ui...server/lib/orm

Напишите кто нибудь статью на хабре, кто умеет писать на хабре =)

Цитата:

Сообщение от ORMjs (Сообщение 420010)
Ну ребята, я даже доку написал, все как вы просили, ну скачайте кто нибудь, протестируйте ну. Ну 0 даунлоадов за сутки ну...

ORMjs(он же nemo),
каких даунлоадов ты ждешь?

Единственное место где ты опубликовал информацию о своем проекте - этот сайт.
Ты знаешь когда люди загружают модули с npm?
Когда есть серьезный проект и в разделе установки указано как поставить через npm.
В качестве примера HighCharts. У них есть раздел с установкой в документации.

Здесь твой пост прочитали от силы 15 человек, которые работают над своими задачами и как минимум твоя тема в данный момент им не нужна.

У тебя есть twitter с подписчиками?

Твой аккаунт на github с фоткой в трениках, оголенным торсом и ...
не вызывает никакого желание у людей даже посмотреть твой проект.
А ник из разряда неадекватов.

Если ты хочешь чтобы твоей наработкой кто-то пользовался.
1 - (о чем тебе уже лет 9 на этом форуме говорят) стань адекватным человеком. Не веди себя как ребенок в детском саду.
2 - Сделай нормальный twitter, github аккаунты.
3 - Сделай документацию, примеры, сайт(хотя бы github pages)
4 - Россия - это 2% мирового рынка. Успешные проекты ориентированы на глобальный рынок(есть исключения).
Есть разные сайты, разделы по интересам где можно добавить ссылку на проект, например сейчас набирает большую популярность
https://github.com/sindresorhus/awesome
5 - Научись нормально разговаривать, если ты будешь в том же стили писать на иностранных ресурсах - тебя вежливо будут посылать, игнорить и отправлять в бан.

Надеюсь я тебе помог советом.

nerv_ 21.06.2016 14:00

Цитата:

Сообщение от fancy
Если ты хочешь чтобы твоей наработкой кто-то пользовался.
1 - (о чем тебе уже лет 9 на этом форуме говорят) стань адекватным человеком. Не веди себя как ребенок в детском саду.
2 - Сделай нормальный twitter, github аккаунты.
3 - Сделай документацию, примеры, сайт(хотя бы github pages)
4 - Россия - это 2% мирового рынка. Успешные проекты ориентированы на глобальный рынок(есть исключения).
Есть разные сайты, разделы по интересам где можно добавить ссылку на проект, например сейчас набирает большую популярность
https://github.com/sindresorhus/awesome
5 - Научись нормально разговаривать, если ты будешь в том же стили писать на иностранных ресурсах - тебя вежливо будут посылать, игнорить и отправлять в бан.

Проще пересадить ему мозг от другого человека обезьяны. Но (!), зачем такие жертвы :D

ORMjs 21.06.2016 14:40

Цитата:

Сообщение от destus
Надо под Mongo релиз

Да блин, аранго же быстрее)! я же ссылку на тесты дал. К Тому же какая тебе разница если ты все ровно базу трогать не будешь напрямую.

Цитата:

Сообщение от fancy
ORMjs(он же nemo),

Я не немо я максимус и я не знаю кто такой немо, видимо какой то аутист который был тут до меня. Видимо мы похожи только НЕОБЫЧНОСТЬЮ, но тебе этого достаточно чтобы путать..


Цитата:

Сообщение от fancy
Надеюсь я тебе помог советом.

Да, теперь я знаю как пиарить MegaJS). Дело в том что это просто часть MegaJS, я выложил ЧИСТО для вас, 15 челоевк с форума. и доку тока для вас написал. Потому шо вы до этого бугуртили что вы не телепаты и не знаете названия функций. Ну я подумал "Ну логично" и написал доку.

Цитата:

Сообщение от fancy
каких даунлоадов ты ждешь?

Ну я просил вас потестить поиграться, а там 0 скачек было. При том вы все обсуждали либу. Я думаю "ну хоть скачали бы хоть раз". Потом я понял что npm статистика обновляется раз в сутки/

Плюс ко всему я адекватный =) Ты видимо меня с немо путаешь.

cyber 21.06.2016 15:02

Цитата:

Сообщение от ORMjs
1) Почему на гитхабе не должно быть собранных файлов?

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

fancy 21.06.2016 15:57

ORMjs,

Напишу тебе банальную вещь, которую студенты редко понимают после вуза.

Проект - это не куча кода!!!
Никого не интересуют мегабайты кода.
Всех интересуют проекты.

Итак, проект - это
0 - Название проекта.
1 - код, занимает от 50% времени
2 - тестирование
3 - документация!!!
4 - API!!!
5 - примеры(не куски кода на форуме)
6 - Support
7 - сайт
8 - приятный дизайн
9 - Раскрутка
10 - Адекватность(нормальная фотка или логотип всех аккаунтов)
11 - Вежливость, в твоем случаем - не использование гопнического сленга.

Можно добавить еще пару десятков пунктов.
Добавлю лишь 2.
12 - Когда тебе говорят про Mongo, это значит следующее.
На рынке используются множества решений и если твой продукт интегрирован с ними, то ты получаешь +200% потенциальных клиентов(нужно тебе это или нет, решай сам)
13 - Про билды в репозиториях.
Если не добавлять билды в .gitignore, то в скором времени при скачивании твоего небольшого проекта в 1 мб, общий размер проекта будет в несколько сотен мб.

P.S.:
Но прежде чем тратить месяцы-года на разработку, надо для себя определиться что ты в действительности хочешь.
1 - Заработать денег
2 - Просто интересно
Думаю в действительности тебе интересен пункт 1.
Тогда первым делом смотри какие есть аналоги, цены, популярность.

Если пункт 2, то приведу тебе пример моего знакомого - 40 лет, 2-ое детей.
5 лет делал в одного мега-крутую штуку. Серверное решение для обработки видео на одной из технологий Adobe.
Потом пришел инвестор с деньгами и сказал что ему надо, и вот уже 7 лет делает неинтересный ему проект но зарабатывает деньги на семью.

Крайне редко получается сделать успешный проект, вероятность от 0.1% до 1%. Но при каждой следующей попытки твои шансы увеличиваются.
Главное чтобы не получилось вот так - 10 лет потерянной жизни на никому не нужный софт!!!

Erolast 21.06.2016 17:27

Цитата:

Если не добавлять билды в .gitignore, то в скором времени при скачивании твоего небольшого проекта в 1 мб, общий размер проекта будет в несколько сотен мб.
Да вот не надо, гит сжимает комиты.

Цитата:

Да блин, аранго же быстрее)! я же ссылку на тесты дал. К Тому же какая тебе разница если ты все ровно базу трогать не будешь
Не забывай, что любой программист - ленивая жопа. Изучать новый фреймворк - и так выход из зоны комфорта, а если ради него приходится осваивать еще что-то (в твоем случае - новую СУБД), то всякое рвение пропадает напрочь, не успев возникнуть.

fancy 21.06.2016 17:47

Цитата:

Сообщение от Erolast (Сообщение 420094)
Да вот не надо, гит сжимает комиты.

Я не говорил что не сжимает.
При каждом build-e плюсом от 20-100 кб (сжатых коммитов библиотеки).
После нескольких десятков коммитов...

Гляньте хотя бы репозиторий jquery.
https://github.com/jquery/jquery
Там нет build-ов jquery.

Build-ы библиотеки в репозитории - плохой стиль!

ORMjs 22.06.2016 05:49

Цитата:

Сообщение от cyber
Я сказал что рядом должны лежать исходники до babel

es6 это babel, js это не babel

Цитата:

Сообщение от cyber
П.с Потому что если бы я открыл либу , а там исходники после babel то я бы закрыл и большне не когда бы не юзал бы эту либу.

Ну это потому что видимо у тебя не хватило внимательности понять что исходники в формате es6 а билды формате js? и ты бы не использовал либу не из-за разработчика, а по своей невнимательности. Вот тебе яркий пример где ты ОШИБСЯ, а либу бы не использовал чисто по своей вине.

Цитата:

Сообщение от fancy
Думаю в действительности тебе интересен пункт 1.

Ууу совершенно нет, я деляю крутую платформу для себя, а с людьми просто делюсь. Существующие решения ужасны а мое великолепно и как глоток свежего воздуха, и я хочу чтобы и другие люди не мучались больше используя те. старые продукты. То есть чисто альтруизм. =) Деньги я на пиццерие зарабатываю.

Цитата:

Сообщение от fancy
10 лет потерянной жизни на никому не нужный софт!!!

90% это я для себя делаю чтобы быстро сайтики клепать. А 10% это чтобы и с другими поделиться, не жадничать такое сокровище. Я серьезно. Ну и слава мне нужна, чтобы все охреневали как я могу =)


Цитата:

Сообщение от Erolast
Изучать новый фреймворк

4 метода? добавить удалить обновить найти. Я Эту штуку И НАЧАЛ делать чтобы абстрагироваться от убогого API множества баз данных и сделать Api в используя классы и инстансы яваскрипта. чтобы ничего учить и не пришлось

Цитата:

Сообщение от Erolast
в твоем случае - новую СУБД

Я же сказал что ты не будешь работать с субд, то КАКИМ МАГИЧЕСКИМ ОБРАЗОМ Я сохраняю СОСТОЯНИЯ ОБЬЕКТОВ это уже мое дело) Я захочу одно поставлю захочу потом вообще другую бд буду использовать. Понимаешь? Эта штука И НУЖНА чтобы НЕ РАБОТАТЬ больше с базой данных, ибо нам не база данных нужна а обьекты которые бы не удалялись после завершения программы а после запуска снова имели свое состояние. А как оно будет делаться уже мои проблемы. База данных это прога чтобы инфу хранить. Зачем хранить инфу? Чтобы когда петя добавил камент, он к даше прилетел. НО при том все это не лежало в оперативке. И вот эти обьекты и позволяют реализовать класс Comment который будет откуда то браться и сохранять свое состояние.

Википедия:
Цитата:

Суть задачи состоит в преобразовании таких объектов в форму, в которой они могут быть сохранены в файлах или базах данных, и которые легко могут быть извлечены в последующем, с сохранением свойств объектов и отношений между ними. Эти объекты называют «хранимыми» (англ. persistent).
===
Цитата:

Сообщение от nerv_
Проще пересадить ему мозг

От того что я нарушаю какие-то мемы, которыми тебя напичкала культура, не означает что я более глупый, скорее наоборот. И я не понимаю к чему такие оскорбления и как они связаны с ORMjs. P.S> http://ru.wikipedia.org/wiki/Ad_hominem

ORMjs 22.06.2016 06:30

Цитата:

Сообщение от fancy
Build-ы библиотеки в репозитории - плохой стиль!

Кому он вредит и как? Увеличиваетя размер репозитория. И кому это вредит и как? - Никому и никак. Даже THREEjs делают билды в репозитории. Да что там, вообще все делают билды в репозитории.

fancy 22.06.2016 07:30

Цитата:

Сообщение от ORMjs (Сообщение 420120)
Кому он вредит и как? Увеличиваетя размер репозитория. И кому это вредит и как? - Никому и никак. Даже THREEjs делают билды в репозитории. Да что там, вообще все делают билды в репозитории.

mrdoob - особый человек.
Он постарался сделать чтобы Three.js могли использовать даже плохо знакомые с JS.

Постараюсь еще раз объяснить чем это плохо.
Если при простом изменении файла - хранятся строки изменений.
То с минифицированной версией(представляющей из себя по сути одну строку) в качестве изменения храниться одна строка в несколько десятков килобайт.
Если билд делается хотя бы раз в неделю и при среднем размере заархивиронной мин версии библиотеки в 40 кб, получаем за год порядка 1.8 мб. Если же у вас несколько вариаций мин версий то может быть и 10-20 мб за год.

fancy 22.06.2016 08:02

Цитата:

Сообщение от ORMjs (Сообщение 420119)
Ууу совершенно нет, я деляю крутую платформу для себя, а с людьми просто делюсь. Существующие решения ужасны а мое великолепно и как глоток свежего воздуха, и я хочу чтобы и другие люди не мучались больше используя те. старые продукты. То есть чисто альтруизм. =) Деньги я на пиццерие зарабатываю.


90% это я для себя делаю чтобы быстро сайтики клепать. А 10% это чтобы и с другими поделиться, не жадничать такое сокровище. Я серьезно. Ну и слава мне нужна, чтобы все охреневали как я могу =)

Уже несколько лет читаю твои заявления про интересный, современный проект.
Если быть честным, так и не понял что конкретно ты делаешь.
Но по данной теме понял, что решения связанные с базами данных.
Позволь показать тебе реально хороший проект из этой сферы.
https://realm.io/

Я не знаю сколько тебе лет, какое образование.
Скажу как если бы ты был моим студентом.

Ты еще очень много не знаешь, но это не беда. Если хочешь сделать проект - все возможно.
Есть проверенный временем подход - MVP.
Minimum viable product - минимально жизнеспособный продукт.
Большинство молодых разработчиков, хотят сделать что-то большое,
но потратив год-два своей жизни бросают это, потом начинают что-то новое и опять повторяется.
Необходимо понимать, что у тебя есть - ты один, времени мало, инвестиций нет, но есть цель.
Если ты действительно хочешь ее достичь, посчитай сколько тебе надо времени на самую минимальную разработку в часах - не должно быть больше 300 часов. Далее тебе необходимо будет сделать - API, документацию, тесты и множество других моментов о которых ты даже и не думал вначале - это будет еще +100% уже потраченного времени.

И вот, прошло пол-года, у тебя есть MVP твоего проекта. Начинается раскрутка. Находи форумы, разделы, twitter group-ы и т.д. которым это может быть интересно и вперед. Но помни успех не приходит сразу, требуется от 1 года, чтобы проект стал пользоваться популярностью.
И самое главное - прислушивайся к отзывам, негативное отношение к твоему проекту - это недоработки, которые необходимо исправлять, а не спорить. Ты же не споришь в багами к коде, ты их исправляешь!!!

Erolast 22.06.2016 08:36

Цитата:

Я же сказал что ты не будешь работать с субд, то КАКИМ МАГИЧЕСКИМ ОБРАЗОМ Я сохраняю СОСТОЯНИЯ ОБЬЕКТОВ это уже мое дело)
Да ладно, установит аронго и перенесет в него все мои базы фреймворк тоже автоматически?
Нет уж, любая СУБД - штука комплексная и тяжелая, и какая будет стоять у меня на машине - это как раз-таки моё дело.

ORMjs 22.06.2016 09:20

Цитата:

Сообщение от fancy
Если быть честным, так и не понял что конкретно ты делаешь.

Ну я написал около 6 фреймворков для фронтенда, и каждый раз делал все лучше и лучше, пока не обогнал ангуляр 2. Далее я решил написать к нему бакенд. И обьединить все это в название MegaJS. А по скольку там используется виртуал дом, то значит можно пилить компоненты и под ios и android как ReactNative. Смысл в том чтобы поднять абстракции на высоченный уровень, выше чем в Meteor. Чтобы по простоте была как Вордпресс, но для программистов. Я делаю изоморфную платформу для создания веб приложений. Если говорить обобщенно. Так же там будет маркет компонентов. Типа чатиков и всего такого. Которые подключаются простым тегом <chat></chat>. То есть смесь реакт, полимер, ангуляр 2 и метеор

Цитата:

Сообщение от fancy
Я не знаю сколько тебе лет, какое образование

24 года, образование это процесс передачи знаний от старых поколений новым. у меня высшее, несмотря на то что я самоучка. У меня нет диплома об образовании, так как мне не нравится образовательная система, готоващая рабов, и я не пользовался ей с 7 класса. =)

Цитата:

Сообщение от Erolast
и перенесет в него все мои базы

Нельзя перенести проект на эту платформу, только с нуля начинать. Или ты тоже от ангуляра требуешь чтобы он весь твой код напсианый для реакта переписывал?

fancy 22.06.2016 10:59

Цитата:

Сообщение от ORMjs (Сообщение 420127)
Ну я написал около 6 фреймворков для фронтенда, и каждый раз делал все лучше и лучше, пока не обогнал ангуляр 2. Далее я решил написать к нему бакенд. И обьединить все это в название MegaJS. А по скольку там используется виртуал дом, то значит можно пилить компоненты и под ios и android как ReactNative. Смысл в том чтобы поднять абстракции на высоченный уровень, выше чем в Meteor. Чтобы по простоте была как Вордпресс, но для программистов. Я делаю изоморфную платформу для создания веб приложений. Если говорить обобщенно. Так же там будет маркет компонентов. Типа чатиков и всего такого. Которые подключаются простым тегом <chat></chat>. То есть смесь реакт, полимер, ангуляр 2 и метеор


24 года, образование это процесс передачи знаний от старых поколений новым. у меня высшее, несмотря на то что я самоучка. У меня нет диплома об образовании, так как мне не нравится образовательная система, готоващая рабов, и я не пользовался ей с 7 класса. =)

Где можно увидеть твои наработки?
В поисковиках на запрос "MegaJS" - ничего нет.
Как люди могут узнать что ты хороший специалист, что у тебя проект лучше чем Angular 2?
Им необходимо найти твой проект на github без описания и документации https://github.com/uMaxmaxmaximus/ui-js/ и копать исходники?

Насколько я понял, тебя звать Иван Вольнов.
Ваня, разреши попросить тебя еще раз - смени аватарку у github аккаунта, ну или хотя бы удали.

Почему у тебя коммиты на русском языке?
Ты только для пользователей стран СНГ делаешь свой проект?

P.S.:
Опять про твой ник - uMaxmaxmaximus.
Ты фанат фильма Гладиатор?
Это здорово, но людям это зачем знать?
Придумай ник с меньшим количеством символов, например - umax.

Тебе нужно работать с речью.
Многие IT спецы погруженные в работу говорят на коде.
Но ты живешь в сообществе и если ты хочешь что-то донести до людей, то надо выражаться на понятном, приличном языке без сленга.
Ты же не хочешь, чтобы тебя все называли Гоп-Инженер или тому подобное.

ORMjs 22.06.2016 11:10

Цитата:

Сообщение от fancy
мени аватарку у github аккаунта, ну или хотя бы удали.

Это бренд, иван это неймфаг с имиджборд и его по аватарке узнают. Она популярна и бренд.
Цитата:

Сообщение от fancy
Придумай ник с меньшим количеством символов, например - umax.

Я пока не начал делать публичный репозиторий. Я исполдьзую гитхаб ТОЛЬКо для себя и ТОЛЬКО как защита чтобы комп когда сгарит проэкт не пропал.

У меня есть и стайл и иконка фреймворка, и я уже аккаунт зарегал MegaJsTeam и все такое прочее =)

Я фреймворк начну этот писать осенью. Пока же я занимаюсь бизнесом. И просто вам кусочек кода выложил. Вдруг пригодится.

Цитата:

Сообщение от fancy
Гоп-Инженер

Гопники они разговаривают "Ты проще разговаривай, терпила" а я разговараю "хах, ну ты лалка" это сленг с борд. Гопники тут не при чем, разные субкультуры. Более того, я не использую манеру общения из субкультур в айти.

Цитата:

Сообщение от fancy
Почему у тебя коммиты на русском языке?

Потому что коммиты я пишу лишь потому, что пустую строку оставлять нельзя. Я не опсиываю коммиты и они слушал для меня лишь сейвпойнтами. Я веду разработку один и не делаю форков. ПО этому не использую 99% гита. =)

Когда я начну делать проджект Mega публичным тогда я все сделаю как положено. ТО что ты говоришь это очевидно, но спасибо все ровно)

cyber 22.06.2016 11:28

Цитата:

Сообщение от ORMjs
Это бренд, иван это неймфаг с имиджборд и его по аватарке узнают. Она популярна и бренд.

*faceplam*

nerv_ 22.06.2016 11:28

Цитата:

Сообщение от ORMjs
Гопники они разговаривают "Ты проще разговаривай, терпила" а я разговараю "хах, ну ты лалка" это сленг с борд. Гопники тут не при чем, разные субкультуры. Более того, я не использую манеру общения из субкультур в айти.

мы все уже >2 лет наблюдаем, как ты ее не исползуешь


fancy, ты пишешь правильные вещи, я с удовольствием их прочитал. Только донести их до ORMjs вряд ли получится (и надо ли оно тебе?). Почему я так думаю? Потому, что
Цитата:

чукча писатель, а не читатель
:)

fancy 22.06.2016 11:30

Цитата:

Сообщение от ORMjs (Сообщение 420137)
Это бренд, иван это неймфаг с имиджборд и его по аватарке узнают. Она популярна и бренд.
Я пока не начал делать публичный репозиторий. Я исполдьзую гитхаб ТОЛЬКо для себя и ТОЛЬКО как защита чтобы комп когда сгарит проэкт не пропал.

У меня есть и стайл и иконка фреймворка, и я уже аккаунт зарегал MegaJsTeam и все такое прочее =)

Я фреймворк начну этот писать осенью. Пока же я занимаюсь бизнесом. И просто вам кусочек кода выложил. Вдруг пригодится.


Гопники они разговаривают "Ты проще разговаривай, терпила" а я разговараю "хах, ну ты лалка" это сленг с борд. Гопники тут не при чем, разные субкультуры. Более того, я не использую манеру общения из субкультур в айти.


Потому что коммиты я пишу лишь потому, что пустую строку оставлять нельзя. Я не опсиываю коммиты и они слушал для меня лишь сейвпойнтами. Я веду разработку один и не делаю форков. ПО этому не использую 99% гита. =)

Когда я начну делать проджект Mega публичным тогда я все сделаю как положено. ТО что ты говоришь это очевидно, но спасибо все ровно)

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

P.S.:
Я тебе скажу прямым текстом, раз ты не понимаешь.
Нам в фирму нужны люди, но я НИКОГДА не возьму такого как ты, потому что я не смогу с тобой работать и я не хочу постоянно объяснять начальству почему у нас ГОП-Инженер, из-за которого мы теряем клиентов.
Надеюсь я достаточно доходчиво объяснил почему тебе надо меняться.

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

yazonnile 22.06.2016 12:31

Так Максимаксимус уже уходил пару раз с форума.
Всех посылал и уходил. Потом банили его за весьма грубые оскорбления.
Снова вернулся?
Альтруизм из ушей прет, делиться своим поносом с людьми? :)

ORMjs 22.06.2016 17:48

Цитата:

Сообщение от nerv_
мы все уже >2 лет наблюдаем, как ты ее не исползуешь

уже год не использую


Цитата:

Сообщение от fancy
Нам в фирму нужны люди

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

Цитата:

Сообщение от fancy
у нас ГОП-Инженер, из-за которого мы теряем клиентов.

Инженер вообще не должен общаться с клиентами, этим должен заниматься отдел продаж. По крайней мере когда я основал веб студию Абиллана, у нас было так.

Цитата:

Сообщение от fancy
Надеюсь я достаточно доходчиво объяснил почему тебе надо меняться.

Что конкретно мне надо поменять?

Цитата:

Сообщение от fancy
Не ждет тебя никакой мега проект и успех, ты просто сопьешься к 35 годам потому что у тебя ничего не будет получаться из-за твоего отношения к людям и жизни.

У меня все получается что я задумал, я иду к своей целе уже 8-9 лет, и все получается идеально) Я хочу автоматизировать генерацию товаров и услуг и освободить людей от работы и денег. И все идет по плану). И я уже спился. вы просто проэцируете на меня свои цели и систему ценностей "устроица на работу, генерировать товары и услуги, выменивать их у других людей на их товары и услуги, использовать товары и услуги, умиреть" такая жизнь не по мне =) правда. Не понимаю с чего ты взял что у меня какие-то проблемы и что мне нужна помощь в чем то? Я феноминальный чепловек. Гений. У меня идеальный путь. И другие должны ему следовать. Меняться нужно не мне а остальным. Что у меня вполне неплохо получается делать.

Цитата:

Сообщение от yazonnile
своим поносом

Почему поносом? Какие недостатки?

Цитата:

Сообщение от nerv_
Только донести их до ORMjs вряд ли получится

Вот это верно, это как боговер ученому загоняет "вы увидите свет, дожлны принять" а он ему "о чем речь? какой свет ваще?" а другой священник подбегает "да че ты ему обьясняешь, он отправлен наукой, нет в нем души, не понять ему".

Ну тока тут отличие в том что он очевидности говорит, а боговеры чушь порят.

nerv_, то есть тот факт что я писатель а не читатель, не означает что мои взгляды не могут совпадать с егоными. в данном случае они в 100% совпали. Более того, я все намеренно и осознанно перенимаю у других людей, точнее не все а все хорошее, а все плохое (например табу на секс или на мат или на деление на страны) не перенимаю.

Я вам уже обьяснял что такое мемы и что 99% населения земли просто рабы матрицы, рабы культуры, рабы мемов. Я человек вне системы, вне матрицы. Я хорошие части хороших мемов беру, плохие части плохих мемов не беру. А вы все подряд берете. И когда я не схавал какой то бессмысленный или плохой мем, вы мне говорите "нууу твоя модель поведения отличается она плохая от того что отличается" чел, это у тебя плохая. все мои отличия это ХОРОГИЕ отличия. Например ругаться матом - ХОРОШО. Нет причимн ТАБУИРОВАТЬ МАТ. Мат это слова о сексе а секс у рабов под табу из за венеричесикх заболеваний в прошлом. Это мем такой которым тебя напискала культура и ты просто выполняешь его программу не думая своей головой. Потому что если бы думал, то ты бы определил что этот мем ошибочен. Так же ты бы определил что и мем оскорблений не верен, так как понижение социального статуса через перечисление социальных недостатков, не понижает социальынй статус, если недостатки не настоящие. и.т.п.

ЭТО ВАМ надо учиться у меня потому как я крайне образованный и просветленный человек. А не навязывать сови приметивные, логически не обоснованные и устарелые нормы марали. А вернее не свои а те которые вам матрица в голову вдолбила. Да так вдолбила, что они вам кажутся как будто бы это ВАШИ СВОИ ЛИЧНЫЕ мысли.

Ребят, вы не обижайтесь конечно, но не надо сравнивать себя и меня. У нас разные уровни. Лучше либу оцените что я вам подкинул =)


Часовой пояс GMT +3, время: 19:25.