';
}
// Same .tc-room skeleton as renderRoomRow (avatar/info/top/bottom) so a group row matches the
// 1:1 rows visually — data-type="group" + data-gid instead of data-cid/data-uid is what the
// click-delegation in renderRooms() switches on. No online/typing indicator (doesn't apply to
// a group), and the avatar is a rounded square instead of a circle as the only visual cue
// distinguishing a group from a person, mirroring common chat-app convention.
function renderGroupRow(group) {
var gid = group.gid;
var name = group.name || '';
var lastMsg = group.lastMessage;
var preview = '';
if (lastMsg) {
preview = parseDisplayText(lastMsg.msm);
if (!preview) {
if (lastMsg.urlima && lastMsg.urlima.indexOf('public://') >= 0) preview = '📷';
else if (lastMsg.urlaudi && lastMsg.urlaudi.indexOf('public://') >= 0) preview = '🎵';
}
if (String(lastMsg.whosend) === String(userId)) preview = 'You: ' + preview;
} else {
preview = 'No messages yet';
}
var timeStr = group.updated ? fmtTime(unixToDbTimestamp(group.updated)) : '';
var unread = group.unreadCount > 0;
var active = activeGid === gid;
return '
';
}
var body = '';
if (msg.urlima === '_loading_') {
body += '
📷 Sending…
';
} else if (msg.urlima && msg.urlima.indexOf('public://') >= 0) {
var src = msg.urlima.replace('public://', FILES_BASE);
body += '';
}
if (msg.urlaudi && msg.urlaudi.indexOf('public://') >= 0) {
var asrc = msg.urlaudi.replace('public://', FILES_BASE);
body += '';
}
if (meta && meta.type === 'loc') {
body += locationLinkHtml(meta.lat, meta.lng);
} else if (!isSalt && text) {
body += '
' + linkifyText(escHtml(text)) + '
';
}
var time = fmtTime(msg.timestamp || '');
return '
'
+ metaHtml + body
+ '' + escHtml(time) + ''
+ '
';
}
// ── Render group messages ────────────────────────────────────────────────────
function renderGroupMessages(gid) {
var msgs = allGroupMsgs[gid] || [];
var $el = $('#tc-msgs');
var order = msgs.slice().reverse();
$el.html(order.map(renderGroupMsg).join(''));
$el.scrollTop($el[0].scrollHeight);
}
// Same shape as renderMsg(), plus a sender-name label on incoming bubbles — unlike a 1:1
// conversation, "not me" doesn't tell you who actually sent it. Reuses the identical
// urlima/urlaudi rendering, so images/audio sent from the Android app (or sendGroupImage()
// here) display correctly. Audio still has no send control in this web widget.
function renderGroupMsg(msg) {
var isMe = String(msg.whosend) === String(userId);
var side = isMe ? 'tc-out' : 'tc-in';
var parsed = parseInlineMeta(msg.msm || '');
var text = parsed.text;
var meta = parsed.meta;
var isSalt = (text.length === 18 && text.indexOf(' ') < 0);
var senderHtml = '';
if (!isMe) {
senderHtml = '
' + escHtml(msg.senderName || msg.whosend) + '
';
}
var metaHtml = '';
if (meta && meta.type === 'fwd') {
metaHtml = '
';
}
// ── Send (opc 11) ────────────────────────────────────────────────────────────
function sendMessage() {
var text = $.trim($('#tc-input').val());
if (!text || !activeCid) return;
$('#tc-input').val('').focus();
isTyping = false;
post({ opc: '11', userid: userId, cid: activeCid, msm: text, fid: '0' })
.then(function (resp) {
if (!resp) return;
var ok = (resp.resp === 3 || resp.resp === '3' ||
resp.resp === 11 || resp.resp === '11');
if (!ok) return;
var msg = {
id: resp.lastmid || String(Date.now()),
whosend: String(userId),
msm: text,
urlima: '',
urlaudi: '',
timestamp: new Date().toISOString().replace('T', ' ').substr(0, 19)
};
if (!allMsgs[activeCid]) allMsgs[activeCid] = [];
allMsgs[activeCid].unshift(msg);
renderMessages(activeCid);
if (socket && socket.connected) {
socket.emit('send-message', {
id: resp.lastmid,
chatId: activeCid,
from: String(userId),
to: String(activeUid),
message: text,
type: 'text'
});
}
});
}
// ── Send group message ───────────────────────────────────────────────────────
// Purely socket-based — group-message-send both persists (tc_group_message, via the
// signaling server) and delivers, unlike 1:1's HTTP-then-socket-notify split. The server
// echoes the message back to the sender too (see group-message-send in signaling-server-2.js),
// so onGroupSocketMessage() is what actually appends it here — no optimistic local insert.
function sendGroupMessage() {
var text = $.trim($('#tc-input').val());
if (!text || !activeGid) return;
if (!socket || !socket.connected) return;
$('#tc-input').val('').focus();
isTyping = false;
socket.emit('group-message-send', {
gid: parseInt(activeGid, 10),
from: userId,
message: text,
type: 'text',
localId: 'web-' + Date.now() + '-' + Math.random().toString(36).substr(2, 8)
});
}
// ── Send group image (group-message-send, type:"image") ─────────────────────
// Unlike 1:1 (HTTP upload then socket notify), groups have no HTTP upload endpoint —
// the server expects the raw file as a base64 string on the same socket event used for
// text (see group-message-send in signaling-server-2.js), and does its own resize/compress
// (sharp, 1024x1024 max, jpeg75) server-side before writing it and echoing "group-message"
// back to every member including the sender. That echo is what onGroupSocketMessage() uses
// to both confirm this optimistic placeholder (matched by localId) and actually display it.
function sendGroupImage(file) {
if (!activeGid) return;
if (!socket || !socket.connected) return;
if (pendingGroupImage) return; // one at a time — button is disabled meanwhile anyway
var gid = activeGid;
var localId = 'web-img-' + Date.now() + '-' + Math.random().toString(36).substr(2, 8);
pendingGroupImage = { gid: gid, localId: localId };
if (!allGroupMsgs[gid]) allGroupMsgs[gid] = [];
allGroupMsgs[gid].unshift({
id: localId, localId: localId, whosend: String(userId), senderName: myName,
msm: '', urlima: '_loading_', urlaudi: '', created: Math.floor(Date.now() / 1000)
});
renderGroupMessages(gid);
$('#tc-img-btn').attr('disabled', 'disabled');
// Safety net — if the server/socket never answers at all (disconnect mid-flight etc.),
// don't leave "Sending…" stuck forever (see the 1:1 image-send bug this mirrors).
var timeoutId = setTimeout(function () { onGroupMessageError({}); }, 20000);
compressImageIfNeeded(file, function (uploadFile) {
var reader = new FileReader();
reader.onload = function () {
clearTimeout(timeoutId);
if (!pendingGroupImage || pendingGroupImage.localId !== localId) return; // already cleared
var base64 = (reader.result || '').split(',')[1] || '';
if (!base64 || !socket || !socket.connected) { onGroupMessageError({}); return; }
socket.emit('group-message-send', {
gid: parseInt(gid, 10),
from: userId,
message: '',
type: 'image',
filedata: base64,
localId: localId
});
};
reader.onerror = function () {
clearTimeout(timeoutId);
onGroupMessageError({});
};
reader.readAsDataURL(uploadFile);
});
}
// Clears whatever group image send is currently in flight — used both for explicit
// "group-message-error" replies (bad file, not a member, rate-limited) and the
// client-side timeout above. Doesn't distinguish by localId: only one send is ever
// in flight at a time (the button is disabled meanwhile), so there's nothing to match.
function onGroupMessageError(data) {
if (!pendingGroupImage) return;
var gid = pendingGroupImage.gid;
var localId = pendingGroupImage.localId;
pendingGroupImage = null;
$('#tc-img-btn').removeAttr('disabled');
if (allGroupMsgs[gid]) {
allGroupMsgs[gid] = allGroupMsgs[gid].filter(function (m) { return m.localId !== localId; });
}
if (activeGid === gid && isOpen) renderGroupMessages(gid);
if (data && data.error) { console.warn('group image send failed:', data.error); }
}
// Resizes/re-encodes as JPEG when a file exceeds COMPRESS_THRESHOLD. Skips GIFs —
// redrawing to canvas would flatten an animated GIF to a single static frame.
// Falls back to the original file untouched if decoding/encoding fails for any reason.
function compressImageIfNeeded(file, callback) {
if (file.size <= COMPRESS_THRESHOLD || file.type === 'image/gif') {
callback(file);
return;
}
var img = new Image();
var url = URL.createObjectURL(file);
img.onload = function () {
URL.revokeObjectURL(url);
var scale = Math.min(1, COMPRESS_MAX_DIM / Math.max(img.width, img.height));
var canvas = document.createElement('canvas');
canvas.width = Math.round(img.width * scale);
canvas.height = Math.round(img.height * scale);
canvas.getContext('2d').drawImage(img, 0, 0, canvas.width, canvas.height);
canvas.toBlob(function (blob) {
callback(blob || file, !!blob);
}, 'image/jpeg', COMPRESS_QUALITY);
};
img.onerror = function () {
URL.revokeObjectURL(url);
callback(file);
};
img.src = url;
}
// ── Send image (opc 11I) ─────────────────────────────────────────────────────
function sendImage(file) {
if (!activeCid) return;
var tempId = '_img_' + Date.now();
if (!allMsgs[activeCid]) allMsgs[activeCid] = [];
allMsgs[activeCid].unshift({
id: tempId, whosend: String(userId), msm: '', urlima: '_loading_',
urlaudi: '', timestamp: new Date().toISOString().replace('T', ' ').substr(0, 19)
});
renderMessages(activeCid);
// .attr()/.removeAttr(), not .prop() — this site's jQuery predates 1.6 (which is
// when .prop() was introduced), and every other call in this file sticks to
// pre-1.6-safe APIs already.
$('#tc-img-btn').attr('disabled', 'disabled');
compressImageIfNeeded(file, function (uploadFile, wasCompressed) {
var form = new FormData();
form.append('opc', '11I');
form.append('userid', String(userId));
form.append('cid', activeCid);
form.append('image', uploadFile, wasCompressed ? 'upload.jpg' : file.name);
fetch(API_URL, { method: 'POST', body: form })
.then(function (r) { return r.ok ? r.json() : null; })
.then(function (resp) {
allMsgs[activeCid] = allMsgs[activeCid].filter(function (m) { return m.id !== tempId; });
if (resp && (resp.resp === 3 || resp.resp === '3') && resp.urlima) {
var msg = {
id: resp.lastmid || String(Date.now()),
whosend: String(userId),
msm: '',
urlima: resp.urlima,
urlaudi: '',
timestamp: new Date().toISOString().replace('T', ' ').substr(0, 19)
};
allMsgs[activeCid].unshift(msg);
if (socket && socket.connected) {
socket.emit('send-message', {
id: resp.lastmid,
chatId: activeCid,
from: String(userId),
to: String(activeUid),
message: '',
urlima: resp.urlima,
type: 'image'
});
}
}
renderMessages(activeCid);
})
.catch(function () {
allMsgs[activeCid] = allMsgs[activeCid].filter(function (m) { return m.id !== tempId; });
renderMessages(activeCid);
})
.then(function () { $('#tc-img-btn').removeAttr('disabled'); });
});
}
// ── Inline meta parser ────────────────────────────────────────────────────────
function parseInlineMeta(raw) {
if (!raw) return { text: '', meta: null };
if (raw.substr(0, FWD_MARKER.length) === FWD_MARKER) {
var end = raw.indexOf(META_ETX);
if (end < 0) return { text: raw, meta: null };
var sender = raw.substring(FWD_MARKER.length, end);
return { text: raw.substring(end + 1), meta: { type: 'fwd', sender: sender } };
}
if (raw.substr(0, REPLY_MARKER.length) === REPLY_MARKER) {
var rend = raw.indexOf(META_ETX);
if (rend < 0) return { text: raw, meta: null };
var parts = raw.substring(REPLY_MARKER.length, rend);
var sep = parts.indexOf(META_SEP);
var rsender = sep >= 0 ? parts.substring(0, sep) : parts;
var orig = sep >= 0 ? parts.substring(sep + 1) : '';
return { text: raw.substring(rend + 1), meta: { type: 'reply', sender: rsender, orig: orig } };
}
// Shared location — same "lat" + META_SEP + "lng" encoding the Android app writes
// (see LOC_MARKER / sendLocationMessage() in ActivityChat.java). No trailing text.
if (raw.substr(0, LOC_MARKER.length) === LOC_MARKER) {
var lend = raw.indexOf(META_ETX);
if (lend < 0) return { text: raw, meta: null };
var coords = raw.substring(LOC_MARKER.length, lend);
var lsep = coords.indexOf(META_SEP);
var lat = lsep >= 0 ? coords.substring(0, lsep) : coords;
var lng = lsep >= 0 ? coords.substring(lsep + 1) : '';
return { text: raw.substring(lend + 1), meta: { type: 'loc', lat: lat, lng: lng } };
}
return { text: raw, meta: null };
}
function parseDisplayText(msm) {
var p = parseInlineMeta(msm || '');
var t = p.text;
if (p.meta && p.meta.type === 'loc') return '📍 ' + LOC_LABEL;
if (t.length === 18 && t.indexOf(' ') < 0) return '';
return (p.meta ? (p.meta.type === 'fwd' ? '↪ ' : '↩ ') : '') + t;
}
// ── Badge & notifications ─────────────────────────────────────────────────────
function updateBadge() {
var n = Object.keys(unreadCids).length;
Object.keys(allGroups).forEach(function (k) {
if (allGroups[k].unreadCount > 0) n++;
});
var $b = $('#tc-badge');
if (n > 0) { $b.text(n).removeClass('tc-hidden'); }
else { $b.addClass('tc-hidden'); }
}
function showNotif(title, body) {
if (!('Notification' in window)) return;
if (Notification.permission === 'granted') {
new Notification(title, {
body: body || '',
icon: 'https://www.taleoi.com/sites/default/files/taleoi.ico'
});
} else if (Notification.permission === 'default') {
Notification.requestPermission();
}
}
// ── HTTP ──────────────────────────────────────────────────────────────────────
function post(params) {
var form = new FormData();
Object.keys(params).forEach(function (k) { form.append(k, String(params[k])); });
return fetch(API_URL, { method: 'POST', body: form })
.then(function (r) { return r.ok ? r.json() : null; })
.catch(function () { return null; });
}
// ── Helpers ───────────────────────────────────────────────────────────────────
// Group timestamps (tc_group.updated, tc_group_message.created) are unix seconds, unlike
// 1:1's "YYYY-MM-DD HH:MM:SS" strings — converts to that same shape (local time) so both can
// share fmtTime() and the plain string comparison renderRooms() sorts by.
// Formatted with UTC getters, not local — fmtTime() (below) always treats this
// "YYYY-MM-DD HH:MM:SS" shape as UTC (appending 'Z' before parsing), matching the raw
// DB timestamp strings 1:1 chat passes it directly. Using local getters here would hand
// fmtTime() an already-local time it then re-shifts by the viewer's UTC offset again.
function unixToDbTimestamp(unixSec) {
if (!unixSec) return '0';
var d = new Date(unixSec * 1000);
function pad(n) { return (n < 10 ? '0' : '') + n; }
return d.getUTCFullYear() + '-' + pad(d.getUTCMonth() + 1) + '-' + pad(d.getUTCDate()) + ' '
+ pad(d.getUTCHours()) + ':' + pad(d.getUTCMinutes()) + ':' + pad(d.getUTCSeconds());
}
function fmtTime(ts) {
if (!ts) return '';
// DB timestamps are plain "YYYY-MM-DD HH:MM:SS" in UTC (MySQL TIMESTAMP column).
// Without a trailing 'Z', the JS Date parser treats a date-TIME string (unlike a
// date-only string) as local time, not UTC — silently shifting displayed times by
// the viewer's UTC offset. The 'Z' forces correct UTC interpretation.
var d = new Date(ts.replace(' ', 'T') + 'Z');
if (isNaN(d.getTime())) return '';
var now = new Date();
if (d.toDateString() === now.toDateString()) {
return d.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
}
return (d.getMonth() + 1) + '/' + d.getDate();
}
function escHtml(s) {
return String(s == null ? '' : s)
.replace(/&/g, '&').replace(//g, '>')
.replace(/"/g, '"').replace(/'/g, ''');
}
function escAttr(s) { return escHtml(s); }
// Wraps http(s) URLs in a message's already-escaped text with clickable links. Must run
// AFTER escHtml() — matching against the escaped string is safe since escaping never
// introduces whitespace inside a URL run, and the entities it does introduce (e.g. "&"
// for a literal "&" in a query string) are exactly what a browser expects inside an href
// attribute anyway. target="_blank" + rel="noopener noreferrer" so following a link never
// navigates away from (or exposes window.opener to) the page the chat widget is floating on.
function linkifyText(escapedText) {
return escapedText.replace(/https?:\/\/[^\s<]+/g, function (url) {
var trail = '';
var m = url.match(/[.,!?:;)\]}'"]+$/);
if (m) { trail = m[0]; url = url.slice(0, -trail.length); }
if (!url) return trail;
return '' + url + '' + trail;
});
}
// A shared location (LOC_MARKER — see parseInlineMeta()) renders as a tappable card
// linking to Google Maps, matching how the Android app opens a geo: intent for the
// same coordinates. Uses an https:// maps URL instead since geo: isn't reliably
// clickable in desktop browsers.
function locationLinkHtml(lat, lng) {
var mapUrl = 'https://www.google.com/maps?q=' + encodeURIComponent(lat) + ',' + encodeURIComponent(lng);
return ''
+ '📍 ' + escHtml(LOC_LABEL) + '';
}
})(jQuery);
br| Page 45 | taleoi.com
De acordo com pesquisadores da UFMG e do Hospital Israelita Albert Einstein, essa é a estratégia do SARS-CoV-2 para manipular a maquinaria das células de defesa do hospedeiro; descoberta abre caminho para novas estratégias de tratamento
De acordo com pesquisadores da UFMG e do Hospital Israelita Albert Einstein, essa é a estratégia do SARS-CoV-2 para manipular a maquinaria das células de defesa do hospedeiro; descoberta abre caminho para novas estratégias de tratamento
Para evadir a resposta imune e se replicar no organismo humano, o vírus SARS-CoV-2, causador da COVID-19, utiliza a maquinaria das células de defesa para induzir a produção de proteínas improdutivas, ou seja, sem função protetiva. Foi o que demonstrou um estudo conduzido por pesquisadores do Hospital Israelita Albert Einstein e das universidades de São Paulo (USP) e Federal de Minas Gerais (UFMG). Publicado recentemente no International Journal of Molecular Science, o trabalho oferece uma nova base para o desenvolvimento de terapias antivirais.
Diferentemente de outros vírus (incluindo outros coronavírus) que também interferem em um mecanismo celular conhecido como splicing – responsável por “editar” o RNA mensageiro (mRNA) que dará origem a uma proteína –, o SARS-CoV-2 vai além, bloqueando de forma única a expressão de interferon (proteínas produzidas pelo sistema imunológico em resposta a infecções) e modulando populações específicas de células do sistema imunológico. A falta de detalhes mais precisos sobre esse processo tem sido um dos principais dificultadores para a criação de novas opções de tratamento para a COVID-19.
Fórum Norte e Nordeste da Indústria da Construção Civi
Imagem: Crea Amazonas
Crea Amazonas participa do Fórum Norte e Nordeste da Indústria da Construção Civi
Nos dias 19 e 20 de setembro, o Conselho Regional de Engenharia e Agronomia do Amazonas (Crea-AM), representado pelo vice-presidente do Conselho, Eng. Civil R...read more
Crea Amazonas participa do Fórum Norte e Nordeste da Indústria da Construção Civi
Nos dias 19 e 20 de setembro, o Conselho Regional de Engenharia e Agronomia do Amazonas (Crea-AM), representado pelo vice-presidente do Conselho, Eng. Civil Robson Ferreira, participa da 7ª edição do Fórum Norte e Nordeste da Indústria da Construção (FNNIC), que acontece em Aracaju (SE), com foco em compartilhar conhecimento e promover um intercâmbio de práticas que têm contribuído para evolução do setor imobiliário e de obras públicas em constante aprimoramento.
“Esse evento é de suma importância para que possamos nos manter atualizados sobre o setor da indústria da construção civil e levar esse conhecimento para os profissionais do Amazonas, a fim de que todos consigam também se manter em alinhamento com as tendências do mercado, como o Programa de Aceleração do Crescimento, que visa incentivar a economia por meio de obras nos mais diversos setores” destacou Robson
Brasil tem muitos casos provaveis de dengue este ano
acritica.com
De janeiro a agosto deste ano, o Brasil registrou 6.500.835 casos prováveis de dengue. Dados do Painel de Monitoramento de Arboviroses do Ministério da Saúde contabilizam ainda 5.244 mortes confirmadas e 1.985 em investigação para a doença. O coef...read more
De janeiro a agosto deste ano, o Brasil registrou 6.500.835 casos prováveis de dengue. Dados do Painel de Monitoramento de Arboviroses do Ministério da Saúde contabilizam ainda 5.244 mortes confirmadas e 1.985 em investigação para a doença. O coeficiente de incidência da dengue no país, neste momento, é de 3.201,4 casos para cada grupo de 100 mil habitantes.
Os números mostram que 55% dos casos de dengue foram identificados entre mulheres e 45% entre homens. As faixas etárias que mais contabilizaram infecções pela doença são de 20 a 29 anos; de 30 a 39 anos; e de 40 a 49 anos. Já os grupos menos atingidos são crianças com menos de 1 ano; idosos com 80 anos ou mais; e crianças de 1 a 4 anos.
São Paulo lidera o ranking de estados que registraram maior número de dengue grave ou com sinais de alarme este ano, com um total de 24.825 casos. Em seguida aparecem Minas Gerais (15.101), Paraná (13.535) e Distrito Federal (10.212). Já os estados com menos casos graves ou com sinais de alarme são Roraima (3), Acre (11), Rondônia (33) e Sergipe (62).
Muro de arrimo está em 15% de construção e MDR faz avaliação positiva do andamento da obra
///
Nesta quarta-feira, dia 25, o representante do Ministério da Integração e do Desenvolvimento Regional (MDR), José Henrique Trefzger, e o s...read more
Muro de arrimo está em 15% de construção e MDR faz avaliação positiva do andamento da obra
///
Nesta quarta-feira, dia 25, o representante do Ministério da Integração e do Desenvolvimento Regional (MDR), José Henrique Trefzger, e o secretário de Obras de Parintins, Albano Albuquerque, estiveram a obra de construção do novo muro de contenção (muro de arrimo). O trabalho chega a 15% de execução e teve avaliação positiva do representante do Governo Federal.
A vistoria aconteceu por toda a extensão da orla da cidade que já recebe homens e máquinas, correspondendo os trechos 1 (orla da Santa Clara) e trecho 4 (orla do São Benedito). Na Santa Clara, área próxima ao Matadouro Municipal, acontece escavação e ajustes para entrada de maquinário. Na orla do São Benedito o trabalho está em estágio mais avançado, com ação da perfuratriz das estacas para início do levantamento do muro.
O morador da Santa Clara, Sebastião Victor Trindade, 28, acredita que a obra vai dar mais segurança aos moradores e às pessoas que passam pelo local. “Além de nós moradores da Santa Clara, nessa área passam muitas pessoas que utilizam barcos e balsas para o interior. Então, a construção do muro é importante para nos dar mais segurança”, disse.
O representante MDR é especialista em infraestrutura e verificou de perto todos os locais que recebem obras e as demais áreas que também irão receber o muro de contenção. Segundo ele, os trabalhos seguem normalmente e atendem as orientações legais para execução do projeto.
De acordo com Albano Albuquerque, a obra tem previsão de dois anos de execução e vai receber total acompanhamento da Prefeitura de Parintins a partir da equipe técnica de engenheiros e arquitetos da Secretaria Municipal de Obras e Serviços Públicos (SEMOSP).
“São obras importantes e vamos continuar acompanhado todo trabalho. Vamos continuar trabalhando para evitar mais desmoronamentos que vêm afetando a cidade de Parintins. Aqui nós estamos com convênio de R$ 67 milhões conquistados pelo prefeito Bi Garcia junto ao senador Omar Aziz e já estamos com cerca de 15% já de obra executada”, informou Albano Albuquerque.
O muro de contenção de Parintins é um gigantesco projeto arquitetônico que alcança mais de 2 quilômetros de extensão ao longo da orla da cidade, estendendo-se do Matadouro Municipal, no bairro de Santa Clara, até a área da Cidade Garantido, no bairro São José Operário.
Mulher de 22 anos e presa com droga avaliada em 1 milhão
topmidianews.com.br
Ela também estava com munições, rádios comunicadores e RR 1,4 mil
Policiais militares da 3ª CICOM Companhia Interativa Comunitária (Cicom) prenderam em flagrante uma mulher de 22 anos de idade, pelo crime de tráfico de droga. Com ela, foram...read more
Ela também estava com munições, rádios comunicadores e RR 1,4 mil
Policiais militares da 3ª CICOM Companhia Interativa Comunitária (Cicom) prenderam em flagrante uma mulher de 22 anos de idade, pelo crime de tráfico de droga. Com ela, foram apreendidos aproximadamente 60 quilos de droga, 90 munições, três rádios comunicadores e R$ 1,4 mil em espécie. O nome dela não foi divulgado.
A apreensão acontece por volta 00h30, desta segunda-feira (12), no beco Raquel, bairro Petrópolis, zona sul da capital. A droga estava em uma mesa no interior de uma quitinete e foi avaliada aproximadamente R$ 1 milhão.
Na madrugada, os policiais fizeram incursão no beco Raquel e um homem fugiu de uma quitinete ao ver os miliares. Ele estava com uma bolsa e uma arma de fogo tipo pistola na mão. O suspeito deixou a porta da quitinete aberta, deixando à mostra uma grande quantidade de entorpecente em cima de uma mesa.
Os policiais entraram no local e além da droga estava a mulher. Ela informou que os entorpecentes e o dinheiro pertenciam ao seu irmão, que tinha acabado de fugir. A mulher foi presa e a droga apreendida. Ela foi levada para 1° Distrito Integrado de Polícia (DIP), onde será instaurado inquérito para investigar o caso.
TSE recebe uma denúncia de propaganda irregular por minuto
Eleições 2024: TSE recebe uma denúncia de propaganda irregular por minuto
O Tribunal Superior Eleitoral (TSE), recebeu, nos últimos dez dias, mais de 14 mil denúncias de irregularidades na propaganda eleitoral, o que dá, em média, uma denún...read more
Eleições 2024: TSE recebe uma denúncia de propaganda irregular por minuto
O Tribunal Superior Eleitoral (TSE), recebeu, nos últimos dez dias, mais de 14 mil denúncias de irregularidades na propaganda eleitoral, o que dá, em média, uma denúncia por minuto.
Seis candidatos ‘pirocas’ vão disputar as eleições municipais
As denúncias foram registradas por meio do aplicativo Pardal, disponibilizado pelo TSE. A maior parte das denúncias foi por irregularidades nas campanhas para o cargo de vereador.
A propaganda eleitoral começou oficialmente no dia 16 de agosto e deve seguir uma série de regras estabelecidas em resolução pelo TSE, seja nas ruas ou na internet.
Cerca da metade das denúncias diz respeito a campanhas para vereador. A maioria foi no estado de São Paulo (2.891), seguido por Minas Gerais (1.605), Pernambuco (1.603) e Rio Grande do Sul (1.271).
O aplicativo Pardal – disponível para celulares com sistemas operacionais Android ou iOS (Apple) – existe desde 2012, sendo aprimorado desde então.
“A principal novidade para este ano é o uso da ferramenta para denunciar desvios nas campanhas eleitorais na internet”, informou o TSE.
Poder de polícia
A ideia do aplicativo é contribuir com o poder de polícia da Justiça Eleitoral, que pode determinar a retirada de circulação de qualquer propaganda irregular.
Segundo o TSE, todas as denúncias são encaminhadas a um juiz eleitoral responsável para que tome providências.
Após fazer a denúncia, o eleitor recebe um número de protocolo e pode acompanhar o andamento por meio do Pardal Web.
Qualquer pessoa que flagrar alguma irregularidade pode denunciá-la à Justiça Eleitoral por meio do aplicativo.
Além do Pardal, o TSE disponibiliza também o Sistema de Alertas de Desinformação Eleitoral (Siade), que pode ser acionado para denúncias não relacionadas necessariamente à propaganda.
Como casos de desinformação, ameaças e incitação à violência, perturbação ou ameaça ao Estado Democrático de Direito, irregularidades no uso de Inteligência Artificial (IA), comportamentos ou discursos de ódio e recebimento de mensagens irregulares.
PC-AM prende peruano por abusar sexualmente das enteadas de 5 e 8 anos
As crimes ocorreram em agosto deste ano
A Polícia Civil do Amazonas (PC-AM), por meio da 51ª Delegacia Interativa de Polícia (DIP) de Benjamin Constant (a 1.121 quilômetros de Manaus), cumpriu, no domingo (08/09), um mandado de prisão preve...read more
As crimes ocorreram em agosto deste ano
A Polícia Civil do Amazonas (PC-AM), por meio da 51ª Delegacia Interativa de Polícia (DIP) de Benjamin Constant (a 1.121 quilômetros de Manaus), cumpriu, no domingo (08/09), um mandado de prisão preventiva contra um peruano, de 24 anos, por estupro de vulnerável cometido contra suas enteadas, de 5 e 8 anos, no referido município.
Conforme a delegada Mayara Magna, responsável pela 51ª DIP, as investigações foram iniciadas após a tia das vítimas comparecer à delegacia para denunciar o homem.
“Os crimes teriam ocorrido em agosto deste ano, sem o conhecimento da mãe. As crianças relataram para a tia que foram abusadas sexualmente pelo infrator, que as ameaçava para que não contassem o que estava acontecendo”, explicou a delegada.
Com base nas informações colhidas, foi solicitada à Justiça a emissão de um mandado de prisão preventiva para o homem, e a ordem judicial foi concedida.
“O homem foi localizado e preso, e confessou a autoria dos crimes. Também descobrimos que ele planejava fugir para o seu país de origem”, afirmou Mayara Magna.
O autor responderá por estupro de vulnerável e permanecerá à disposição da Justiça.
Noruega pode construir o primeiro “túnel flutuante
O lado oeste da Noruega é composto por 1.190 fiordes, que, embora bonitos, dificultam muito a viagem ao longo da costa do país. Atualmente, a viagem da cidade de Kristiansand, no sul, até T...read more
Noruega pode construir o primeiro “túnel flutuante
O lado oeste da Noruega é composto por 1.190 fiordes, que, embora bonitos, dificultam muito a viagem ao longo da costa do país. Atualmente, a viagem da cidade de Kristiansand, no sul, até Trondheim, no norte, leva 21 horas e requer sete travessias de balsa. Para tornar essa viagem mais fácil, a Norwegian Public Roads Administration (NPRA) propôs o primeiro túnel flutuante subaquático do mundo, que seria submerso no Mar da Noruega.
A construção está prevista para custar US$ 25 bilhões, e os planos fazem parte de um projeto maior e inovador de infraestrutura de US$ 40 bilhões.
Como seria?
O plano inclui pontes e o túnel rochoso mais profundo e longo do mundo – perfurado através da rocha sob o fundo do mar – medindo 392 metros de profundidade e 27 quilômetros de comprimento.
Mas o aspecto mais ambicioso é o desenvolvimento de túneis flutuantes submersos que ficam a cerca de 30 metros (100 pés) abaixo da superfície da água. O túnel subaquático flutuante consistiria em dois tubos de concreto de 1.220 metros de comprimento, submersos 20 metros abaixo da superfície do Mar da Noruega.
O termo “flutuante” talvez seja até enganoso. Os túneis são fixados em posição com cabos – ancorados ao fundo do mar ou amarrados a pontões que são espaçados o suficiente para permitir a passagem de barcos. Feitos de concreto, eles funcionariam como túneis convencionais, transportando veículos de uma ponta a outra de um fiorde.
Se for bem-sucedida, a Noruega poderá vencer uma corrida global contra países como China, Coreia do Sul e Itália, que estão pesquisando projetos semelhantes.
Desafios
Os maiores riscos do projeto são explosões, incêndios e sobrecarga, e por isso testes extensivos são essenciais.
A NPRA está trabalhando com o Centro de Análise Estrutural Avançada (CASA) da Universidade Norueguesa de Ciência e Tecnologia, usando explosivos vivos para “investigar como as estruturas tubulares de concreto se comportam quando submetidas a cargas de explosão internas”, disse o pesquisador da CASA, Martin Kristoffersen.
Os testes vão ajudar a equipe a entender o que aconteceria com a estrutura do túnel se, por exemplo, um caminhão que transportasse mercadorias perigosas explodisse em seu interior. Os resultados até agora indicam que a pressão constante da água que envolve os túneis flutuantes reduz os danos causados pelas explosões.
A NPRA pretende concluir iniciar a construção em breve e concluir até 2050.
Marinha divulga nomes de tripulantes que sobreviveram a naufrágio em Pernambuco
Foto: Reprodução/Arquivo Pessoal)
Os quatro tripulantes resgatados de um naufrágio em Pernambuco envolvendo o Navio Concórdia foram identificados pela a Capitania dos Portos de Pernambuco no final da tarde desta segunda-feira (16). A embarcação naufragou na noite deste domingo a 1...read more
Os quatro tripulantes resgatados de um naufrágio em Pernambuco envolvendo o Navio Concórdia foram identificados pela a Capitania dos Portos de Pernambuco no final da tarde desta segunda-feira (16). A embarcação naufragou na noite deste domingo a 15 quilômetros da praia de Ponta de Pedra, no município de Goiana, no litoral norte do estado.
Em imagens que circulam nas redes sociais é possível ver o navio sem alterações visíveis enquanto a tripulação mantinha contato com a de outra embarcação próxima. No Navio Concórdia havia nove pessoas, sendo que quatro foram resgatadas com vida, quatro morreram e uma segue desaparecida.
Por meio de nota, a Marinha do Brasil (MB) informou que as quatro pessoas resgatadas pelo Navio Rebocador de Alto Mar “Cormoran”, foram levadas para a cidade de Goiana, com o apoio de Lancha da Capitania dos Portos de Pernambuco.
Os resgatados são:
Edvaldo Baracho da Silva
Marcelo Cláudio da Conceição Freitas
Mozart Gomes da Fonseca
Valcei Gomes da Costa
A Marinha destacou que “continua com a estrutura do Salvamar Nordeste acionada, coordenando a Operação de Busca e Salvamento”.
A embarcação, que saiu do Recife no sábado (14), estaav levando uma carga de 180 toneladas de materiais de abastecimento dos mercados da ilha, além de material de construção. No domingo, a carga teria se soltado e a tripulação tentou voltar ao Recife, mas não conseguiu.
Gabriel Galípolo assume presidência do Banco Central
Gabriel Galípolo é cotado para asssumir o posto de presidente do BC - Foto: Lula Marques/ Agência Brasil
Gabriel Galípolo assume presidência do Banco Central
Desafios e expectativas: Gabriel Galípolo assume presidência do Banco Central
Gabriel Galípolo, ex-secretário executivo do Ministério da Fazenda, foi nomeado presidente do Banco C...read more
Gabriel Galípolo assume presidência do Banco Central
Desafios e expectativas: Gabriel Galípolo assume presidência do Banco Central
Gabriel Galípolo, ex-secretário executivo do Ministério da Fazenda, foi nomeado presidente do Banco Central do Brasil, sucedendo Roberto Campos Neto. Sua nomeação ocorre em um momento crucial para a economia brasileira, marcada por desafios internos e externos que exigem uma abordagem cuidadosa e inovadora na política monetária. Galípolo traz para o cargo uma vasta experiência no setor financeiro e uma visão que promete alinhar a política monetária com as diretrizes econômicas do governo federal.
Durante seu tempo no Ministério da Fazenda, ele foi conhecido por sua habilidade em navegar por complexas negociações econômicas e por sua capacidade de diálogo com diferentes setores da economia. A expectativa é que Galípolo trabalhe para manter a inflação sob controle enquanto busca estimular o crescimento econômico. Um dos principais desafios será equilibrar a necessidade de juros baixos para incentivar investimentos com a responsabilidade de controlar a inflação, que tem sido uma preocupação constante para o Banco Central.
Além disso, ele terá que lidar com as pressões políticas e econômicas internacionais que afetam diretamente a economia brasileira. A nomeação de Galípolo também sinaliza uma possível mudança na relação entre o Banco Central e o governo federal. Com um histórico de colaboração estreita com o Ministério da Fazenda, espera-se que ele promova uma maior sinergia entre as políticas fiscal e monetária, algo que pode ser crucial para o sucesso econômico do país nos próximos anos.
Caminhadas e reuniões marcam a agenda dos candidatos a prefeitura
Eleições 2024: caminhadas e reuniões marcam a agenda dos candidatos a prefeitura de Tabatinga
altando pouco menos de 26 dias para as eleições, os candidatos intensificam o trabalho para conquistar o maior número de eleitores através de suas...read more
Eleições 2024: caminhadas e reuniões marcam a agenda dos candidatos a prefeitura de Tabatinga
altando pouco menos de 26 dias para as eleições, os candidatos intensificam o trabalho para conquistar o maior número de eleitores através de suas propostas de governo.
Neste fim de semana, os 04 candidatos a prefeitura de Tabatinga, cumpriram suas agendas de campanha pelas comunidades ribeirinhas, bairros e ruas de Tabatinga com “bandeiraços”, distribuição de santinhos e reuniões com seus eleitores e simpatizantes.
O candidato Carlos Donizetti – União, visitou a comunidade de Belém do Solimões:
O candidato Plínio Cruz – Republicanos, realizou caminhada nas comunidades do Umariaçú I e Umariaçu II:
O candidato Salsicha – Avante, realizou uma carreata pelas principais ruas da cidade:
*** Todos os candidatos foram procurados pelo Portal Tabatinga. A divulgação das agendas é feita com as informações das assessorias.