Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/14: Рейтинг темы: голосов - 14, средняя оценка - 4.71
3 / 3 / 0
Регистрация: 01.02.2019
Сообщений: 67

Переделать код под Gson

01.02.2019, 11:14. Показов 2977. Ответов 17

Студворк — интернет-сервис помощи студентам
Доброго утра. Совсем недавно изучаю java и уже дали сложное задание в университете.
Суть такая: есть json файл:
JSON
1
{"cod":"200","message":0.0034,"cnt":37,"list":[{"dt":1549011600,"main":{"temp":-1.67,"temp_min":-4.89,"temp_max":-1.67,"pressure":1029.07,"sea_level":1031.71,"grnd_level":1029.07,"humidity":97,"temp_kf":3.22},"weather":[{"id":600,"main":"Snow","description":"небольшой снегопад","icon":"13d"}],"clouds":{"all":76},"wind":{"speed":4.07,"deg":73.5071},"snow":{"3h":0.0575},"sys":{"pod":"d"},"dt_txt":"2019-02-01 09:00:00"},{"dt":1549022400,"main":{"temp":-1.65,"temp_min":-4.07,"temp_max":-1.65,"pressure":1028.68,"sea_level":1031.25,"grnd_level":1028.68,"humidity":95,"temp_kf":2.41},"weather":[{"id":600,"main":"Snow","description":"небольшой снегопад","icon":"13d"}],"clouds":{"all":76},"wind":{"speed":4.56,"deg":81.5035},"snow":{"3h":0.06875},"sys":{"pod":"d"},"dt_txt":"2019-02-01 12:00:00"},"country":"RU"}}
Есть unix дата и время "1549108800"

В дсон файле в массиве list находятся "dt", содержащие тоже дату и время , среди которых надо найти индекс той, которая ближе всего к моей. Когда я использовала джсон, код выглядел так:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
JSONObject weatherDataJson = new JSONObject(weatherDataCollect(message));        
        JSONArray list1 = weatherDataJson.getJSONArray("list");
 
        long tomorrowTime = 1549108800;
        long timeDifference = Integer.MAX_VALUE;
        int minDtIndex = 0;
        // тут я сравнивала разницу между моим временем и временем в dt, индекс той dt, в которой дата и время ближе к моей
       // я присваивала minDtIndex
        for (int i = 0; i <list1.length(); i++){
            JSONObject weatherItem = list1.getJSONObject(i);
            Integer dt = Integer.valueOf(weatherItem.get("dt").toString()); //тут я получала значение из dt
            long diff = Math.abs(tomorrowTime - dt);
            if(diff < timeDifference){
                timeDifference = diff;
                minDtIndex = i;
            }
        }
        FiveDaysWeather fiveDaysWeatherObj = null;
        Gson tomorrowWeatherGson = new Gson();
        JSONObject nearestForecast = list1.getJSONObject(minDtIndex); //тут я подставляла индекс нужной dt
        fiveDaysWeatherObj = tomorrowWeatherGson.fromJson(nearestForecast.toString(), FiveDaysWeather.class);         
 
        return fiveDaysWeatherObj.weatherShow(message, "завтра");
этот код прекрасно работал. Пока преподаватель не сказала переделать, использую gson от google
Получилось так:

Java
1
2
3
4
5
6
7
8
        String jsonOutput= weatherDataCollect(message);
        System.out.println(jsonOutput);
        Gson gson = new Gson();
        JsonElement element = gson.fromJson(jsonOutput, JsonElement.class);
        JsonObject jsonObject = element.getAsJsonObject();
        JsonArray list1 = jsonObject.getAsJsonArray("list");
// после выполнение этой части получаем массив вида:
// [{"dt":1549011600,"main":{"temp":-2,"temp_min":-3.55,"temp_max":-2,"pressure":1030.01,"sea_level":1032.7,"grnd_level":1030.01,"humidity":91,"temp_kf":1.54},"weather":[{"id":600,"main":"Snow","description":"небольшой снегопад","icon":"13d"}],"clouds":{"all":44},"wind":{"speed":3.96,"deg":73.5004},"snow":{"3h":0.0515},"sys":{"pod":"d"},"dt_txt":"2019-02-01 09:00:00"},{"dt":1549022400,"main":{"temp":-2.13,"temp_min":-3.28,"temp_max":-2.13,"pressure":1029.5,"sea_level":1032.25,"grnd_level":1029.5,"humidity":93,"temp_kf":1.16},"weather":[{"id":800,"main":"Clear","description":"ясно","icon":"01d"}],"clouds":{"all":68},"wind":{"speed":4.41,"deg":78.5},"snow":{"3h":0.025},"sys":{"pod":"d"},"dt_txt":"2019-02-01 12:00:00"}]
Казалось, что всё идет по плану, пишу дальше:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
long tomorrowTime = 1549108800;
        long timeDifference = Integer.MAX_VALUE;
        int minDtIndex = 0;        
        for (int i = 0; i <list1.size(); i++){
            JsonObject weatherItem = list1.getAsJsonObject();           
            Integer dt = Integer.valueOf(weatherItem.get("dt").toString()); //get dt parameters
            long diff = Math.abs(tomorrowTime - dt);
            if(diff < timeDifference){
                timeDifference = diff;
                minDtIndex = i;
                System.out.println(minDtIndex);
            }
        }
Эта часть уже не работает, ругается на массив, что это не джсон объект "Exception in thread "main" java.lang.IllegalStateException: Not a JSON Object:"
Читала документацию по gson, пыталась найти ответы в гугле (вдруг кто сталкивался с таким). Пока нет результатов. Последняя надежда на вас.

Продолжение кода будет такое:
Java
1
2
JsonElement todaysWeather = list.get(minDtIndex);
        FiveDaysWeather fiveDaysWeather = gson.fromJson(todaysWeather.toString(), FiveDaysWeather.class);
вот этот самый поиск индекса ближайшего к моему времени dt я не смогла найти. Если поставить "0", "1", "2" всё прекрасно извлекается. Мне надо сделать, чтобы программа нужный индекс искала сама.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.02.2019, 11:14
Ответы с готовыми решениями:

возможно ли переделать код алгоритма под Borland C переделать под Borland Delphi?
Подскажите возможно ли переделать код алгоритма под Borland C переделать под Borland Delphi? У меня есть исходник алгоритма шифрования SEAL...

Переделать код под С++
Переделать код под С++ (или любой другой) function mypractice format long %------------Задание исходных...

Переделать код под c++
Есть код Pascal, нужно его переделать под c++. Но поскольку в этом не особо разбираюсь прошу у вас помощи. Заранее благодарен. Спасибо за...

17
 Аватар для worldown
189 / 177 / 111
Регистрация: 22.06.2009
Сообщений: 533
01.02.2019, 14:44
kulichiki96,
Честно сказать довольно всё сумбурно, грязно:
Разбираться в этом, оой как не хочется..
1. Почистите код.
2. Напишите классы и методы для каждого действия
3. Пользуйтесь отладчиком
0
3 / 3 / 0
Регистрация: 01.02.2019
Сообщений: 67
01.02.2019, 15:14  [ТС]
worldown, не поняла вас. Это и есть метод. И что там чистить? 8 строчек цикла, или цикл тоже надо методом делать? Хорошо, сделаю его отдельным методом. Проблема в том, что он не работает
да и чего там разбираться? есть массив, из него пытаюсь достать значения dt: "dt":1549011600,"dt":1549022400. Их там, конечно, больше. Я для образца обрезала его.
0
 Аватар для worldown
189 / 177 / 111
Регистрация: 22.06.2009
Сообщений: 533
01.02.2019, 15:22
kulichiki96, скиньте целый json и gson запрос сюда
0
3 / 3 / 0
Регистрация: 01.02.2019
Сообщений: 67
01.02.2019, 15:29  [ТС]
так выглядит json файл
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
{
  "cod":"200",
  "message":0.0021,
  "cnt":40,
  "list":[
    {
      "dt":1547812800,
      "main":{
        "temp":-5.72,
        "temp_min":-6.64,
        "temp_max":-5.72,
        "pressure":1005.73,
        "sea_level":1008.41,
        "grnd_level":1005.73,
        "humidity":91,
        "temp_kf":0.91
      },
      "weather":[
        {
          "id":600,
          "main":"Snow",
          "description":"небольшой снегопад",
          "icon":"13d"
        }
      ],
      "clouds":{
        "all":76
      },
      "wind":{
        "speed":4.27,
        "deg":281.504
      },
      "snow":{
        "3h":0.163
      },
      "sys":{
        "pod":"d"
      },
      "dt_txt":"2019-01-18 12:00:00"
    },
    {
      "dt":1547823600,
      "main":{
        "temp":-7.03,
        "temp_min":-7.72,
        "temp_max":-7.03,
        "pressure":1006.97,
        "sea_level":1009.62,
        "grnd_level":1006.97,
        "humidity":80,
        "temp_kf":0.69
      },
      "weather":[
        {
          "id":600,
          "main":"Snow",
          "description":"небольшой снегопад",
          "icon":"13n"
        }
      ],
      "clouds":{
        "all":68
      },
      "wind":{
        "speed":3.57,
        "deg":282.502
      },
      "snow":{
        "3h":0.039
      },
      "sys":{
        "pod":"n"
      },
      "dt_txt":"2019-01-18 15:00:00"
    },
    {
      "dt":1547834400,
      "main":{
        "temp":-8.23,
        "temp_min":-8.69,
        "temp_max":-8.23,
        "pressure":1007.91,
        "sea_level":1010.49,
        "grnd_level":1007.91,
        "humidity":86,
        "temp_kf":0.46
      },
      "weather":[
        {
          "id":800,
          "main":"Clear",
          "description":"ясно",
          "icon":"01n"
        }
      ],
      "clouds":{
        "all":64
      },
      "wind":{
        "speed":3.01,
        "deg":290.002
      },
      "snow":{
        "3h":0.017
      },
      "sys":{
        "pod":"n"
      },
      "dt_txt":"2019-01-18 18:00:00"
    },
    {
      "dt":1548234000,
      "main":{
        "temp":-9.23,
        "temp_min":-9.23,
        "temp_max":-9.23,
        "pressure":1022.7,
        "sea_level":1025.48,
        "grnd_level":1022.7,
        "humidity":81,
        "temp_kf":0
      },
      "weather":[
        {
          "id":800,
          "main":"Clear",
          "description":"ясно",
          "icon":"01d"
        }
      ],
      "clouds":{
        "all":0
      },
      "wind":{
        "speed":3.41,
        "deg":217
      },
      "snow":{
        "3h":0.0024999999999995
      },
      "sys":{
        "pod":"d"
      },
      "dt_txt":"2019-01-23 09:00:00"
    }
  ],
  "city":{
    "id":536203,
    "name":"Sankt-Peterburg",
    "coord":{
      "lat":59.9167,
      "lon":30.25
    },
    "country":"RU"
  }
}
Потом у меня есть такой метод, который его превращает в строку:

Java
1
2
3
4
5
6
String weatherData = "";
        while (in.hasNext()) {
            weatherData += in.nextLine();
        }
 
        return weatherData;
С ним я уже и работаю. Возможно, gson настолько мощный, что может прямо с сайта получить json файл в том виде, в котором он есть без необходимости его превращать в строку. Я смогла сделать так.

В итоге, чтобы вытаскивать нужные данные мне надо получить вот такого вида данные:

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
{
      "dt":1547812800,
      "main":{
        "temp":-5.72,
        "temp_min":-6.64,
        "temp_max":-5.72,
        "pressure":1005.73,
        "sea_level":1008.41,
        "grnd_level":1005.73,
        "humidity":91,
        "temp_kf":0.91
      },
      "weather":[
        {
          "id":600,
          "main":"Snow",
          "description":"небольшой снегопад",
          "icon":"13d"
        }
      ],
      "clouds":{
        "all":76
      },
      "wind":{
        "speed":4.27,
        "deg":281.504
      },
      "snow":{
        "3h":0.163
      },
      "sys":{
        "pod":"d"
      },
      "dt_txt":"2019-01-18 12:00:00"
    }
Для этого у меня уже подготовлены классы и методы get/set
0
 Аватар для worldown
189 / 177 / 111
Регистрация: 22.06.2009
Сообщений: 533
01.02.2019, 15:31
Цитата Сообщение от kulichiki96 Посмотреть сообщение
И что там чистить? 8 строчек цикла, или цикл тоже надо методом делать?
Всё нужно инкапсулировать, полиморфить, абстрагировать, наследовать. java это ООП всё должно быть по полочкам и джавадоками, что бы не гадать на кофейной гуще потом.
1)Получаем JSON или GSON делаем удобноюзабилитную коллекцию
2)Проходимся по коллекции сравнивая текущую дату с датой коллекции
3)Выводим нужный результат
0
3 / 3 / 0
Регистрация: 01.02.2019
Сообщений: 67
01.02.2019, 15:42  [ТС]
worldown, у меня загвоздка только в цикле не получается вытащить из массива нужные данные
библиотека JSON это делала так
Java
1
Integer.valueOf(weatherItem.get("dt").toString());
и всё, значение (т.е. дата/время в юникс виде) у меня есть, даль я сравниваю с "long tomorrowTime = 1549108800;" и записываю индекс этой даты как minDtIndex. Беру следующую и по новой, если она ещё ближе к "tomorrowTime", то индекс
этой даты снова записываю и т.д. В конце я получаю индекс dt в массиве, чье значение наиболее близко к tomorrowTime.

Java
1
2
3
4
long diff = Math.abs(tomorrowTime - dt);
            if(diff < timeDifference){
                timeDifference = diff;
                minDtIndex = i;
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,765
01.02.2019, 16:28
Цитата Сообщение от kulichiki96 Посмотреть сообщение
Эта часть уже не работает, ругается на массив, что это не джсон объект
Правильно ругается. У тебя list1 — это массив:
Цитата Сообщение от kulichiki96 Посмотреть сообщение
Java
1
JsonArray list1 = jsonObject.getAsJsonArray("list");
А ты пытаешься его к объекту преобразовать:
Цитата Сообщение от kulichiki96 Посмотреть сообщение
Java
1
JsonObject weatherItem = list1.getAsJsonObject();
0
 Аватар для worldown
189 / 177 / 111
Регистрация: 22.06.2009
Сообщений: 533
01.02.2019, 18:09
kulichiki96,
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package json;
 
 
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.stream.JsonReader;
 
import java.io.FileReader;
import java.util.List;
 
public class Converter {
 
 
    public static void main(String[] args) throws Exception {
        GsonBuilder builder = new GsonBuilder();
        Gson gson = builder.create();
        JsonReader reader = new JsonReader(new FileReader("C:\\projects\\mytest\\data\\message.json"));
        Data data = gson.fromJson(reader, Data.class);
        //тут у нас находится список всез dt
        System.out.print(data.list.get(0).dt);
 
    }
 
}
 
class Data {
    public String cod;
    public List<Weather> list;
}
 
class Weather {
    public String dt;
}
0
3 / 3 / 0
Регистрация: 01.02.2019
Сообщений: 67
02.02.2019, 13:06  [ТС]
worldown, спасибо) буду в понедельник разбираться
0
3 / 3 / 0
Регистрация: 01.02.2019
Сообщений: 67
04.02.2019, 14:34  [ТС]
worldown,
Всё переделала

Java
1
2
3
4
5
6
String jsonOutput= weatherDataCollect(message);
        Gson gson = new Gson();
        JsonElement element = gson.fromJson(jsonOutput, JsonElement.class);
        JsonObject jsonObject = element.getAsJsonObject();
        System.out.println(jsonObject.toString());
        JsonArray list = jsonObject.getAsJsonArray("list");
если введём команду
Java
1
JsonElement todaysWeather = list.get(0);
получим

JSON
1
{"dt":1549281600,"main":{"temp":-0.38,"temp_min":-1.3,"temp_max":-0.38,"pressure":1024.85,"sea_level":1027.5,"grnd_level":1024.85,"humidity":94,"temp_kf":0.91},"weather":[{"id":600,"main":"Snow","description":"небольшой снегопад","icon":"13d"}],"clouds":{"all":92},"wind":{"speed":2.11,"deg":271.5},"snow":{"3h":0.5445},"sys":{"pod":"d"},"dt_txt":"2019-02-04 12:00:00"}
То, что надо. у меня есть теперь "dt" и её значение 1549281600
Но это одна dt, а мне надо пройти по всем индексам массива

Начала писать и опять проблема
Java
1
2
3
4
5
for (int i = 0; i < list.size(); i++){
            JsonElement weatherItem = list.get(i); // получаем кусочек массива с dt
            Integer dt = Integer.valueOf(weatherItem.getAsString("dt").toString()); //а вот тут надо вытащить значение 
                                                                                                                     //переменной dt
        }
Как бы мне вытащить это самое значение? при использовании JSON срабатывал такой способ
Java
1
Integer dt = Integer.valueOf(weatherItem.get("dt").toString())
В gson он не работает
0
 Аватар для worldown
189 / 177 / 111
Регистрация: 22.06.2009
Сообщений: 533
04.02.2019, 15:13
Лучший ответ Сообщение было отмечено kulichiki96 как решение

Решение

kulichiki96,

Java
1
2
3
       for(int i = 0; i < list.size(); i++) {
           list.get(i).getAsJsonObject().get("dt").getAsInt();
        }
0
3 / 3 / 0
Регистрация: 01.02.2019
Сообщений: 67
04.02.2019, 15:49  [ТС]
worldown,
Java
1
2
3
4
5
6
7
8
9
for (int i = 0; i < list.size(); i++){
            JsonElement weatherItem = list.get(i);
            Integer dt = new Integer(weatherItem.getAsJsonObject().get("dt").getAsInt());
            long diff = Math.abs(tomorrowTime - dt);
                if(diff < timeDifference){
                    timeDifference = diff;
                    minDtIndex = i;
                }
        }
Так нормально будет?
0
 Аватар для worldown
189 / 177 / 111
Регистрация: 22.06.2009
Сообщений: 533
04.02.2019, 15:53
Лучший ответ Сообщение было отмечено kulichiki96 как решение

Решение

kulichiki96,
Java
1
2
3
4
5
6
7
8
for (int i = 0; i < list.size(); i++) {
    int dt = list.get(i).weatherItem.getAsJsonObject().get("dt").getAsInt();
    int diff = Math.abs(tomorrowTime - dt);
        if(diff < timeDifference){
            timeDifference = diff;
            minDtIndex = i;
        }
}
вот так лучше наверно..
да, смысл long использовать нет. лучше int

искомое dt должно быть 1548234000

Не по теме:

А что за универ что json задают делать?

1
3 / 3 / 0
Регистрация: 01.02.2019
Сообщений: 67
04.02.2019, 15:58  [ТС]
Цитата Сообщение от worldown Посмотреть сообщение
А что за универ что json задают делать?
ИТМО
Преподаватель псих, помешанный на джаве
А пятерку хочется, сейчас ещё разбираться, как локацию передать телеграммовскому боту
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,765
04.02.2019, 16:37
Цитата Сообщение от kulichiki96 Посмотреть сообщение
ИТМО
Вроде хороший вуз. Зачем ты туда поступила, если не можешь справиться с таким простым заданием?

Цитата Сообщение от kulichiki96 Посмотреть сообщение
Преподаватель псих
С чего б вдруг?

Цитата Сообщение от kulichiki96 Посмотреть сообщение
А пятерку хочется
Так может, нужно знания до пятёрки дотянуть?
0
3 / 3 / 0
Регистрация: 01.02.2019
Сообщений: 67
04.02.2019, 16:40  [ТС]
Цитата Сообщение от korvin_ Посмотреть сообщение
Зачем ты туда поступила, если не можешь справиться с таким простым заданием?
то, что для одних просто, для других сложно. А Джава у нас только месяц, я ещё не успела разобраться. Мне си шарп легче показался
0
 Аватар для worldown
189 / 177 / 111
Регистрация: 22.06.2009
Сообщений: 533
04.02.2019, 16:45
kulichiki96,
да не. нормально решаешь..
Сумбур конечно, много лишней лепнины, но это с опытом улучшится.
Си шарп почти такой же.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.02.2019, 16:45
Помогаю со студенческими работами здесь

Переделать код под С++
Всем привет! Помогите пожалуйста переделать код. Имеется программа для Матлаб, но надо переписать ее на язык С++ (RAD Studio 10.1...

Переделать код программы под Си
помогите переделать код программы под Си #include &lt;iostream&gt; using namespace std; int main() { int N, a, b, c; ...

Переделать код под стандарт C++98
с++ переделать код под стандарт с++98 #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;tuple&gt; #include &lt;cmath&gt; typedef...

Необходимо переделать код под Qt
Только начал изучать всё это дело и пока не особо понимаю, как переделать данный код под Qt. Сама задача звучит так: Входные...

Как переделать под 8.1 код
Как можно переделать этот код с приложения 8.0 Silverlight пишу под WP 8.1? Прочитать файл созданный и заполоненный который в проекте,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru