diff --git a/data/home/content/consulting.md b/data/home/content/consulting.md deleted file mode 100644 index ef8054c..0000000 --- a/data/home/content/consulting.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -type: page -title: Consulting -language: en ---- - -## We do - -The centre provides a number of commercial services: -* Developing analysis algorithms and platforms for various scientific and industrial application. -* Scientific expert activity (analyzing existing software, proposing ways to improve it). -* Architecture for scientific applications. -* Scientific open source project development and support. - -
- -## How our work is different - -Scientific software is different. You can't just make it by requirements because creating requirements is a major part of the job. - -We work together with a customer in a tight collaboration to better understand the problem and provide the best way to solve it. We do research. Our team consist not of programmers, but of scientists so when deep understanding is important, it is our work. - -On the other hand, our team have a lot of expertise in industrial programming, so we do not do only research code in notebooks, we provide **MVP** or **product** grade development. - -
- -## Our limitations - -Our work is focused on research software. We do not have facilities to provide full-scale industrial development and deployment. But we have qualification and desire to work with technical specialists inside companies to integrate our research expertise with company industrial capabilities. - -
- -## How to start? - -Please contact us via email below. We will discuss your problem for free and tell you if we can do it and how much will it cost. Since we do research, each task needs individual approach and estimation. We provide discounts for open research and open source software development. - -email: research@sciprog.center \ No newline at end of file diff --git a/data/home/content/consulting/development.md b/data/home/content/consulting/development.md new file mode 100644 index 0000000..bf1c917 --- /dev/null +++ b/data/home/content/consulting/development.md @@ -0,0 +1,16 @@ +--- +type: page +title: Development +language: en +--- + +## Infrastructure for NICA project + +Together with [mipt-npm](https://npm.mipt.ru) laboratory we are working on developing infrastructure services for [NICA](https://nica.jinr.ru/) project. Those services include: +* Web-based data visualization. +* Web services for supercomputer task execution scenarios. +* Big data access and indexing services. + +## Controls systems integration for [BabyIAXO](https://iaxo.desy.de/) experiment + +Integration of different SCADA systems and development of device servers. \ No newline at end of file diff --git a/data/home/content/consulting/expert.md b/data/home/content/consulting/expert.md new file mode 100644 index 0000000..a437708 --- /dev/null +++ b/data/home/content/consulting/expert.md @@ -0,0 +1,14 @@ +--- +type: page +title: Expert activity +language: en +--- + +## Software design consultations for Tavrida Electric + +Design of SCADA system, asynchronous message passing and consultation on Kotlin language. + + +## Library and framework design for SkolTech + +Design of libraries and frameworks for applied research (machine learning). \ No newline at end of file diff --git a/data/home/content/consulting/index.md b/data/home/content/consulting/index.md new file mode 100644 index 0000000..77a5548 --- /dev/null +++ b/data/home/content/consulting/index.md @@ -0,0 +1,73 @@ +--- +type: page +title: Consulting +language: en +--- + +## Where does science begin? + +In recent years, the rate of introduction of scientific developments into the industrial and even domestic spheres has accelerated significantly. No more waiting for many years before what was the cutting edge of science is put into practice. Such a rapid introduction also imposes its own limitations - close cooperation between scientists and industry became quite important. + +In any industry, and especially in the science-intensive one, a clear technical requirements are of great importance. In order to do proper technical requirements one needs to have extensive knowledge. Our team includes specialists engaged in research in a variety of scientific areas - from elementary particle physics to biotechnology and computer science. This makes it easy for our experienced, highly qualified specialists to find the optimal solution even in the subject area. Regardless of the subject area, we work closely with the customer to better understand the task and its full-fledged solution. + +Our research, which primarily includes open source projects, has already been appreciated by the international scientific community. + +## We do + +
+
+ + + +
+

Research

+

Analytics, prototyping and research for fundamental science and industry.

+
+
+
+ + + +
+

Expert activity

+

Analysis and improvement of existing scientific software and projects.

+
+
+
+ + + +
+

Architecture

+

Design the architecture for scientific and technological applications.

+
+
+
+ + + +
+

Development

+

The development and support of open-source and in-house solutions( libraries, frameworks and end-user application).

+
+
+
+ +
+ +## How our team works + +The primary feature of our work is research. We do not just do what customer tells us to do. We conduct a full-scale research and devise a way (algorithm, technology, etc), which would produce the best results. + +Our team is deeply engaged in [education activity](/magprog). It allows us to invite the most promising young researchers and developers to work with us both on part-time and full-time basis and get a constant feedback on new technologies and methods. The connection to fundamental science allows to be aware of the latest technological and methodical advances. + +Another unique feature of our work is that our team have experience both in research and industrial IT. That means that we not only produce "research code" and prototypes, but also able to provide **MVP** or even small-scale **product** development. + +
+ + +## How to start? + +Please contact us via email below. We will discuss your problem for free and tell you if we can do it and how much will it cost. Since we do research, each task needs individual approach and estimation. We provide discounts for open research and open source software development. + +email: research@sciprog.center \ No newline at end of file diff --git a/data/home/content/consulting/research.md b/data/home/content/consulting/research.md new file mode 100644 index 0000000..36a2ca1 --- /dev/null +++ b/data/home/content/consulting/research.md @@ -0,0 +1,13 @@ +--- +type: page +title: Research +language: en +--- + +## Analysis of oil wells monitoring data for Aramco Innovations + +Classical analysis of temperature data from simulation and real-life measurements. Full-cycle research from technical requirements and scientific overview to software integration. + +## Public and fundamental research + +See more at [research page](/research). \ No newline at end of file diff --git a/data/magprog/content/enroll.md b/data/magprog/content/enroll.md index a01aa25..8ad055e 100644 --- a/data/magprog/content/enroll.md +++ b/data/magprog/content/enroll.md @@ -7,7 +7,7 @@ language: ru Чтобы принять участие в программе, необходимо: * заполнить **[анкету](https://docs.google.com/forms/d/e/1FAIpQLSf9w0zxHY90zI5Mze5XRKHLO7gxa__bro8PDC2PlwsPfcMkfw/viewform?usp=sf_link)**. В анкете надо указать одного или нескольких научных руководителей, с которыми вы бы хотели работать; * **до 30 июня** пройти собеседование с научными руководителями и согласовать предполагаемый план обучения; -* подать документы в магистратуру МФТИ согласно [правилам поступления](https://pk.mipt.ru/master/) (направление **ЛФИ "Математика и физика"** или **ФПМИ "Информатика"**). Если есть соглашение с научным руководителем, но не удалось пройти по конкурсу, то обучение с большой вероятностью будет оплачено нашими партнерами. +* подать документы в магистратуру МФТИ согласно [правилам поступления](https://pk.mipt.ru/master/) (направление **ЛФИ "Прикладная математика и физика"**, **ЛФИ "Ядерная физика и технологии"** или **ФПМИ "Информатика и вычислительная техника"**). Если есть соглашение с научным руководителем, но не удалось пройти по конкурсу, то обучение с большой вероятностью будет оплачено нашими партнерами. ВАЖНО: предварительное согласование с научным руководителем является **обязательным** для обучения в вузе. diff --git a/data/magprog/content/intro.md b/data/magprog/content/intro.md index d2df0dd..9d8e2ad 100644 --- a/data/magprog/content/intro.md +++ b/data/magprog/content/intro.md @@ -5,6 +5,9 @@ section_title: О программе language: ru --- + + + Магистерская программа МФТИ **"Научное программное обеспечение"** (старое название: **"Разработка и применение программного обеспечения в физических исследованиях"**) создана при поддержке двух школ МФТИ: Физтех-школы физики и исследований им. Ландау ([ЛФИ](https://mipt.ru/education/departments/lpr/)), Физтех-школы прикладной математики и информатики ([ФПМИ](https://mipt.ru/education/departments/fpmi/)) а также ряда академических и промышленных партнеров. В ее основе лежит взаимодействие студента и [научного руководителя](#mentors). Цель создания программы — объединение усилий ученых и программистов для разработки лучших компьютерных решений и применения этих решений в области фундаментальной и прикладной науки и инженерии. diff --git a/src/main/kotlin/ru/mipt/spc/master.kt b/src/main/kotlin/ru/mipt/spc/master.kt index 0a2b704..df846d7 100644 --- a/src/main/kotlin/ru/mipt/spc/master.kt +++ b/src/main/kotlin/ru/mipt/spc/master.kt @@ -349,6 +349,14 @@ internal fun Application.spcMaster(context: Context, dataPath: Path, prefix: Str div("inner") { nav { ul { + li { + a(href = "/"){ + i("fa fa-home") { + attributes["aria-hidden"] = "true" + } + +"SPC" + } + } sections.forEach { section -> li { a(href = "#${section.id}") { diff --git a/src/main/kotlin/ru/mipt/spc/spcHome.kt b/src/main/kotlin/ru/mipt/spc/spcHome.kt index b5304bf..16c169d 100644 --- a/src/main/kotlin/ru/mipt/spc/spcHome.kt +++ b/src/main/kotlin/ru/mipt/spc/spcHome.kt @@ -11,11 +11,12 @@ import io.ktor.server.routing.* import kotlinx.html.* import space.kscience.dataforge.context.Context import space.kscience.dataforge.context.fetch +import space.kscience.dataforge.data.filterByType +import space.kscience.dataforge.data.forEach import space.kscience.dataforge.meta.Meta import space.kscience.dataforge.meta.get import space.kscience.dataforge.meta.string -import space.kscience.dataforge.names.Name -import space.kscience.dataforge.names.parseAsName +import space.kscience.dataforge.names.* import space.kscience.dataforge.values.string import space.kscience.snark.* import java.nio.file.Path @@ -71,7 +72,7 @@ context(PageContext) internal fun Route.spcPage(subRoute: String, meta: Meta, fr context(PageContext) internal fun Route.spcPage( subRoute: String, - dataPath: Name = subRoute.replace("/",".").parseAsName(), + dataPath: Name = subRoute.replace("/", ".").parseAsName(), more: FlowContent.() -> Unit = {}, ) { val data = resolveHtml(dataPath) @@ -83,7 +84,26 @@ context(PageContext) internal fun Route.spcPage( } else { application.log.error("Content for page with path $dataPath not found") } +} +/** + * Route a directory + */ +context(PageContext) internal fun Route.spcDirectory( + subRoute: String, + dataPath: Name = subRoute.replace("/", ".").parseAsName(), +) { + data.filterByType { name, _ -> name.startsWith(dataPath) }.forEach { html -> + val pageName = if (html.name.lastOrNull()?.body == PageContext.INDEX_PAGE_NAME) { + html.name.cutLast() + } else { + html.name + } + + spcPage(pageName.tokens.joinToString(separator = "/"), html.meta) { + htmlData(html) + } + } } context(PageContext) internal fun Route.spcPage( @@ -306,11 +326,11 @@ internal fun Application.spcHome(context: Context, rootPath: Path, prefix: Strin } } - spcPage("consulting") + spcDirectory("consulting") spcPage("ru/consulting") spcSpotlight("team") { _, m -> m["type"].string == "team" } - spcSpotlight("research") { _, m -> m["type"].string == "project" } + spcSpotlight("research") { name, m -> name.startsWith("projects".asName()) && m["type"].string == "project" } } } } diff --git a/src/main/kotlin/space/kscience/snark/PageContext.kt b/src/main/kotlin/space/kscience/snark/PageContext.kt index 1bce46a..8239f7b 100644 --- a/src/main/kotlin/space/kscience/snark/PageContext.kt +++ b/src/main/kotlin/space/kscience/snark/PageContext.kt @@ -11,11 +11,17 @@ import space.kscience.dataforge.meta.Meta import space.kscience.dataforge.meta.get import space.kscience.dataforge.meta.string import space.kscience.dataforge.names.Name +import space.kscience.dataforge.names.plus import space.kscience.dataforge.names.startsWith +import space.kscience.snark.PageContext.Companion.INDEX_PAGE_NAME import java.nio.file.Path data class PageContext(val path: String, val pageMeta: Meta, val data: DataSet<*>) { val language: String? by pageMeta.string() + + companion object { + const val INDEX_PAGE_NAME: String = "index" + } } /** @@ -23,13 +29,17 @@ data class PageContext(val path: String, val pageMeta: Meta, val data: DataSet<* */ fun PageContext.resolveRef(name: String): String = "${path.removeSuffix("/")}/$name" -fun PageContext.resolveRef(name: Name): String = "${path.removeSuffix("/")}/${name.tokens.joinToString ("/")}" +fun PageContext.resolveRef(name: Name): String = "${path.removeSuffix("/")}/${name.tokens.joinToString("/")}" /** * Resolve a Html builder by its full name */ -fun PageContext.resolveHtml(name: Name): HtmlData? = data.getByType(name)?.takeIf { - it.published //TODO add language confirmation +fun PageContext.resolveHtml(name: Name): HtmlData? { + val resolved = (data.getByType(name) ?: data.getByType(name + INDEX_PAGE_NAME)) + + return resolved?.takeIf { + it.published //TODO add language confirmation + } } /**