Pull to refresh
60
0.1
Виктор@WVitek

Пользователь

Send message
Полагаю, для удобства телеуправления антропоморфным существом)

Фантазия на тему тетраэдра :)


В других размерах





У Максидома хотя бы текстовый поиск по каталогу более-менее адекватно работает, в отличие от сайта Леруа)
Читал книгу Девятаева в подростковом возрасте, чрезвычайно увлекательно написано (как мне тогда показалось).
Подвиг с большой буквы. И невероятное везение.
Всем книгу рекомендую.
Вчера словил глюк Яндекс.Маркета:
Что если бы Яндекс.Маркет объединили с AliExpress :-)
image

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

Мне довелось работать с базами замерных данных по объектам (суть те же временные ряды).
Наиболее актуальными видами запросов были следующие (как для одного ряда, так и для группы рядов):
  • выборка последнего значения по состоянию на момент времени, но не ранее заданного момента времени (фактически, выборка последнего значения в интервале);
  • выборка значений за временной период + последнего значения по состоянию на начало периода, но не ранее заданной даты.
Упомянутое дополнительное ограничение по времени при выборке последнего значения имеет смысл, когда слишком старые данные не актуальны и не нужны, и помогает базе не делать поиск глубоко в истории, что положительно сказывается на производительности.

У автора есть размышления не сей счёт или таких нюансов пока не касались?
А в чём ненормальность такого программирования?
На некоторых простых микроконтроллерах вытесняющую многозадачность по другому и не реализовать (доводилось такое делать для 80186).
«Сорвался» в обеденный перерыв, и сходил, купил)
Иду обратно и думаю, а вдруг скидка по «Хабрахабр» ещё актуальна была?
(подумал, что статья в чём-то про меня))
А «это», для «привлечения внимания» — пример скрипта на «компилируемом», поддерживающем «ленивость»/многопоточность/асинхронность псевдоязыке с синтаксисом, как у формул Excel (+небольшое количество «синтаксического сахара»).
Используется как DSL.
Недавно переведён с .Net 2.0 на .Net 4.5 (уж очень захотелось приобщиться к async/await вместо AsyncEnumerator)…
(
        Using("W.Expressions.FuncDefs_Excel, WExpr"),
        Using("W.Expressions.FuncDefs_Report, WExpr"),
        Using("W.Expressions.FuncDefs_Ora, WExprSql"),
	Using("W.Util.FuncDefs_Solver, WUtil"),
	Using("PalmCalcs.FuncDefs, PalmCalcs"),
	UseOraSqlFuncsFrom("Queries.sql").PrintLn(),
	let(nOraConnections, 4),
	let(oraConn, OraNewConnection(
		'user/pass@oraclesrv:1521/database'
		, nOraConnections
		, { 'ALTER SESSION SET CURSOR_SHARING = SIMILAR', 'ALTER SESSION SET NLS_TERRITORY = cis' }
	)),
	let(semaParQueries, Semaphore(nOraConnections)),
	PrintLn("WellStock('')"),
	let(wells, WellStock('')),
	let(WELL_ID_OISP, wells['WELL_ID_OISP']
		. Where(wells['SHOP_NAME']='ЦДНГ')
	),  
	let(AT_TIME__XT, DATEVALUE('2013-10-31')),
	let(outsPalm, {
		"SHOP_NAME", "OILFIELD_NAME", "WELL_NAME",
		"RESERVOIR_TEMPERATURE_OISP_C",
		"PERFTOP_DEPTH_MX",
		"PUMP_DEPTH_MX",
		"CASING_DIAMETER_MX_MM",
		"TUBING_DIAMETER_MX_MM",
		"BUFFER_PRESSURE_OISP_ATM",
		"RESERVOIR_PRESSURE_OISP_ATM",
		"LIQUID_WATERCUT_OISP",
		"GAS_VOLFACTOR_OISP",
		"LIQUID_VOLRATE_OISP",
		"BOTTOMHOLE_PRESSURE_OISP_ATM",
		"ANNULAR_PRESSURE_OISP_ATM",
		"DYNLEVEL_DEPTH_OISP",
		"STATLEVEL_DEPTH_OISP",
		"OILSEP_VISCOSITY_OISP",
		"WATER_VISCOSITY_OISP",
		"OIL_VOLFACTOR_OISP",
		"SATURATION_PRESSURE_OISP_ATM",
		"GAS_DENSITY_OISP_TPCM",
		"OILSEP_DENSITY_OISP_TPCM",
		"WATER_DENSITY_ANY_TPCM",
		"BOTTOMHOLE_PRESSURE_OPTWELL_ATM",
		"INTAKE_PRESSURE_OPTWELL_ATM",
		"INTAKE2_PRESSURE_OPTWELL_ATM",
		"OUTLET_PRESSURE_OPTWELL_ATM"
	}),
	let(test, {"WELL_ID_OISP","OILFIELD_NAME","WELL_NAME","TINCL_OBJ_OPTWELL"}),
	let(solution, FindSolutionExpr({}, outsPalm )),
	let(outFile, NewFileStreamWriter('Test_Solver.log')),
	let(msg, "Solution is: " & solution),
	PrintLn(msg),
	outFile.StreamWriterAppendText(msg),
        let(partMaxSize,1000),
	PartsOfLimitedSize(WELL_ID_OISP, partMaxSize)
	..let(parts),
	startTiming(),
        _For(
                ( let(n,COLUMNS(parts)), let(i,0) ),
                i<n,
                _EvalWithSemaphore( semaParQueries,
			let(WELL_ID_OISP, parts[i]),
			let(results, ExprToExecutable(solution)),
			_ForEach(r, results, r._ToStr()..StreamWriterAppendText(outFile) ),
			Print('.'),
                        let(i,i+1)
               )
        )
	.stopTiming(),
	outFile.StreamWriterAppendText(OraGetStatMsg()),
	outFile.StreamWriterClose(),
	'wells=' & COLUMNS(WELL_ID_OISP)
)
Оно компилируется в «дерево» вызовов функций, вычисляемых в заданном контексте.
Т.е., по факту, никакого нового кода не создаётся, лишь структуры данных, связывающие функции между собой через входы/выходы.
Больше всего похоже на "Шитый код".
А мне довелось делать скриптовый движок в одном проекте на базе .Net Framework 2.0,
синтаксис простейший — как у формул в Excel (собственно, в ячейках xls-документа и предполагалось записывать выражения),
но для удобства написания «невнутриэксельных» скриптов добавлены операторы:
* . (точка, передаёт левое выражение в качестве первого аргумента вызываемой справа функции);
* .. (двоеточие, аналогично, только вторым аргументом);
* а также объявлений массивов "{… }" и выборки по индексу "[n]".

Формируется «шитый» код с вызовом «пользовательских» функций (синхронные/асинхронные, с побочными эффектами и без, макрофункции, всё реализовано через вызовы функций), поддерживается «ленивость», «асинхронность» (на основе собственного «велосипеда» по мотивам шаблона AsyncEnumerator), «прозрачное» применение скалярных функций к IList-векторам (например, "{1,2,3}.sin()"). Язык безтиповый, все значения передаются как Object.
Все именованные значения вычисляются однократно и «лениво», константные выражения вычисляются при «компиляции», имеется базовая поддержка замыканий.

Из недостатков: .Net 2.0 (в 4-м можно было бы использовать встроенные возможности для реализации асинхронности), сложный код писать трудновато без интеллектуального редактора, также приходится ограничивать параллелизм семафорами, иначе память кушается много))

Изначально задумывался «движок» для построения отчётов/организации вычислений на основе шаблонов/алгоритмов, описанных в Excel-документе, без использования ПО Excel по следующему принципу: на основе Excel-шаблона внутрипрограммно формируется скрипт для построения отчёта, после чего «компилируется»/запускается, запрашивает требуемые параметры и делает отчёт/вычисления в фоновом режиме.

Пример «внешнего» скрипта:
(
	let(endTime, NOW()),
	let(begTime, endTime-366*3),
	let(strFmt, '{0}' & CHAR(9) & '{1}' & CHAR(9) & '{2}' & CHAR(13) & CHAR(10)),
	let(semaObj2Txt, Semaphore(256)),
	let(wells,
		ReadRaw(treeAction,'spr@all@full_well')
			.RawToFullWellTable()
			.SelectRows('fieldId=110001')
			.RowAsDict()
	),
	let(fLPV, func(well,paramInfo, LoadParamValues(treeAction, well.FullWellItemToWellPath(), paramInfo, begTime, endTime) )),
	_ForEach(
		paramInfo, ParamStorage(),
		(
			let(outFile, NewFileStreamWriter('Out\' & paramInfo & '.tsv')),
			outFile.StreamWriterAppendText('WellId' & CHAR(9) & 'Time' & CHAR(9) & 'Value'),
			_ForEach(
				well, wells,
				_EvalWithSemaphore
				(	semaObj2Txt,

					let( wellId, well['wellId'] ),
					fLPV(well, paramInfo) .. let(vector),
					IF(	AND( NotNull(vector), COLUMNS(vector)>0 ),
						(
							outFile.StreamWriterAppendText( _JoinStr(CHAR(13) & CHAR(10) & wellId & CHAR(9), vector) ),
							COLUMNS(vector)
						),
						0
					)
				)
			)
			.SUM()..let(sum),
			outFile.StreamWriterClose(),
			sum
		)
	)..let(result),
	{
		start(), 
		COLUMNS(result), SUM(ISNUMBER(result)), SUM(result), MAX(result), MIN(result), 
		_TimeOf(result).MAX()._TimeToStr(), _TimeOf(result).MIN()._TimeToStr(), 
		result.stop() 
	}
)
У меня в выходные 2 посылки прошли импорт:
одна, 28.02 отправленная из Китая, прошла таможню в Самаре;
другая, отправленная в середине марта из Нидерландов прошла импорт в Мск.
Довелось как-то читать документ «Уровень развития интеллекта супругов и удовлетворенность браком», так там по результатам исследований схожие выводы и сделаны)
Интересно, может на нём и Жолкож Цоммандер есть? )
AsyncEnumerator — «наше всё» уже 2+ года, тем более, что для его использования достаточно C# 2.0 и .Net Framework 2.0.
А так, конечно, хочется уже и без «костылей» асинхронный код в линейном виде писать.
А ещё правленая часть текста имеет шрифт пропорциональный вместо фиксированного…
В старших классах (начале 90-х) у меня была самодельная конструкция следующая:
* черенок хоккейной клюшки;
* кусок нихромовой «утюжной» проволоки, закреплённый вдоль черенка на регулируемой высоте;
* понижающий трансформатор с несколькими выводами вторичной обмотки (из отцовских запасов).
Баловался скорее, чем серьёзные вещи делал.
Например, по сечениям из журнала «Моделист-Конструктор» была собрана летающая(планирующая) моделька Ил-2 полностью из пенопласта длиной порядка 30см (до сих пор где-то картонные «выкройки» лежат).
Технология была следующая: на параллельные торцы куска пенопласта требуемой длины крепились две «выкройки»-сечения (например, секции крыла или фюзеляжа), по выкройкам, как по направляющим, проводилась раскалённая нихромовая нить (сложность только в том, чтобы вести её по обеим выкройкам синхронно, не допуская задержек, из-за которых могли образовываться «ямы» на местах локального перегрева пенопласта).
Доп. прочность деталям придавал тонкий поверхностный оплавившийся слой.
Торцы обрабатывались шкуркой и склеивались столярным клеем, в центроплан для усиления прочности были вставлены тонкие деревянные рейки.
При запусках модельки по квартире страдал нос (плющился)) и передняя кромка крыла. Самолётик был «убит» (обломались кончики крыльев, стабилизатора, киля) и «выпущен на свободу» в начале 2000-х до появления доступной цифровой фотографии и до осознания его дальнейшей ностальгической ценности)).

Information

Rating
4,075-th
Location
Уфа, Башкортостан(Башкирия), Россия
Date of birth
Registered
Activity