Program and partners update

This commit is contained in:
Alexander Nozik 2021-04-03 22:11:37 +03:00
parent 1dae4eaf93
commit 80fffa8515
18 changed files with 428 additions and 974 deletions

View File

@ -3,6 +3,8 @@ const ncp = require('ncp').ncp;
const filesSource = "./src/files"
const imagesSource = "./src/images"
const webpack = require('webpack')
exports.onPreBootstrap = () => {
ncp(filesSource, "./static/files", function (err) {
@ -110,4 +112,4 @@ exports.createPages = async ({actions, graphql}) => {
},
})
}
}
}

View File

@ -6,24 +6,23 @@
"dependencies": {
"bootstrap": "4.6.0",
"breakpoints": "^0.0.0",
"gatsby": "3.1.1",
"gatsby": "^3.2.1",
"gatsby-awesome-pagination": "0.3.6",
"gatsby-cli": "3.1.0",
"gatsby-plugin-catch-links": "3.1.0",
"gatsby-plugin-manifest": "3.1.0",
"gatsby-cli": "^3.2.0",
"gatsby-plugin-catch-links": "^3.2.0",
"gatsby-plugin-manifest": "^3.2.0",
"gatsby-plugin-netlify-cms": "5.1.0",
"gatsby-plugin-react-helmet": "4.1.0",
"gatsby-plugin-react-intl": "3.0.0",
"gatsby-plugin-sharp": "3.1.1",
"gatsby-plugin-ts": "^2.7.1",
"gatsby-remark-images": "4.1.0",
"gatsby-remark-katex": "4.1.0",
"gatsby-remark-relative-images": "2.0.2",
"gatsby-source-filesystem": "3.1.0",
"gatsby-source-graphql": "3.1.0",
"gatsby-transformer-remark": "3.1.0",
"gatsby-transformer-sharp": "3.1.0",
"html-react-parser": "1.2.4",
"gatsby-plugin-react-intl": "^3.0.0",
"gatsby-plugin-sharp": "^3.2.0",
"gatsby-remark-images": "^4.2.0",
"gatsby-remark-katex": "^4.2.0",
"gatsby-remark-relative-images": "^2.0.2",
"gatsby-source-filesystem": "^3.2.0",
"gatsby-source-graphql": "^3.2.0",
"gatsby-transformer-remark": "^3.2.0",
"gatsby-transformer-sharp": "^3.2.0",
"html-react-parser": "^1.2.4",
"imagemin-pngquant": "9.0.2",
"jquery": "3.6.0",
"jquery.scrollex": "^0.2.1",
@ -33,8 +32,8 @@
"ncp": "2.0.0",
"prop-types": "15.7.2",
"react": "17.0.2",
"react-bootstrap": "1.5.2",
"react-helmet": "6.1.0",
"react-bootstrap": "^1.5.2",
"react-helmet": "^6.1.0",
"react-intl": "^5.13.5",
"react-scrollspy": "^3.4.3",
"redux": "4.0.5",

View File

@ -4,7 +4,7 @@ import {injectIntl, useIntl} from "react-intl"
import NpmNavbar from "./navBar"
import NpmFooter from "./footer"
import SEO from "./seo"
import Seo from "./seo"
import "bootstrap/dist/css/bootstrap.min.css"
import "katex/dist/katex.min.css"
@ -19,7 +19,7 @@ const NpmLayout = ({children}) => {
<Helmet>
<html className="npm-site" lang={lang}/>
</Helmet>
<SEO title={intl.formatMessage({id: "title"})}/>
<Seo title={intl.formatMessage({id: "title"})}/>
<NpmNavbar/>
<div className="container">

View File

@ -2,7 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types';
import Helmet from 'react-helmet';
import {injectIntl, useIntl} from "react-intl";
import SEO from "../../seo";
import Seo from "../../seo";
import NpmNavbar from "../../navBar";
import '../assets/sass/magprog.scss'
@ -21,7 +21,7 @@ const MagProgLayout = ({children}) => {
<html className="magprog" lang={lang}/>
<body className="is-preload"/>
</Helmet>
<SEO lang={lang} title={intl.formatMessage({id: "title"})}/>
<Seo lang={lang} title={intl.formatMessage({id: "title"})}/>
<NpmNavbar/>
<main>{children}</main>

View File

@ -0,0 +1,28 @@
import React from 'react';
import {Card, CardDeck, CardGroup, CardImg} from "react-bootstrap";
export function Partners({data}) {
return <div className="inner">
<h2>{data.title}</h2>
<div className="features">
{data.content.map(item =>{
return <section>
{/*<span className={`icon major ${iconClass}`} />*/}
<h3><a href={item.link}>{item.title}</a></h3>
</section>
})}
</div>
{/* <CardDeck>
{data.content.map(item => {
return <Card>
<Card.Img variant="top"/>
<Card.Body>
<Card.Title><a href={item.link}>{item.title}</a></Card.Title>
</Card.Body>
</Card>
})}
</CardDeck>*/}
</div>
}

View File

@ -0,0 +1,24 @@
import React, {useState} from "react";
import {Button, Collapse} from "react-bootstrap";
export function RecommendedCourses(props) {
const [open, setOpen] = useState(false);
return (
<>
<Button
size="lg"
onClick={() => setOpen(!open)}
aria-controls="recommended-courses-collapse-text"
aria-expanded={open}
>
Рекомендованные курсы
</Button>
<Collapse in={open}>
<div id="recommended-courses-collapse-text">
{props.children}
</div>
</Collapse>
</>
);
}

View File

@ -1,5 +1,5 @@
import React from 'react';
import MagProgLayout from "../../components/magprog/common/MagProgLayout";
import MagProgLayout from "./MagProgLayout";
const SecondPage = () => (
<MagProgLayout>

View File

@ -1,6 +1,6 @@
import React from 'react';
import MagProgLayout from "../../components/magprog/common/MagProgLayout";
import MagProgLayout from "./MagProgLayout";
const SecondPage = () => (
<MagProgLayout>

View File

@ -49,14 +49,12 @@ const NpmNavbar = () => {
<Nav.Link as="span" eventKey="partners"><FormattedMessage
id="header.partners"/></Nav.Link>
</Link>
{/*
<Link to={`/${intl.locale}/magprog`} className="nav-item" activeClassName="active"
partiallyActive={true}>
<Nav.Link as="span" eventKey="magprog">
<FormattedMessage id="header.magprog"/>
</Nav.Link>
</Link>
*/}
</Nav>
<Nav.Link eventKey="language" className="nav-item language">
<Language/>

View File

@ -1,9 +1,9 @@
import React from "react"
import {injectIntl} from "react-intl"
import SEO from "./seo"
import Seo from "./seo"
const Redirect = ({intl}) => {
return <SEO title={`${intl.formatMessage({id: "title"})}`}/>
return <Seo title={`${intl.formatMessage({id: "title"})}`}/>
}
export default injectIntl(Redirect)

View File

@ -3,7 +3,7 @@ import PropTypes from "prop-types"
import Helmet from "react-helmet"
import {graphql, useStaticQuery} from "gatsby"
const SEO = ({description, lang, meta, title}) => {
const Seo = ({description, lang, meta, title}) => {
const {site} = useStaticQuery(
graphql`
query {
@ -44,17 +44,17 @@ const SEO = ({description, lang, meta, title}) => {
)
}
SEO.defaultProps = {
Seo.defaultProps = {
lang: `ru`,
meta: [],
description: ``,
}
SEO.propTypes = {
Seo.propTypes = {
description: PropTypes.string,
lang: PropTypes.string,
meta: PropTypes.arrayOf(PropTypes.object),
title: PropTypes.string.isRequired,
}
export default SEO
export default Seo

View File

@ -12,5 +12,5 @@ language: ru
* [ИЯИ РАН](https://www.inr.ru/)
* [ИКИ РАН](http://www.iki.rssi.ru/)
* [ОИЯИ](https://bmn.jinr.ru/)
* ВШЭ (физфак и ФКН)
* [ВШЭ](https://www.hse.ru/en/) (физфак и ФКН)
* [HZG-DESY](https://www.desy.de/research/cooperations__institutes/hzg/index_eng.html)

View File

@ -0,0 +1,32 @@
title: Партнеры
content:
- title: ЛФИ
link: https://mipt.ru/education/departments/lpr/
logo:
- title: ФПМИ
link: https://mipt.ru/education/departments/fpmi/
logo:
- title: JetBrains Research
link: https://research.jetbrains.org/groups/npm/
logo:
- title: JetBrains
link: https://www.jetbrains.com/
logo:
- title: Таврида Электрик
link: https://www.tavrida.com/ter/
logo:
- title: ИЯИ РАН
link: https://www.inr.ru/
logo:
- title: ИКИ РАН
link: http://www.iki.rssi.ru/
logo:
- title: ОИЯИ
link: https://bmn.jinr.ru/
logo:
- title: ВШЭ
link: https://www.hse.ru/en/
logo:
- title: HZG-DESY
link: https://www.desy.de/research/cooperations__institutes/hzg/index_eng.html
logo:

View File

@ -14,4 +14,4 @@ language: ru
* Научная этика и подготовка научных публикаций (семестр)
* Семинар по литературе
Остальные курсы выбираются руководителем и согласуются руководством программы. Для выбора курсов можно руководствоваться [списком рекомендованных курсов] или выбрать любой другой курс, который читается в МФТИ (и возможно в партнерских ВУЗах.
Остальные курсы выбираются руководителем и согласуются руководством программы. Для выбора курсов можно руководствоваться списком рекомендованных курсов или выбрать любой другой курс, который читается в МФТИ (и возможно в партнерских ВУЗах).

View File

@ -0,0 +1,34 @@
---
content_type: magprog
magprog_section: recommended
title: Рекомаендованные курсы
language: ru
---
* **Прохождение частиц через вещество** (читает кафедра фундаментальных взаимодействий и космологии)
Курс посвящен основам физики взаимодействия элементарных частиц с веществом. В курсе освещается взаимодействие как адронов, так и бета-частиц и гамма-частиц. Подробно обсуждаются различные каналы взаимодействия частиц с веществом.
* **Введение в физику частиц** (читает кафедра фундаментальных взаимодействий и космологии)
Теоретические основы физики элементарных частиц и фундаментальных взаимодействий. Курс описывает как введение в физику сильного взаимодействия, так и феноменологические теории слабого и электрослабого взаимодейсвия.
* **[Параллельные и распределенные вычисления](https://mipt.ru/online/algoritmov-i-tekhnologiy/raspr-calc.php)** (читает кафедра алгоритмов и технологий программирования)
* **[Алгоритмы и структуры данных](https://mipt.ru/online/algoritmov-i-tekhnologiy/algoritmy-struktury.php)** (читает кафедра алгоритмов и технологий программирования)
Базовый курс алгоритмов и структур данных для адаптации физиков. В данном курсе студенты закрепляют навыки программирования на С++, изучая и реализуя сложные современные алгоритмы. В их число входят алгоритмы на графах и связанные с ними структуры данных. Другой блок задач связан с работой со строками и построением индексов текста.
* **Методы Монте-Карло в ядерной физике** (читает кафедра фундаментальных взаимодействий и космологии)
Курс посвящен основам моделирования взаимодействия частиц с веществом программными средствами библиотек Geant4 и CERN ROOT. В курсе будет разобрана специфика физической и объектной модели платформы GEANT4, предназначенной для моделирования процессов в физике частиц. Курс сопровождается практическими примерами применения платформы к реальным задачам. Упор будет сделан на особенности разработки сложных моделей.
* **Инструменты IT**
Курс посвящен практическому обзору использования современных инструментов для разработки программного обеспечения. Кроме того, в курсе будут разобраны современные практики оформления и документирования кода, инструменты и методы командной работы в сфере разработки ПО.
* **Неускорительные эксперименты в физике частиц**
Курс посвящен физике “подземных” экспериментов в физике элементарных частиц. Будет произведен обзор проектов по изучению тёмной материи, физики нейтрино и физике бета-распада. Особое внимание уделяется методам детектирования и фонам в “подземных” экспериментах.
* [Введение в научное программирование на языке Kotlin](https://mipt.ru/online/programming/kotlin.php) (читает кафедра алгоритмов и технологий программирования)
Курс посвящен особенностям языка Kotlin в контексте прикладной разработки программного обеспечения для научных исследований.
* **Методы многомерной оптимизации**
Этот практический курс посвящен математической и программной реализации методов оптимизации непрерывных функций. Непрерывная оптимизация является основной компонентой многомерного анализа данных в физических экспериментах. Также на ней построены задачи проектирования и принятия решений и даже некоторые методы моделирования. В данном курсе упор сделан именно на практическую реализацию этих методов, сравнение их между собой и оптимизации производительности.
* **Продвинутое программирование на языке Python**
В рамках курса углублённо рассматривается язык Python, изучается применение стандартной библиотеки и набора библиотек scikit для решения научных задач.
* **[Программирование на С++](https://mipt.ru/online/algoritmov-i-tekhnologiy/Progr-C.php)** (читает кафедра алгоритмов и технологий программирования)
Курс посвящен языку С++ и его особенностям. Рекомендуется изучать параллельно курсу Алгоритмов и структур данных.
* **Байесовские методы в анализе данных**
Курс посвящен обзору байесовских методов в применении к анализу данных физических экспериментов.
* **Машинное обучение в астрофизике** (читает кафедра фундаментальных взаимодействий и космологии).
Курс посвящен обзору методов машинного обучения и их приложения в физических и астрофизических исследованиях.
И другие курсы по усмотрению научного руководителя.

View File

@ -1,14 +1,14 @@
import React from "react"
import Layout from "../components/layout"
import {FormattedMessage, injectIntl, useIntl} from "gatsby-plugin-react-intl"
import SEO from "../components/seo"
import Seo from "../components/seo"
const NotFoundPage = () => {
const intl = useIntl()
const lang = intl.locale
return (
<Layout>
<SEO lang={lang} title={intl.formatMessage({id: "title"})}/>
<Seo lang={lang} title={intl.formatMessage({id: "title"})}/>
<div style={{minHeight: `95vh`}}>
<h1 style={{textAlign: `center`, paddingTop: `300px`}}><FormattedMessage id="notfound.header"/></h1>
<p style={{textAlign: `center`}}><FormattedMessage id="notfound.description"/></p>

View File

@ -6,6 +6,9 @@ import MagProgLayout from '../../components/magprog/common/MagProgLayout';
import Parser from "html-react-parser";
import Scrollspy from "react-scrollspy";
import Scroll from "../../components/magprog/common/Scroll";
import {RecommendedCourses} from "../../components/magprog/common/RecommendedCourses";
import {Partners} from "../../components/magprog/common/Partners";
import PartnersData from "../../content/ru/magprog/partners.yaml";
function mentors(edges) {
return (
@ -65,8 +68,7 @@ function team(edges) {
return (
<section key={`team_${id}`}>
<div className="image fit">
<img src={withPrefix(`images/members/${photo}`)}
alt={name}/>
<img src={withPrefix(`images/members/${photo}`)} alt={name}/>
</div>
<div className="content">
<div className="inner">
@ -86,42 +88,71 @@ function team(edges) {
)
}
function section(node) {
let body = <>
<div className="inner">
<h2>{node.frontmatter.section_title}</h2>
{Parser(node.html)}
</div>
</>
return {
id: node.frontmatter.magprog_section,
title: node.frontmatter.section_title,
body: body,
style: "wrapper style1 fullscreen fade-up"
}
}
function programSection(programBodyNode, recommendedCoursesHtml) {
//const node = props.data.program
let body = <>
<div className="inner">
<h2>{programBodyNode.frontmatter.section_title}</h2>
{Parser(programBodyNode.html)}
<RecommendedCourses>
{Parser(recommendedCoursesHtml)}
</RecommendedCourses>
</div>
</>
return {
id: programBodyNode.frontmatter.magprog_section,
title: programBodyNode.frontmatter.section_title,
body: body,
style: "wrapper style3 fullscreen fade-up"
}
}
const MagProgPage = (props) => {
let sections = [props.data.what, props.data.why, props.data.partners, props.data.program, props.data.enroll, props.data.contacts].map(node => {
let body = <>
<div className="inner">
<h2>{node.frontmatter.section_title}</h2>
{Parser(node.html)}
</div>
</>
return {
id: node.frontmatter.magprog_section,
title: node.frontmatter.section_title,
body: body,
style: "wrapper style1 fullscreen fade-up"
}
})
sections[0].id = "intro"
sections.splice(3, 0,
let sections = [
section(props.data.what),
section(props.data.why),
{
id: "partners",
title: "Партнеры",
body: <Partners data={PartnersData}/>,
style: "wrapper style3 fullscreen fade-up"
},
// section(props.data.partners),
{
id: "mentors",
title: "Научные руководители",
body: mentors(props.data.mentors.edges),
style: "wrapper style2 spotlights"
}
)
sections.splice(6, 0,
},
programSection(props.data.programData, props.data.recommendedCourses.html),
section(props.data.enroll),
{
id: "team",
title: "Команда",
body: team(props.data.team.edges),
style: "wrapper style2 spotlights"
}
)
},
section(props.data.contacts)
]
sections[0].id = "intro"
return (
<MagProgLayout>
@ -212,7 +243,7 @@ export const query = graphql`
}
}
program: markdownRemark(frontmatter: {content_type: {eq: "magprog"}, magprog_section: {eq: "program"} published: {ne: false}, language: {eq: "ru"}}){
programData: markdownRemark(frontmatter: {content_type: {eq: "magprog"}, magprog_section: {eq: "program"} published: {ne: false}, language: {eq: "ru"}}){
html
frontmatter{
magprog_section
@ -220,6 +251,9 @@ export const query = graphql`
}
}
recommendedCourses: markdownRemark(frontmatter: {content_type: {eq: "magprog"}, magprog_section: {eq: "recommended"} published: {ne: false}, language: {eq: "ru"}}){
html
}
enroll: markdownRemark(frontmatter: {content_type: {eq: "magprog"}, magprog_section: {eq: "enroll"} published: {ne: false}, language: {eq: "ru"}}){
html

1123
yarn.lock

File diff suppressed because it is too large Load Diff