Сучасна диджитал-освіта для дітей — безоплатне заняття в GoITeens ×
Mazda CX 30
×

J2Alert — J2ME-застосунок повітряної тривоги

Так, їх мало, треба ще один ;D

j2alert.mooo.com

Зляпано на колінцях за три дні, нахабно паразитує на API мапи UkrZen.

Заки з підтримкою сучасного https на старих мобілках усе погано — як тимчасове рішення, запити проксуються через мій сервер кількома рядками на Express.JS:

app.get('/api/locations.json', function(req, res) {
    fetch('https://war.ukrzen.in.ua/alerts/locations.json').then(body => body.text()).then(text => res.send(text));
});
app.get('/api/active.mp', function(req, res) {
    fetch('https://war-api.ukrzen.in.ua/alerts/api/v3/alerts/active.mp').then(body => {
        const data = [];
        body.body.on('data', (chunk) => {
            data.push(chunk);
        });
        body.body.on('end', () => {
            res.send(Buffer.concat(data))
        })
        body.body.read();
    });
});

В перспективі маю намір прикрутити MHC і lcrypto-j2me, якщо то всьо заведеться.

Програма пока сира, тицяйте обережно й за можливости звіряйте з иншими джерелами ;) Ревʼю від професійних жабістів теж не завадить — я зварювальник несправжній, і каска в мене з будівництва.

👍ПодобаєтьсяСподобалось2
До обраногоВ обраному1
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Тю, з бекендом є невеличка капость: нода ж однопотокова, й повільний GPRS підвішує сервер для всіх xD

Що порадите: можна хутенько розпаралелювання прикрутити, чи простіше переписати? Там того бекенду катма: github.com/...​t-site/blob/pan/index.mjs

UPD: прироблено cluster, наче достатньо.

слегка причесал в духе минималистского колхоза, чтобы без оверхеда с фризами:

import express from 'express';
import axios from 'axios';

const app = express();

const proxyURI = (uri, ttl = 5000) => {
  let actualRequest = null;
  let prevData;
  let ts;

  const getURI = () => {
    return actualRequest || (actualRequest = axios.get(uri, {
      responseType: 'text',
      transitional: {
        forcedJSONParsing: false
      },
      maxRedirects: 0
    }).then(response => {
      if (prevData !== response.data) {
        ts = Date.now();
        prevData = response.data;
      }

      setTimeout(() => {
        actualRequest = null
      }, ttl);

      return response;
    }));
  }

  return async (req, res) => {
    try {
      const response = await getURI();
      res.append('Last-Modified', new Date(ts).toUTCString());
      res.type('application/json');
      res.end(response.data);
    } catch (err) {
      res.status(err?.response?.status || 500).send({
        message: err.message
      });
    }
  }
}

app.set('etag', 'strong');
app.get('/api/locations.json', proxyURI('https://war.ukrzen.in.ua/alerts/locations.json'));
app.get('/api/active.mp', proxyURI('https://war-api.ukrzen.in.ua/alerts/api/v3/alerts/active.mp'));
app.use('/', express.static('./public'));

app.listen(80);

Чи є додаток для пк, який при тривозі виводить звук?

Застосунок оновлено до версії 1.3.0, тепер за можливості використовується поліфонія замість монофонії. Щонайменше в MicroEmulator звук працює (монофонію він чомусь не вміє), можна й на ПК використовувати.

Півроку ховаюся з DOU, аби тільки оце не ревʼювити, бо й так усе працює, сором який ×D

Підписатись на коментарі