From ccc68b614f95944c72826bee2da282b1e2fd78db Mon Sep 17 00:00:00 2001 From: Alexander Nozik Date: Tue, 24 May 2022 21:39:01 +0300 Subject: [PATCH] Some fixes at masters --- build.gradle.kts | 11 ++- data/magprog/content/intro.md | 8 +- data/magprog/content/mentors/Oliinychenko.md | 2 +- data/magprog/content/mentors/Pantuev.md | 2 +- data/magprog/content/mentors/Zinoviev.md | 2 +- data/magprog/content/mentors/nizovtseva.md | 2 +- data/magprog/content/mentors/svetlichny.md | 2 +- data/magprog/content/partners.yaml | 21 +++-- data/magprog/content/team/Aivazov.md | 2 +- data/magprog/content/team/Muhina.md | 2 +- data/magprog/content/team/Nozik.md | 6 +- data/magprog/content/team/Svetlichnii.md | 3 - .../partners/npm-logo-no-text-white.png | Bin 0 -> 5691 bytes src/main/kotlin/ru/mipt/spc/Application.kt | 23 ++++- src/main/kotlin/ru/mipt/spc/master.kt | 89 +++++++++++------- .../space/kscience/snark/SnarkPlugin.kt | 18 ---- 16 files changed, 111 insertions(+), 82 deletions(-) create mode 100644 data/magprog/images/partners/npm-logo-no-text-white.png diff --git a/build.gradle.kts b/build.gradle.kts index ce4690d..09c35fd 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,4 +1,5 @@ import ru.mipt.npm.gradle.KScienceVersions +import java.time.LocalDateTime plugins { id("ru.mipt.npm.gradle.project") @@ -11,7 +12,7 @@ repositories { } group = "ru.mipt.npm" -version = "0.0.1-SNAPSHOT" +version = "0.1.0-SNAPSHOT" application { mainClass.set("io.ktor.server.netty.EngineMain") @@ -54,4 +55,12 @@ sourceSets { main { resources.srcDir(project.rootDir.resolve("data")) } +} + +//write build time in build to check outdated external data directory +tasks.getByName("processResources") { + doFirst { + val deployDate = LocalDateTime.now() + project.buildDir.resolve("resources/main/buildDate").writeText(deployDate.toString()) + } } \ No newline at end of file diff --git a/data/magprog/content/intro.md b/data/magprog/content/intro.md index ac775e8..d2df0dd 100644 --- a/data/magprog/content/intro.md +++ b/data/magprog/content/intro.md @@ -5,7 +5,7 @@ section_title: О программе language: ru --- -Магистерская программа МФТИ **"Научное программное обеспечение"** (старое название: **"Разработка и применение программного обеспечения в физических исследованиях"**) создана при поддержке двух школ МФТИ: Физтех-школы физики и исследований им. Ландау ([ЛФИ](https://mipt.ru/education/departments/lpr/)) и Физтех-школы прикладной математики и информатики ([ФПМИ](https://mipt.ru/education/departments/fpmi/)) и ряда академических и промышленных партнеров. В ее основе лежит взаимодействие студента и [научного руководителя](#mentors). +Магистерская программа МФТИ **"Научное программное обеспечение"** (старое название: **"Разработка и применение программного обеспечения в физических исследованиях"**) создана при поддержке двух школ МФТИ: Физтех-школы физики и исследований им. Ландау ([ЛФИ](https://mipt.ru/education/departments/lpr/)), Физтех-школы прикладной математики и информатики ([ФПМИ](https://mipt.ru/education/departments/fpmi/)) а также ряда академических и промышленных партнеров. В ее основе лежит взаимодействие студента и [научного руководителя](#mentors). Цель создания программы — объединение усилий ученых и программистов для разработки лучших компьютерных решений и применения этих решений в области фундаментальной и прикладной науки и инженерии. @@ -15,16 +15,22 @@ language: ru * нахождение оптимальной траектории для задач в георазведке; * разработка инструментов анализа данных для нефтяных компаний и количество прикладных учебных задач от реальных заказчиков постоянно растет. +
+ **Почему же** это направление так актуально? Существенная часть работы ученых так или иначе связана с компьютером. Компьютеры и программы используются на всех этапах экспериментального или теоретического исследования. Любой работе предшествует **компьютерное моделирование**, затем требуется **автоматизация сбора и хранения данных**, **анализ данных** и, наконец, **представление результатов**. На всех этих этапах нужны компьютеры и программное обеспечение. Качество программного обеспечения — ключевой фактор в исследованиях и разработках. Современная разработка программного обеспечения — это отдельная инженерная дисциплина, требующая опыта и погружения в технологию и соответствующие профессиональные сообщества. Несмотря на то, что современное программирование зародилось в научных исследованиях, с тех пор прошло много времени, и ученые во многих областях в среднем уже не могут похвастаться хорошими знаниями в этой области. Качество программного обеспечения в естественных науках низкое. Те же проблемы свойственны инженерной индустрии. +
+ **Зачем** для этого нужны ученые? Прошлые попытки поручить разработку программного обеспечения профессиональным программистам не увенчались успехом. Чтобы сформулировать задачу программисту, надо знать современные компьютерные технологии и понимать, как их лучше применять. +
+ **Зачем** все это программистам? Задачи, возникающие на стыке физики и программирования, на порядок интереснее тех, что ожидают инженера-программиста в повседневной рабочей жизни. Также работа с учеными — это хороший повод опробовать все самые свежие и экспериментальные технологии. Кроме того, опыт в моделировании, обработке данных и работе с приборами является бесценным в IT-среде. diff --git a/data/magprog/content/mentors/Oliinychenko.md b/data/magprog/content/mentors/Oliinychenko.md index 30b7d16..e66ecf8 100644 --- a/data/magprog/content/mentors/Oliinychenko.md +++ b/data/magprog/content/mentors/Oliinychenko.md @@ -1,6 +1,6 @@ --- content_type: magprog_mentor -name: Олийниченко Дмитрий Робертович +name: Дмитрий Робертович Олийниченко id: Oliinychenko photo: images/mentors/Oliinychenko.jpg language: ru diff --git a/data/magprog/content/mentors/Pantuev.md b/data/magprog/content/mentors/Pantuev.md index 5c18eaa..9ae7a0b 100644 --- a/data/magprog/content/mentors/Pantuev.md +++ b/data/magprog/content/mentors/Pantuev.md @@ -1,6 +1,6 @@ --- content_type: magprog_mentor -name: Пантуев Владислав Сергеевич +name: Владислав Сергеевич Пантуев id: Pantuev photo: images/mentors/Pantuev.jpg language: ru diff --git a/data/magprog/content/mentors/Zinoviev.md b/data/magprog/content/mentors/Zinoviev.md index 18ab63b..0ef7ad6 100644 --- a/data/magprog/content/mentors/Zinoviev.md +++ b/data/magprog/content/mentors/Zinoviev.md @@ -1,6 +1,6 @@ --- content_type: magprog_mentor -name: Зиновьев Алексей Викторович +name: Алексей Викторович Зиновьев id: Zinoviev photo: images/mentors/Zinoviev.jpg language: ru diff --git a/data/magprog/content/mentors/nizovtseva.md b/data/magprog/content/mentors/nizovtseva.md index 27eded8..4a1b63c 100644 --- a/data/magprog/content/mentors/nizovtseva.md +++ b/data/magprog/content/mentors/nizovtseva.md @@ -1,6 +1,6 @@ --- content_type: magprog_mentor -name: Низовцева Ирина Геннадьевна +name: Ирина Геннадьевна Низовцева id: Nizovtseva photo: images/mentors/Nizovtseva.jpg language: ru diff --git a/data/magprog/content/mentors/svetlichny.md b/data/magprog/content/mentors/svetlichny.md index 0ecc145..4dd4237 100644 --- a/data/magprog/content/mentors/svetlichny.md +++ b/data/magprog/content/mentors/svetlichny.md @@ -1,6 +1,6 @@ --- content_type: magprog_mentor -name: Светличный Александр +name: Александр Светличный id: Svetlichny photo: images/mentors/Svetlichny.jpg language: ru diff --git a/data/magprog/content/partners.yaml b/data/magprog/content/partners.yaml index dafa512..0ee2e12 100644 --- a/data/magprog/content/partners.yaml +++ b/data/magprog/content/partners.yaml @@ -1,25 +1,28 @@ title: Партнеры content: - title: ЛФИ МФТИ - link: https://mipt.ru/education/departments/lpr/ + link: "https://mipt.ru/education/departments/lpr/" logo: /images/partners/LPI.jpg - title: ФПМИ МФТИ - link: https://mipt.ru/education/departments/fpmi/ + link: "https://mipt.ru/education/departments/fpmi/" logo: /images/partners/FPMI.jpg + - title: MIPT-NPM + link: "https://npm.mipt.ru/" + logo: /images/partners/npm-logo-no-text-white.png - title: JetBrains Research (до 2022) - link: https://research.jetbrains.org/groups/npm/ + link: "https://research.jetbrains.org/groups/npm/" logo: /images/partners/JBR.png - title: Таврида Электрик - link: https://www.tavrida.com/ter/ + link: "https://www.tavrida.com/ter/" logo: /images/partners/Tavrida.png - title: ИЯИ РАН - link: https://www.inr.ru/ + link: "https://www.inr.ru/" logo: /images/partners/inr_logo.png - title: ИКИ РАН - link: http://www.iki.rssi.ru/ + link: "http://www.iki.rssi.ru/" logo: /images/partners/iki.jpg - title: ОИЯИ - link: https://bmn.jinr.ru/ + link: "https://bmn.jinr.ru/" logo: /images/partners/jinr.png # - title: ВШЭ # link: https://www.hse.ru/en/ @@ -28,8 +31,8 @@ content: # link: https://www.desy.de/research/cooperations__institutes/hzg/index_eng.html # logo: /images/partners/desy.svg - title: Тинькофф - link: https://fintech.tinkoff.ru/ + link: "https://fintech.tinkoff.ru/" logo: /images/partners/tink.jpg - title: ФИЦ Биотехнологии РАН - link: https://www.fbras.ru/ + link: "https://www.fbras.ru/" logo: /images/partners/biotech.png diff --git a/data/magprog/content/team/Aivazov.md b/data/magprog/content/team/Aivazov.md index c349aa9..fba4a54 100644 --- a/data/magprog/content/team/Aivazov.md +++ b/data/magprog/content/team/Aivazov.md @@ -6,4 +6,4 @@ order: 4 photo: images/team/Aivazov.jpg language: ru --- -**Консультант от ФПМИ** +Консультант от ФПМИ diff --git a/data/magprog/content/team/Muhina.md b/data/magprog/content/team/Muhina.md index e5a83e4..850458d 100644 --- a/data/magprog/content/team/Muhina.md +++ b/data/magprog/content/team/Muhina.md @@ -7,4 +7,4 @@ photo: images/team/muhina.jpg language: ru --- -Менеджер образовательных проектов. \ No newline at end of file +Менеджер образовательных проектов \ No newline at end of file diff --git a/data/magprog/content/team/Nozik.md b/data/magprog/content/team/Nozik.md index 418cd03..1fbe7ce 100644 --- a/data/magprog/content/team/Nozik.md +++ b/data/magprog/content/team/Nozik.md @@ -8,8 +8,4 @@ language: ru --- **Руководитель программы** -Заместитель заведующего ЛМЯФЭ МФТИ. - -Руководитель направления в JetBrains Research. - -Преподаватель общей физики, статистических методов и программирования на Kotlin в МФТИ. \ No newline at end of file +Директор центра научного программирования \ No newline at end of file diff --git a/data/magprog/content/team/Svetlichnii.md b/data/magprog/content/team/Svetlichnii.md index 40f7b32..96bc56b 100644 --- a/data/magprog/content/team/Svetlichnii.md +++ b/data/magprog/content/team/Svetlichnii.md @@ -9,6 +9,3 @@ language: ru **Заместитель руководителя** -Преподаватель кафедры общей физики МФТИ. - -Аспирант ИЯИ РАН. diff --git a/data/magprog/images/partners/npm-logo-no-text-white.png b/data/magprog/images/partners/npm-logo-no-text-white.png new file mode 100644 index 0000000000000000000000000000000000000000..6e41233a42b1fa1e5092439adc25534557e52563 GIT binary patch literal 5691 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 Unit) { style = CssBuilder().block().toString() @@ -42,6 +40,9 @@ private fun Application.resolveData(uri: URI, targetPath: Path): Path { return targetPath } +const val DEPLOY_DATE_FILE = "deployDate" +const val BUILD_DATE_FILE = "buildDate" + @Suppress("unused") fun Application.spcModule() { val context = Context("spc-site") { @@ -50,6 +51,20 @@ fun Application.spcModule() { val dataPath = Path.of("data") + // Clear data directory if it is outdated + val deployDate = dataPath.resolve(DEPLOY_DATE_FILE).takeIf { it.exists() } + ?.readText()?.let { LocalDateTime.parse(it) } + val buildDate = javaClass.getResource(BUILD_DATE_FILE)?.readText()?.let { LocalDateTime.parse(it) } + + if (deployDate != null && buildDate != null && buildDate.isAfter(deployDate)) { + log.info("Outdated data. Resetting data directory.") + dataPath.deleteIfExists() + + //Writing deploy date file + dataPath.createDirectories() + dataPath.resolve(DEPLOY_DATE_FILE).writeText(LocalDateTime.now().toString()) + } + val homeDataPath = resolveData( javaClass.getResource("/home")!!.toURI(), dataPath / "home" diff --git a/src/main/kotlin/ru/mipt/spc/master.kt b/src/main/kotlin/ru/mipt/spc/master.kt index bad772a..abcae5f 100644 --- a/src/main/kotlin/ru/mipt/spc/master.kt +++ b/src/main/kotlin/ru/mipt/spc/master.kt @@ -128,34 +128,55 @@ context(PageContext) private fun FlowContent.team() { val team = findByType("magprog_team").map { Person(it.value) }.sortedBy { it.order } div("inner") { - h2 { - +"Команда" - } - } - team.forEach { member -> - section { - id = member.id - a(classes = "image", href = resolveRef("mentor-${member.id}")) { - member.photo?.let { photoPath -> - img( - src = resolveRef(photoPath), - alt = member.name - ) { - attributes["data-position"] = "center center" + h2 { +"Команда" } + div("features") { + team.forEach { member -> + section { + a { + val imagePath = member.photo?.let { resolveRef(it) } + img( + classes = "icon major", + src = imagePath, + alt = imagePath + ) { + h3 { +member.name } + htmlData(member.data) + } } } } + } + } - div("content") { - div("inner") { - h3 { - a(href = "#team_${member.id}") { +member.name } - } - htmlData(member) - } - } - } - } +// div("inner") { +// h2 { +// +"Команда" +// } +// } +// team.forEach { member -> +// section { +// id = member.id +// a(classes = "image") { +// member.photo?.let { photoPath -> +// img( +// src = resolveRef(photoPath), +// alt = member.name +// ) { +// attributes["data-position"] = "center center" +// } +// } +// } +// +// div("content") { +// div("inner") { +// h3 { +// a(href = "#team_${member.id}") { +member.name } +// } +// htmlData(member) +// } +// } +// } +// } } context(PageContext) private fun FlowContent.mentors() { @@ -195,6 +216,10 @@ context(PageContext) private fun FlowContent.mentors() { } } +context(PageContext) internal fun FlowContent.contacts() { + +} + context(PageContext) internal fun HTML.magProgHead(title: String) { head { @@ -273,7 +298,7 @@ internal fun Application.spcMaster(context: Context, dataPath: Path, prefix: Str routing { route(prefix) { with(magProgPageContext) { - static{ + static { files(dataPath.resolve("assets").toFile()) static("images") { @@ -309,14 +334,10 @@ internal fun Application.spcMaster(context: Context, dataPath: Path, prefix: Str programSection() }, wrapSection(resolveHtml(ENROLL_PATH)!!, "enroll"), - MagProgSection( - id = "team", - title = "Команда", - style = "wrapper style2 spotlights", - ) { + wrapSection(id = "contacts", title = "Контакты") { + htmlData(resolveHtml(CONTACTS_PATH)!!) team() - }, - wrapSection(resolveHtml(CONTACTS_PATH)!!, "contacts"), + } ) magProgHead("Магистратура \"Научное программирование\"") body("is-preload magprog-body") { @@ -367,13 +388,13 @@ internal fun Application.spcMaster(context: Context, dataPath: Path, prefix: Str href = "$homeRef#mentors" +"Научные руководители" } - nav() { + nav{ ul { mentors.forEach { li { a { href = resolveRef(it.mentorPageId) - +it.name + +it.name.substringAfterLast(" ") } } } diff --git a/src/main/kotlin/space/kscience/snark/SnarkPlugin.kt b/src/main/kotlin/space/kscience/snark/SnarkPlugin.kt index 54f1b92..b06ae73 100644 --- a/src/main/kotlin/space/kscience/snark/SnarkPlugin.kt +++ b/src/main/kotlin/space/kscience/snark/SnarkPlugin.kt @@ -68,24 +68,6 @@ class SnarkPlugin : AbstractPlugin() { context.gather(SnarkParser.TYPE, true) } -// val parseAction: Action = Action.map { -// val parser: SnarkParser<*>? = parsers.values.filter { parser -> -// parser.contentType.toString() == meta["contentType"].string || -// meta[META_FILE_EXTENSION_KEY].string in parser.fileExtensions -// }.maxByOrNull { -// it.priority -// } -// -// //ensure that final type is correct -// if (parser == null) { -// logger.warn { "The parser is not found for data with meta $meta" } -// result { it } -// } else { -// result(parser.resultType) { bytes -> -// parser.parse(bytes, meta) -// } -// } -// } fun readDirectory(path: Path): DataTree = io.readDataDirectory(path) { dataPath, meta -> val fileExtension = meta[FileData.META_FILE_EXTENSION_KEY].string ?: dataPath.extension