Arhn - архитектура программирования

Идентификатор кнопки доступа FXML в java

Я дал GridPane значение для fx:id fied в файле fxml, а затем получил доступ к этому идентификатору в коде Java с помощью функции getId, и это отлично работает. Однако, когда я попробовал то же самое с кнопкой, getId возвращает ноль. Возможно ли то, что я пытаюсь сделать, и если да, то как я могу сделать что-то подобное?

Это fxml-файл:

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.HBox?>

<?import javafx.scene.layout.VBox?>

<GridPane alignment="center" hgap="40" vgap="40" xmlns:fx="http://javafx.com/fxml/1"
          fx:controller="Tills.Controllers.MoviePageController">
    <GridPane fx:id="movie1Grid" alignment="center" hgap="10" vgap="10" GridPane.columnIndex="0" GridPane.rowIndex="0">
        <HBox alignment="center" GridPane.columnIndex="0" GridPane.rowIndex="0">
            <Label fx:id="movie1" alignment="center" text="Movie 1"/>
        </HBox>
        <HBox alignment="center" GridPane.columnIndex="0" GridPane.rowIndex="1" spacing="10">
            <VBox alignment="center">
                <Button fx:id="button0" text="17:00" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
            <VBox alignment="center">
                <Button fx:id="button1" text="13:15" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
            <VBox alignment="center">
                <Button fx:id="button2" text="13:30" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
        </HBox>
    </GridPane>

    <GridPane fx:id="movie2Grid" alignment="center" hgap="10" vgap="10" GridPane.columnIndex="0" GridPane.rowIndex="1">
        <HBox alignment="center" GridPane.columnIndex="0" GridPane.rowIndex="0">
            <Label fx:id="movie2" alignment="center" text="Movie 1"/>
        </HBox>
        <HBox alignment="center" GridPane.columnIndex="0" GridPane.rowIndex="1" spacing="10">
            <VBox alignment="center">
                <Button fx:id="button3" text="13:00" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
            <VBox alignment="center">
                <Button fx:id="button4" text="13:15" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
            <VBox alignment="center">
                <Button fx:id="button5" text="13:30" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
        </HBox>
    </GridPane>

    <GridPane fx:id="movie3Grid" alignment="center" hgap="10" vgap="10" GridPane.columnIndex="0" GridPane.rowIndex="2">
        <HBox alignment="center" GridPane.columnIndex="0" GridPane.rowIndex="0">
            <Label fx:id="movie3" alignment="center" text="Movie 1"/>
        </HBox>
        <HBox alignment="center" GridPane.columnIndex="0" GridPane.rowIndex="1" spacing="10">
            <VBox alignment="center">
                <Button fx:id="button6" text="13:00" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
            <VBox alignment="center">
                <Button fx:id="button7" text="13:15" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
            <VBox alignment="center">
                <Button fx:id="button8" text="13:30" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
        </HBox>
    </GridPane>

    <GridPane fx:id="movie4Grid" alignment="center" hgap="10" vgap="10" GridPane.columnIndex="1" GridPane.rowIndex="0">
        <HBox alignment="center" GridPane.columnIndex="0" GridPane.rowIndex="0">
            <Label fx:id="movie4" alignment="center" text="Movie 1"/>
        </HBox>
        <HBox alignment="center" GridPane.columnIndex="0" GridPane.rowIndex="1" spacing="10">
            <VBox alignment="center">
                <Button fx:id="button9" text="13:00" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
            <VBox alignment="center">
                <Button fx:id="button10" text="13:15" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
            <VBox alignment="center">
                <Button fx:id="button11" text="13:30" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
        </HBox>
    </GridPane>

    <GridPane fx:id="movie5Grid" alignment="center" hgap="10" vgap="10" GridPane.columnIndex="1" GridPane.rowIndex="1">
        <HBox alignment="center" GridPane.columnIndex="0" GridPane.rowIndex="0">
            <Label fx:id="movie5" alignment="center" text="Movie 1"/>
        </HBox>
        <HBox alignment="center" GridPane.columnIndex="0" GridPane.rowIndex="1" spacing="10">
            <VBox alignment="center">
                <Button fx:id="button12" text="13:00" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
            <VBox alignment="center">
                <Button fx:id="button13" text="13:15" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
            <VBox alignment="center">
                <Button fx:id="button14" text="13:30" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
        </HBox>
    </GridPane>

    <GridPane fx:id="movie6Grid" alignment="center" hgap="10" vgap="10" GridPane.columnIndex="1" GridPane.rowIndex="2">
        <HBox alignment="center" GridPane.columnIndex="0" GridPane.rowIndex="0">
            <Label fx:id="movie6" alignment="center" text="Movie 1"/>
        </HBox>
        <HBox alignment="center" GridPane.columnIndex="0" GridPane.rowIndex="1" spacing="10">
            <VBox alignment="center">
                <Button fx:id="button15" text="13:00" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
            <VBox alignment="center">
                <Button fx:id="button16" text="13:15" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
            <VBox alignment="center">
                <Button fx:id="button17" text="13:30" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
        </HBox>
    </GridPane>
</GridPane>

Это метод контроллера, который пытается получить идентификатор:

    public void submitMovieChoice(ActionEvent event) {
        Button button = (Button) event.getSource();
        GridPane movie = (GridPane) button.getParent().getParent().getParent();
        String name = null;

//        retrieve the name of the selected movie
        HBox hbox = (HBox) movie.getChildren().get(0);
        Label label = (Label) hbox.getChildren().get(0);
        name = label.getText();

        //CALLUM THIS IS WHERE THE SCREENING IS NEEDED FOR PASSING THROUGH
        int screeningID = 0;
        int age = 0;

        if(button.getId().length() == 7) {
            screeningID = screeningIDs[Integer.parseInt(button.getId().substring(button.getId().length() - 1))];
        }
        else
            screeningID = screeningIDs[Integer.parseInt(button.getId().substring(button.getId().length() - 2, button.getId().length() - 1 ))];
        try {
            //Load the ticket page with the selected name and time
            FXMLLoader loader = new FXMLLoader(getClass().getResource("../ticketType.fxml"));
            TicketPageController controller = new TicketPageController(button.getText(), name, screeningID, age);
            loader.setController(controller);
            Parent parent = loader.load();
            Stage window = (Stage) ((Node) event.getSource()).getScene().getWindow();
            window.setScene(new Scene(parent));
            window.show();
        } catch (IOException e) {
            System.err.println("Could not load page");
        }
    }
18.04.2018

  • Зачем тебе id? Обычно вы вводите элементы управления, определенные в файле FXML, в контроллер и просто получаете к ним доступ; fx:id используется для сопоставления элементов FXML с полями в контроллере. Обратите внимание, что id и fx:id на самом деле разные вещи, но id по умолчанию устанавливается на fx:id с помощью FXMLLoader. 18.04.2018
  • @James_D, так почему же getid возвращает значение null, когда установлено поле fx:id? 18.04.2018
  • Вероятно, что-то не так либо в FXML, либо в контроллере (или, возможно, в какой-то другой части вашего кода) ... не могу сказать, не видя, что именно вы делаете. (Но, как я уже говорил ранее, в любом случае нет причин делать что-либо из этого. fx:id совпадает с именем поля в контроллере...) 18.04.2018
  • Теперь я добавил код для вас, чтобы посмотреть на 18.04.2018
  • только первая кнопка имеет идентификатор, потому что я использую ее для проверки 18.04.2018
  • Просто... не делай этого так. Поскольку все эти сетки в основном одинаковы, создайте файл FXML для этой части с собственным контроллером. Затем используйте <fx:include> и внедрите вложенные контроллеры в основной контроллер. См. документацию. Попытка сделать это таким образом приведет к безумию. 18.04.2018
  • FWIW, тем не менее, я скопировал ваш код, добавил в тестовый пример, избавился от кода, который зависел от ресурсов, которых там не было, и все это работало просто отлично; кнопки 0-9 выполняли код в блоке if, а другие кнопки выполняли код в блоке else. 18.04.2018

Ответы:


1

Чтобы ответить на ваш вопрос напрямую: FXMLLoader установит id любого узла таким же, как его fx:id, если id не задано явно. Таким образом, в коде, который вы разместили, кнопки будут иметь id от "button0" до button17, как и ожидалось.

Я упростил ваш код, чтобы я мог запустить его следующим образом:

application/Test.fxml (единственное изменение здесь касается имени контроллера, так как я просто поместил все в другой пакет):

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.HBox?>

<?import javafx.scene.layout.VBox?>

<GridPane alignment="center" hgap="40" vgap="40" xmlns:fx="http://javafx.com/fxml/1"
          fx:controller="application.MoviePageController">
    <GridPane fx:id="movie1Grid" alignment="center" hgap="10" vgap="10" GridPane.columnIndex="0" GridPane.rowIndex="0">
        <HBox alignment="center" GridPane.columnIndex="0" GridPane.rowIndex="0">
            <Label fx:id="movie1" alignment="center" text="Movie 1"/>
        </HBox>
        <HBox alignment="center" GridPane.columnIndex="0" GridPane.rowIndex="1" spacing="10">
            <VBox alignment="center">
                <Button fx:id="button0" text="17:00" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
            <VBox alignment="center">
                <Button fx:id="button1" text="13:15" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
            <VBox alignment="center">
                <Button fx:id="button2" text="13:30" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
        </HBox>
    </GridPane>

    <GridPane fx:id="movie2Grid" alignment="center" hgap="10" vgap="10" GridPane.columnIndex="0" GridPane.rowIndex="1">
        <HBox alignment="center" GridPane.columnIndex="0" GridPane.rowIndex="0">
            <Label fx:id="movie2" alignment="center" text="Movie 2"/>
        </HBox>
        <HBox alignment="center" GridPane.columnIndex="0" GridPane.rowIndex="1" spacing="10">
            <VBox alignment="center">
                <Button fx:id="button3" text="13:00" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
            <VBox alignment="center">
                <Button fx:id="button4" text="13:15" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
            <VBox alignment="center">
                <Button fx:id="button5" text="13:30" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
        </HBox>
    </GridPane>

    <GridPane fx:id="movie3Grid" alignment="center" hgap="10" vgap="10" GridPane.columnIndex="0" GridPane.rowIndex="2">
        <HBox alignment="center" GridPane.columnIndex="0" GridPane.rowIndex="0">
            <Label fx:id="movie3" alignment="center" text="Movie 3"/>
        </HBox>
        <HBox alignment="center" GridPane.columnIndex="0" GridPane.rowIndex="1" spacing="10">
            <VBox alignment="center">
                <Button fx:id="button6" text="13:00" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
            <VBox alignment="center">
                <Button fx:id="button7" text="13:15" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
            <VBox alignment="center">
                <Button fx:id="button8" text="13:30" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
        </HBox>
    </GridPane>

    <GridPane fx:id="movie4Grid" alignment="center" hgap="10" vgap="10" GridPane.columnIndex="1" GridPane.rowIndex="0">
        <HBox alignment="center" GridPane.columnIndex="0" GridPane.rowIndex="0">
            <Label fx:id="movie4" alignment="center" text="Movie 1"/>
        </HBox>
        <HBox alignment="center" GridPane.columnIndex="0" GridPane.rowIndex="1" spacing="10">
            <VBox alignment="center">
                <Button fx:id="button9" text="13:00" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
            <VBox alignment="center">
                <Button fx:id="button10" text="13:15" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
            <VBox alignment="center">
                <Button fx:id="button11" text="13:30" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
        </HBox>
    </GridPane>

    <GridPane fx:id="movie5Grid" alignment="center" hgap="10" vgap="10" GridPane.columnIndex="1" GridPane.rowIndex="1">
        <HBox alignment="center" GridPane.columnIndex="0" GridPane.rowIndex="0">
            <Label fx:id="movie5" alignment="center" text="Movie 1"/>
        </HBox>
        <HBox alignment="center" GridPane.columnIndex="0" GridPane.rowIndex="1" spacing="10">
            <VBox alignment="center">
                <Button fx:id="button12" text="13:00" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
            <VBox alignment="center">
                <Button fx:id="button13" text="13:15" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
            <VBox alignment="center">
                <Button fx:id="button14" text="13:30" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
        </HBox>
    </GridPane>

    <GridPane fx:id="movie6Grid" alignment="center" hgap="10" vgap="10" GridPane.columnIndex="1" GridPane.rowIndex="2">
        <HBox alignment="center" GridPane.columnIndex="0" GridPane.rowIndex="0">
            <Label fx:id="movie6" alignment="center" text="Movie 1"/>
        </HBox>
        <HBox alignment="center" GridPane.columnIndex="0" GridPane.rowIndex="1" spacing="10">
            <VBox alignment="center">
                <Button fx:id="button15" text="13:00" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
            <VBox alignment="center">
                <Button fx:id="button16" text="13:15" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
            <VBox alignment="center">
                <Button fx:id="button17" text="13:30" onAction="#submitMovieChoice"/>
                <Label text="test screen"/>
            </VBox>
        </HBox>
    </GridPane>
</GridPane>

application/MoviePageController.java (упрощено с удаленными другими зависимостями):

package application;

import javafx.event.ActionEvent;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;

public class MoviePageController {

    public void submitMovieChoice(ActionEvent event) {
        Button button = (Button) event.getSource();
        GridPane movie = (GridPane) button.getParent().getParent().getParent();
        String name = null;

//        retrieve the name of the selected movie
        HBox hbox = (HBox) movie.getChildren().get(0);
        Label label = (Label) hbox.getChildren().get(0);
        name = label.getText();

        System.out.println(name);

        //CALLUM THIS IS WHERE THE SCREENING IS NEEDED FOR PASSING THROUGH
        int screeningID = 0;
        int age = 0;

        if(button.getId().length() == 7) {
            System.out.println("Button id has length 7");
        }
        else
            System.out.println("Button id does not have length 7");

    }

}

и тестовый пример:

application/Test.java

package application;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Test extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        Scene scene = new Scene(FXMLLoader.load(getClass().getResource("Test.fxml")));
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

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


Я просто не рекомендую ваш подход вообще. Он вводит всевозможные дополнительные привязки строк, которые уязвимы для непроверенных (компилятором) опечаток, а также имеют огромное количество повторяющегося кода. Кроме того, вы храните данные в элементах пользовательского интерфейса (например, кажется, что единственное место, где вы представляете названия фильмов, — это метки). Это не лучший подход: вы должны хранить данные независимо от пользовательского интерфейса и рассматривать элементы управления пользовательского интерфейса просто как представления данных. (Подробнее об архитектуре типа «Модель-Представление-Контроллер» читайте.)

Рассмотрим, например, помещение всех повторяющихся FXML в один файл FXML:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>


<GridPane xmlns:fx="http://javafx.com/fxml/1" alignment="center" hgap="10" vgap="10" fx:controller="application.MovieController">
    <HBox alignment="center" GridPane.columnIndex="0"
        GridPane.rowIndex="0">
        <Label fx:id="movie" alignment="center" />
    </HBox>
    <HBox alignment="center" GridPane.columnIndex="0"
        GridPane.rowIndex="1" spacing="10">
        <VBox alignment="center">
            <Button fx:id="firstShowingButton" onAction="#submitFirstChoice" />
            <Label text="test screen" />
        </VBox>
        <VBox alignment="center">
            <Button fx:id="secondShowingButton" onAction="#submitSecondChoice" />
            <Label text="test screen" />
        </VBox>
        <VBox alignment="center">
            <Button fx:id="thirdShowingButton" onAction="#submitThirdChoice" />
            <Label text="test screen" />
        </VBox>
    </HBox>

</GridPane>

С помощью контроллера со значениями, которые вы можете установить:

package application;

import java.io.IOException;

import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.stage.Stage;

public class MovieController {

    private String firstShowing ;
    private String secondShowing ;
    private String thirdShowing ;

    private int baseID ;


    @FXML
    private Label movie ;
    @FXML
    private Button firstShowingButton ;
    @FXML
    private Button secondShowingButton ;
    @FXML
    private Button thirdShowingButton ;


    public void setMovieName(String movieName) {
        movie.setText(movieName);
    }

    public String getMovieName() {
        return movie.getText() ;
    }

    public int getBaseID() {
        return baseID ;
    }

    public void setBaseID(int baseID) {
        this.baseID = baseID ;
    }

    public String getFirstShowing() {
        return firstShowing;
    }
    public void setFirstShowing(String firstShowing) {
        this.firstShowing = firstShowing;
        firstShowingButton.setText(firstShowing);
    }
    public String getSecondShowing() {
        return secondShowing;
    }
    public void setSecondShowing(String secondShowing) {
        this.secondShowing = secondShowing;
        secondShowingButton.setText(secondShowing);
    }
    public String getThirdShowing() {
        return thirdShowing;
    }
    public void setThirdShowing(String thirdShowing) {
        this.thirdShowing = thirdShowing;
        thirdShowingButton.setText(thirdShowing);
    }

    public void setShowings(String firstShowing, String secondShowing, String thirdShowing) {
        setFirstShowing(firstShowing);
        setSecondShowing(secondShowing);
        setThirdShowing(thirdShowing);
    }

    private void submitChoice(String showing, int id) {
        try {

            int screeningID = baseID * 3 + id ;
            int age =  0 ;
            //Load the ticket page with the selected name and time
            FXMLLoader loader = new FXMLLoader(getClass().getResource("../ticketType.fxml"));
            TicketPageController controller = new TicketPageController(showing, getMovieName(), screeningID, age);
            loader.setController(controller);
            Parent parent = loader.load();
            Stage window = (Stage) movie.getScene().getWindow();
            window.setScene(new Scene(parent));
            window.show();
        } catch (IOException e) {
            System.err.println("Could not load page");
        }
    }

    @FXML
    private void submitFirstChoice() {
        submitChoice(firstShowing, 0);
    }

    @FXML
    private void submitSecondChoice() {
        submitChoice(secondShowing, 1);
    }

    @FXML
    private void submitThirdChoice() {
        submitChoice(thirdShowing, 2);
    }
}

Теперь вы можете просто собрать это в коде:

package application;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.geometry.Pos;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

public class Main extends Application {

    private final String[] times = {"17:00", "13:15", "13:30", "13:00", "13:15", "13:30", 
            "13:00", "13:15", "13:30", "13:00", "13:15", "13:30", "13:00", "13:15", "13:30", "13:00", "13:15", "13:30"} ;

    @Override
    public void start(Stage primaryStage) throws Exception {
        GridPane root = new GridPane();
        root.setAlignment(Pos.CENTER);
        root.setHgap(40);
        root.setVgap(40);

        for (int i = 0 ; i < 6; i++) {
            FXMLLoader loader = new FXMLLoader(getClass().getResource("MovieView.fxml"));
            Parent movieView = loader.load();
            MovieController controller = loader.getController() ;
            controller.setMovieName("Movie "+(i+1));
            controller.setShowings(times[i*3], times[i*3+1], times[i*3+2]);
            root.add(movieView, i / 3, i % 3);
        }

        Scene scene = new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

Помимо избавления от всей «навигации по сценам» (используя вызовы getParent() и getChildren() для поиска других элементов управления), которые полностью сломаются, если вы попытаетесь изменить внешний вид пользовательского интерфейса, это избавит вас от большей части повторяющегося кода ( особенно в FXML). В реальной жизни вы, вероятно, просматриваете данные здесь, в базе данных, и можете извлечь их в один объект, который вы передаете всем контроллерам и т. д. Существуют вариации этого подхода, см., например, <fx:include> или Пользовательские компоненты в документации по FXML . Вы также можете разделить код и избежать повторяющегося кода с тремя кнопками (хотя это может быть излишним).

18.04.2018
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..