LINUX.ORG.RU

Сообщения den73

 

jquery ajax combobox посоветуйте ☑️

Комбобокс неисчерпаем, как атом, вот пруфлинк:

https://habr.com/ru/post/342184/

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

Чтобы он был достаточно современным (работал и на планшетах).

И jquery.

===================================

Пока выбрал вот этот ответ:

jquery ajax combobox посоветуйте (комментарий)

 , ,

den73
()

возможна ли надёжная передача сообщений?

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

Есть два субъекта. Допустим, я и мой банк. Мне надо перевести деньги. Как сделать это надёжно, при условии, что у банка может упасть база, что моя программа клиент-банк может упасть, и что связь тоже может упасть.

Я нагуглил теорему CAP (латиницей), которая говорит, что вообще говоря, это можно сделать только ценой отсутствия гарантии обслуживания. Но это и не теорема, а так, наблюдение, да и мало ли что пишут в Википедии? Я уже не раз сталкивался с тем, что там пишут всякий бред.

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

В конечном итоге я хочу, чтобы было три знания.

  • Известно, сколько денег у меня есть.
  • Я знаю, что эти сведения у меня и у банка совпадают
  • Банк знает, что эти сведения у меня и у банка совпадают

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

Даже в этом случае в конце любого алгоритма возникает порочный круг из «я знаю, что ты знаешь, что я знаю», который при отсутствии надёжного канала никогда не завершается.

Ясно, что я где-то туплю, но не понимаю, где.

 ,

den73
()

можно поругать мою поделку - регистрация, аутентификация, сессии

 , , ,

den73
()

Как культурно организовать в продакшене работу системы на VPS/Golang/Postgresql? ☑️

Упражнение по голангу почти доделано, настала пора деплоя. На моём хостинге VPS сервер с debian 9.

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

Я нашёл https://habr.com/ru/post/129207/, его там разругали за велосипедостроение, он огрызался, что системы бывают разные и не по всякой улице нужный автобус ходит.

Вот эта тема Как управлять демонами в убунту? подтверждает наличие культурных проблем при переходе между дистрибутивами линукса.

Соответственно, вот такой вопрос: как всё это настраивается (где взять образец для подражания или какой ман почитать).

Уже посоветовали man daemon и man service. Дальше что?

 ,

den73
()

regex для букв (golang)

Искал и не нашёл регэксп, к-рый матчит буквы (в т.ч. неанглийские) и пробелы, но не что-то остальное. SO думает вот это, https://stackoverflow.com/questions/3009993/regex-what-would-be-regex-for-mat... , но там прямого и готового ответа нет. Правильно ли так?

^[a-zA-Z\p{L} ]+$

Соответственно, вот код на голанге:

package main

import (
	"fmt"
	"regexp"
)

func main() {
	regex := `^[a-zA-Z\p{L} ]+$`
	fmt.Println(regex)
	matched, err := regexp.Match(regex, []byte(`ЯРeéèêë世界`))
	fmt.Println(matched, err)

}
Проверено, что
Не матчатся.

 ,

den73
()

golang - является ли os.Exit потокобезопасной?

На стековерфлоу мой вопрос заминусовали, дебилы. Что скажет ЛОР?

 ,

den73
()

микросервисная архитектура - ура!

Читаю статью в Википедии про микросервисную архитектуру. Рад за пацанов: во-первых, теперь на ту же задачу можно потратить x1000 вычислительных мощностей. Даёшь докер-контейнеры на AWS инстансах! Во-вторых, поскольку главного в системе нет, то понять, что происходит и почему ничего не работает, становится крайне нетривиальной задачей. Т.е. огромная наукоёмкость, усложнение самих микросервисов (они ведь должны подробно отчитываться о своём состоянии, иначе невозможно сделать мониторинг и понять, работает ли система или нет). Я уж не говорю о том, что всё это разворачивается в ЦОДах, соответственно, понятно, кому выгодно: Амазону и прочим поставщикам облачных услуг. А наживку бизнесу подкинули в виде «независимости команд, занимающихся разными частями», типа разделяй и властвуй. Прямо настроение улучшилось, какой грубый развод и как хорошо прокатывает. Особенно порадовало «исключение по возможности унаследованного кода».

Но мне нужно найти работу. И я обнаружил, что в моём приложении аж целых две базы данных образовались совершенно естественным путём. Одна - это база безопасности пользователей (хранит, например, пароли). Вторая - это база контента - я хочу иметь на сайте кнопочку «скачать базу». Именно её и буду раздавать.

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

 ,

den73
()

почему голанг - это кул ☑️

Голенгу никогда не догнать сишечку, потому что в нём нельзя циклические зависимости. В Си можно, в Паскале можно. Это, наверное, самая плохая новость для меня за всё время его изучения.

 

den73
()

Какой выдумать или создать формат для конфигов? ☑️

Хочу для своего упражнения использовать yaml. Вроде голанг его умеет читать и писать. Что говорит на эту тему духовенство? Уместен ли такой формат или же лучше взять что-то другое?

json не хочу по той причине, что в него нельзя вставлять комментарии, xml слишком многословен.

==========================================

Решение: взят обычный json, который читает - пишет структуру. Для комментария в структуре предусмотрено специальное поле Comment. Это не так удобно, зато гомоиконно.

Если в конфиге задано поле, отсутствующее в структуре, например, если название поля написано с опечаткой, то будет ошибка чтения конфига. Это важно, поскольку толерантность многих программ к опечаткам в конфигах приводит к тому, что можно часами сидеть и искать ответ на вопрос «ну почему же это дерьмо не работает»?

Код такой:

package main

import (
	"strings"; "fmt"; "os"
	"encoding/json"
	"io/ioutil"
	// "github.com/flynn/json5"
)

type SecretConfigDataStruct struct {
	Comment       string
	RecieverEMail string
	SMTPServer    string
	SMTPUser      string
	SMTPPassword  string
	SenderEMail   string }

var SecretConfigData SecretConfigDataStruct

func (sds *SecretConfigDataStruct) SaveToFile(filename string) (err error) {
	var text []byte
	text, err = json.MarshalIndent(sds,""," ")
	if err != nil { return	}	
	err = ioutil.WriteFile(filename, text, 0600)
	return }

const ConfigFileName = "secret-data.config.json"

// for development
func saveSecretConfigDataExample() {
	sds := SecretConfigDataStruct{
		Comment:       "Example config file. Copy this one to the secret-data.config.json and edit",
		SenderEMail:   "den@example.net",
		RecieverEMail: "world@example.net",
		SMTPServer:    "smtp.example.net",
		SMTPUser:      "Кирилл",
		SMTPPassword:  "bla-bla-bla"}
	err := sds.SaveToFile(ConfigFileName + ".example")
	if err != nil {	panic(err)	}}

func loadSecretConfigData() (err error) {
	sds := &SecretConfigData
	fn := ConfigFileName
	if _, err = os.Stat(fn); os.IsNotExist(err) {
		fmt.Printf("No config file %s found. Create one by copying from %s.example\n",
			fn, fn)
		return	}
	var bytes []byte
	bytes, err = ioutil.ReadFile(fn)
	if err != nil {
		fmt.Printf("Unable to read config %s\n", fn)
		return	}
		dec := json.NewDecoder(strings.NewReader(string(bytes)))
		dec.DisallowUnknownFields() 
		err = dec.Decode(sds)
	if err != nil {
		fmt.Printf("Error reading config file %s: %#v\n", fn, err)
		return	}
	fmt.Printf("playWithSecretConfigData returned %#v\n", sds)
	return }

 , , ,

den73
()

нашёл сервис для поиска поддерживаемых форков на github

http://forked.yannick.io

Заходишь туда, забиваешь имя репозитория, например, mleibman/SlickGrid и тебе показывают табличку, в которой достаточно ясно, какие форки поддерживаются. До этого сервиса я смотрел сеть форков, её нужно было отлистать направо (для этого, правда, есть горячая клавиша) и далее по виду сети как-то угадывать, тыкаться в каждый и т.п.

А можно сразу задать репозиторий в URL, только github.com заменить на forked.yannick.io

http://forked.yannick.io/mleibman/SlickGrid

 ,

den73
()

golang - не хочу возвращать err, хочу паниковать! ☑️

Какая-то секта с этими err. Код распухает в несколько раз. Идея с defer выглядит довольно здравой - я в своё время делал такой defer для 1C и для Delphi. Но паника лучше, чем возврат err-ов. Таковой возврат ничего не упрощает. Когда выпадает исключение, сразу виден весь стек. Сгенерированный err не показывает места своего возникновения, т.е. с помощью брекпойнтов нужно много итераций, чтобы локализовать ошибку. А на fatalpanic есть чуть ли не встроенный брекпойнт, во всяком случае, у меня на fatalpanic отладка сама по себе останавливается.

Кроме того, разбор err после каждого вызова офигенно многословен, код распухает буквально в разы.

Я собираюсь попробовать в своих упражнениях максимально использовать панику. Труъ голангисты, разубедите!

 , , обработка ошибок

den73
()

неуникальный пользователь - как обработать нарушение уникальности ключа ☑️

Хочу запилить для упражнения систему личного кабинета на go+postgresql. Нормальной пока не нашёл, посему велосипед.

Вопрос такой. При попытке регистрации с дублирующимся именем пользователя E-mail я буду пытаться сделать insert в базу. При наличии дубликата возникнет исключение. Я хочу сделать следующее: написать хранимку, которая перехватывает такое исключение, определяет ключ и таблицу, в которых оно случилось, и уже на уровне хранимки генерирует тот текст, который будет показан конечному пользователю.

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

Но я знаю, что есть идеология «база данных - это только хранилище данных, никаких триггеров быть не должно». Насчёт хранимок я жёсткого запрета не слышал, но в случае ORM оно как бы по построению так получается.

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

Но пока этот момент не наступил, зачем о нём думать?

==================================================

Решение: выяснилось, что sqlx предоставляет достаточно инфы (имя таблицы, имя констрейнта) в ошибке, а при конфликте между транзакациями ошибка тоже указывает на нарушенное ограничение уникального ключа. Так что нет нужды делать хранимки (пока что). Вопрос про шардинг не решён, но его мы и не пытались решить.

 , ,

den73
()

питонизируем си, js и иже с ними ☑️

Когда я изобретал «Яр», я думал про синтаксис. С одной стороны, всем хорош Питон: в нём минимум лишнего. С другой, достаточно случайно задеть пробел и строчка кода втянется внутрь цикла или ветвления. Т.е. надёжность такого синтаксиса плохая. Как же скрестить коня и трепетную лань? А очень просто - нужно всего лишь поменять стиль отступов в Си-образных языках, и получится вот что:

function showTableStructure() {
  if (name.length == 0) {
    alert("Please select a table!");
    return;  }

  getTableStructure(name, { type: getCurrentObject().type }, 
   function(data) {
    buildTable(data);
    $("#results").addClass("no-crop");});}

Налицо питонячья компактность и при этом сишная надёжность. Но стало опять похоже на лисп...

 , ,

den73
()

golang - где брать инфраструктуру

Хочу запилить «рабочие заметки» и прочую хрень для учебных целей на голанге. Нужны блоки регистрации по E-mail, контроля доступа, администрирование пользователей, сессий, и всё это должно быть уже в готовом виде. Не писать же это с нуля в XXI веке? Вопрос - где это берут? Я посмотрел пару туториалов, но они на то и туториалы, они показывают как делать, но делать надо самому.

Я пока нашёл вот что:

https://github.com/qor/qor - как я понял, они переписали с Руби. Про Руби я один раз читал, что там хронически не дружат со словом «качество», и что это вообще «фейк-технология» и от неё надо держаться на безопасном расстоянии. Что посоветуете, стоит ли связываться?

https://github.com/dionyself/golang-cms - проект одного человека, вдохновлённого примером Django. Во многом недопилен и пре-альфа.

http://www.gorillatoolkit.org - страшное название, страшный сайт, страшная картинка. Хотя по сути мне сказать нечего.

Что посоветуете?

 ,

den73
()

ищется учебный компилятор/линкер

Ищется компилятор и линкер простого языка в машинный код для учебных целей. Сейчас копаюсь с Обероном КП (тж известен, как blackboxcomponentbuilder), но он написан, по моим понятиям, достаточно плохо - оптимизирован под однопроходность и ещё есть ряд проблем. Из его плюсов - в нём есть горячая замена модулей и динамическая загрузка, компилятор и компоновщик встроены прямо в рантайм, достаточно мощная интроспекция, наличие безопасных и опасных примитивов, сборка мусора, загрузка библиотек, написанных на иных языках, отладчик.

Я думаю, что скорее всего аналогов у него нет и искать безполезно, но вдруг что-то подобное всё же есть.

 blackboxcomponentbuilder, , , ,

den73
()

символ может быть функцией, переменной, классом. Как называется эта классификация? ☑️

В BlackBoxComponentBuilder это написано так (почти все комментарии - мои)

  (* object modes *)
  (** Скорее всего, это надо понимать как 
     "класс данного именованного идентификатора" в тексте, 
     или "класс сущности, обозначаемой идентификатором"
     Назовём «части речи» или «чр» "чр" ПОНЯТИЕ(чр) *)
  Var(*чр параметр по значению*) = 1 (* Параметр без ключевого слово. Дальше неясно: Переменная? *);
  VarPar(*чр параметр по ссылке*) = 2 (* Var, In, Out параметр *); 
  Con = 3 (* ? Объявление константы или имя объявленной константы *);
  Fld = 4 (* ? Поле записи *); 
  Typ = 5 (* Определение типа *); 
  LProc = 6 (* Определение процедуры (не метода) *); 
  XProc = 7 (* ? Экспортируемая процедура *);
  SProc = 8 (* Системная процедура, созданная с помощью НяФс.EnterProc *); 
  CProc = 9 (* Процедура, заданная в машинном коде, см. НяМ.CProcFlag *);
  IProc = 10 (* Обработчики прерываний *); 
  Mod(*чр модуль*) = 11 (* Модуль *); 
  (* Head = 12;  - не используется в этом файле *)
  TProc(*чр метод*) = 13 (* Метод? *); 
  Attr(*чр атрибут*) = 20 (* Атрибут, например, ABSTRACT, LIMITED, EMPTY, EXTENSIBLE *);

Не класс, не тип, не часть речи, не член предложение. Есть ли какое-то официальное название?

 , ,

den73
()

как называются неявные действия, создаваемые при присваивании строк в языках высокого уровня? ☑️

В С++ можно определять оператор = для своих типов.

В Паскале его определить нельзя, но компилятор для некоторых типов сам вставляет в каждое присваивание какой-то дополнительный ad hoc кусок кода.

Например, в Delphi при присваивании интерфейсов вставляется код увеличения счётчика ссылок.

Как правильно и обобщённо назвать этот код, независимо от конкретного типа? У меня только маршалинг всплывает в памяти, но это явно не оно.

Ещё варианты - «обработка присваивания», «особая обработка присваивания», но всё это как-то недостаточно выразительно. Ваши варианты.

 перегрузка операций, ,

den73
()

где остальные 93 миллиона проектов github в google big query? ☑️

Играю в данные github в google big query, и запрос

SELECT count (distinct repo_name) FROM [bigquery-public-data:github_repos.commits]
вернул 3 миллиона. И среди них нет, например, sbcl/sbcl .

Заявляется вот тут https://github.com/about , что сейчас на github 96 миллионов репов. Допустим, сколько-то закрытых. Но явно не 93 закрытых.

Можно как-то за разумные деньги получить запрос к коммитам? Я ищу коммиты на русском языке. Я пробовал API, сейчас не помню, но вроде там получалось, что надо выкачивать весь репозиторий, чтобы найти такие коммиты. Я правильно понимаю, что статьи типа этой врут в заголовке?

Выборка здесь: https://gitlab.com/budden/repozitorii-xegithub-xrs-russkimi-kommitami

 github bigquery

den73
()

защищает ли эльбрус от heartbleed?

Я смутно понял, что там какая-то аппаратная защита от чтения за пределами массива. Не очень понимаю, как это соотносится с семантикой Си, поэтому просто спрашиваю.

Описание ошибки - здесь: https://www.theregister.co.uk/2014/04/09/heartbleed_explained/

 ,

den73
()

была ли astra linux подвержена heartbleed?

Попытался погуглить, слёту не нашёл. Если можно, пруфлинк.

 ,

den73
()

RSS подписка на новые темы