- Liittynyt
- 17.10.2016
- Viestejä
- 17 096
Csv:n kentissä on sekalaisessa formaatissa
Olisi kova, jos laitat aivan minimaalisen esimerkin tuosta datasta. Eli näkisi, miten sarakkeiden määrä vaihtelee. Varmaan pari riviä ja muutama sarake riittää.
Follow along with the video below to see how to install our site as a web app on your home screen.
Huomio: This feature may not be available in some browsers.
Hyvää joulua!
Osallistu io-techin piparikakkutalokilpailuun 2025 Linkki osallistumisketjuun >>>
SER-huutokaupat hyväntekeväisyyteen käynnissä! Linkki huutokauppaan >>>
Csv:n kentissä on sekalaisessa formaatissa
Saisko näistä copy-pastena napattua:Olisi kova, jos laitat aivan minimaalisen esimerkin tuosta datasta. Eli näkisi, miten sarakkeiden määrä vaihtelee. Varmaan pari riviä ja muutama sarake riittää.
import pandas as pd
import os
import sys
filename = os.path.abspath(sys.argv[1])
log_content = pd.read_csv(filename, sep=",", decimal=".", header=0)
log_content = log_content.iloc[:-4,11:-9]
log_content.columns = log_content.columns.str.replace('.1', '', regex=True)
log_content.columns = log_content.columns.str.replace('66', ' 16x16', regex=True)
log_content.columns = log_content.columns.str.replace('AMP6', 'AMP 16', regex=True)
log_content = log_content.replace('%', '', regex=True).astype(float)
average = log_content.describe().loc['mean'].to_string()
print (average)
with open(filename+str('.log'), mode='w') as outputfile:
outputfile.write(str(average))
outputfile.close()
Tein nyt tällaisen viritelmän, tuntuisi toimivan yhdellä tapauksella, toinen vaatii vielä tuunausta. Nuo kaksi otsikkotason korjausta on vähän omituinen juttu, csv-tiedostossa otsikot on ihan oikein, mutta read_csv ei tuo niitä sellaisenaan dataframeen vaan muuttaa ne ja korjaan ne takaisin oikeiksi. En löytänyt mitään syytä tuohon![]()
import pandas as pd
import os
import sys
filename = os.path.abspath(sys.argv[1])
log_content = pd.read_csv(filename, sep=",", decimal=".", header=0)
col_count = len(log_content.columns)
sel_cols = []
for i in range(0, col_count):
col_name = log_content.columns[i]
col_type = log_content.dtypes[i]
print("col {}: '{}', type = '{}'".format(i, col_name, col_type))
if "Intra" in col_name or "AMP" in col_name:
sel_cols.append(col_name)
print("Sarakkeet joiden nimessä esiintyy 'Intra' tai 'AMP':")
print(sel_cols)
selected_columns = log_content[sel_cols]
print(selected_columns)
# Tiedetään että valitussa setissä on vain numeroita % poiston jälkeen, muutos object -> float
result = selected_columns.replace('%', '', regex=True).astype(float)
print("Valittujen sarakkeiden keskiarvot:")
# Lasketaan valituille sarakkeille
for column in result.columns:
average = result[column].mean()
print("'{}': average = {}".format(column, average))
# Tulosten kirjoitus ulos...
Nyt pyörii lokaalisti Windows koneella, jos nyt vaikka saan ensin tässä toimimaan.Vastaus riippuu ensinnäkin siitä, missä ympäristössä työskentelet ja toiseksi siitä, pyöriikö sovellukset samassa koneessa. Linux-puolella jälkimmäisessä tapauksessa paras vastaus on yleensä socketit. Jos taas haluat lähettää koneelta toiselle, niin homma menee vähän mutkaisemmaksi.
![]()
Socket Programming HOWTO
Author, Gordon McMillan,. Abstract: Sockets are used nearly everywhere, but are one of the most severely misunderstood technologies around. This is a 10,000 foot overview of sockets. It’s not reall...docs.python.org
Oikein paljon kiitoksia, koitan googletella yleisesti socketeista ja kyselen sitten lisää tyhmiä.Jokaisella clientillä on oma socketinsa. Lähetät dataa tiettyyn socketiin niin se menee sille clientille. Jos clientit pitää tunnistaa, niin clientin pitää sitten lähettää jonkun sortin tunniste serverille. Jos palvelut on samanlaisia eri clienteille eikä tarvita mitään kirjautumista niin tämä on sinällään turhaa. Esimerkiksi vaikka weppipalvelin: clientit kyselee dataa ja serveri lähettää, serverin ei tarvitse tietää tai pitää sen enempää kirjaa kuka minkäkin socketin takana on.
2D vai 3D? Ilmeisesti pelkkä 2D.Miten lasketaan pisteen ja kolmion välinen etäisyys? Pitäsi löytää pisteelle lähin kolmio, kolmoita voi olla tuhansia. Piste ei ole minkään kolmion päällä.
[
{
"Rank": 3,
"DateTime": "2022-11-23T00:00:00+02:00",
"PriceNoTax": 0.1600,
"PriceWithTax": 0.1985
},
{
"Rank": 5,
"DateTime": "2022-11-23T01:00:00+02:00",
"PriceNoTax": 0.1799,
"PriceWithTax": 0.2231
},
async function getData() {
const response = await fetch(
'https://api.spot-hinta.fi/Today');
Access to fetch at 'https://api.spot-hinta.fi/Today' from origin 'null' has been blocked by CORS policy:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
{
mode: 'no-cors'
}
Kiitos, menihän se rivin eteenpäin vaan jostain syystä ei taida tulla dataa palvelusta tuon jälkeen.@Starglazer: Tuuppaa URL:n perään tällainen parametri, niin lähtee toimimaan:
JavaScript:{ mode: 'no-cors' }
Dokumentaatio tälle löytyy vaikka MDN:stä: fetch() - Web APIs | MDN CORS-asiaa siellä ei ole sen enempää avattu, joten sitä kannattaa lueskella itse, mutta ainakin mode on siellä dokumentoitu "jollain tasolla".
www.geeksforgeeks.org
async function getData() {
const response = await fetch(
//'https://datausa.io/api/data?drilldowns=Nation&measures=Population', method: 'GET');
'https://api.spot-hinta.fi/Today',
{
mode: 'no-cors'
}
);
console.log(response);
const data = await response.json();
console.log(data);
length = data.data.length;
console.log(length);
labels = [];
values = [];
for (i = 0; i < length; i++) {
labels.push(data.data[i].DateTime);
values.push(data.data[i].PriceNoTax);
}
new Chart(document.getElementById("bar-chart"), {
type: 'bar',
data: {
labels: labels,
datasets: [
{
label: "Hinta eur / kwh",
backgroundColor: ["#3e95cd",
"#8e5ea2",
"#3cba9f",
"#e8c3b9",
"#c45850",
"#CD5C5C",
"#40E0D0"],
data: values
}
]
},
options: {
legend: { display: false },
title: {
display: true,
text: 'Sähkön markkinahinta'
}
}
});
Kiitos, menihän se rivin eteenpäin vaan jostain syystä ei taida tulla dataa palvelusta tuon jälkeen.
Kiitos, tähän minäkin päädyin ennen kuin täältä asiaa kysyin että "CORSin ohittaminen" ei ole oikea tapa tätä hoitaa. Menee vaan vähän idea helpon APIn käyttämisestä kun sitä ei voi näin helposti käyttää suoraan web sivullaEi tuo `no-cors` toimi kuten oletat. Sen käyttämisen jälkeen et voi lukea requestin bodyä, eli dataa. Se ei siis ole ratkaisu. Ajatus on, että tuota APIa kutsutaan serveriltä, ei suoraan selaimesta. Eli pystytä serveri, joka tuota kutsuu ja tarjoilee datan selaimelle. Serveri ei aiheuta samaa ongelmaa. Tuo on siis selaimen ominaisuus.
On muitakin tapoja, mutta tuo lienee perustapa.
Kiitos, tähän minäkin päädyin ennen kuin täältä asiaa kysyin että "CORSin ohittaminen" ei ole oikea tapa tätä hoitaa. Menee vaan vähän idea helpon APIn käyttämisestä kun sitä ei voi näin helposti käyttää suoraan web sivullaMutta tätähän tämä koodaaminen on, mikään ei ole niin helppoa kuin ensin luulee.
Menee vähän turhan monimutkaiseksi kun suunnittelin web sivua jossa voisi näyttää esimerkiksi seuraavan kahdeksan tunnin pörssisähkön hinnan. Tätä voisi näyttää vaikka vanhassa tabletissa josta voisi äkkiä tarkistaa milloin pesukone kannattaa käynnistää.
En tiedä sun taustojasi, mutta noin niinku kivuttomin tapa tehdä tuo vois ehkä olla Python + Flask.Menee vähän turhan monimutkaiseksi kun suunnittelin web sivua jossa voisi näyttää esimerkiksi seuraavan kahdeksan tunnin pörssisähkön hinnan. Tätä voisi näyttää vaikka vanhassa tabletissa josta voisi äkkiä tarkistaa milloin pesukone kannattaa käynnistää.
Eikö joku tuollainen cors proxy toimisi tässä,
" It appears the domain has been grabbed by someone and is now parked via parkingcrew.net. "Eikö joku tuollainen cors proxy toimisi tässä, kuten vaikkapa tämä crossorigin.me
" It appears the domain has been grabbed by someone and is now parked via parkingcrew.net. "
getData();
async function getData() {
const response = await fetch('https://api.allorigins.win/get?url=https%3A%2F%2Fapi.spot-hinta.fi%2FToday',
{
}
);
//console.log(response);
const data = await response.json();
console.log('data', data);
data.contents = JSON.parse(data.contents);
length = data.contents.length;
console.log(length);
console.log('data.contents', data.contents);
labels = [];
values = [];
for (i = 0; i < length; i++) {
console.log('i: ',i, data.contents[i]);
labels.push(data.contents[i].DateTime);
values.push(data.contents[i].PriceNoTax);
}
Kiitos! Tällähän se toimii! Tästä on hyvä jatkaa.Koodi toimii kun muokkaa alun näin:
Koodi:getData(); async function getData() { const response = await fetch('https://api.allorigins.win/get?url=https%3A%2F%2Fapi.spot-hinta.fi%2FToday', { } ); //console.log(response); const data = await response.json(); console.log('data', data); data.contents = JSON.parse(data.contents); length = data.contents.length; console.log(length); console.log('data.contents', data.contents); labels = []; values = []; for (i = 0; i < length; i++) { console.log('i: ',i, data.contents[i]); labels.push(data.contents[i].DateTime); values.push(data.contents[i].PriceNoTax); }
xcorsit saa muuten pois chromesta tietyllä käynnistysparametrillä, en nyt muista mikä se oli.
Tällähän se toimii! Tästä on hyvä jatkaa.
temp = 3.19
tempint = int(temp)
ld = temp - tempint
print(tempint)
print(ld)
Perusongelma monissa kielissä.Hei , törmäsin pythonissa johki hämärään mitä en vain itse tajua jos esim vscodiumissa laitan tälläsen koodin:
saan vastaukseksi:Koodi:temp = 3.19 tempint = int(temp) ld = temp - tempint print(tempint) print(ld)
3
0.18999999999999995
mistä ihmeestä tuo 0.19 desimaali muuttuu tuollaiseksi.
tää on harjoittelu tehtävä jossa tähän törmäsin mutta en vain käsitä miten tuollainen voi palauttaa jotain ihan puuta heinää.
ja tehtävä on jo kyllä tehty ettei kyse ole siitä![]()
Virhe johtuu tosiaan lukujärjestelmien erosta. Digitaalitekniikalla on helpointa käyttää laskennassa sisäisesti binäärilukujärjestelmää (kantaluku 2) kun taas suurin osa ihmisistä on tottunut desimaalilukujärjestelmän käyttöön (kantaluku 10). Kokonaisluvuilla eroja ei vielä pääse syntymään. Esimerkiksi 42 eli 4*10¹ + 2*10⁰ = 40 + 2 on binäärilukuna 101010 eli 1*2⁵ + 1*2³ + 1*2¹ = 32 + 8 + 20.18999999999999995
mistä ihmeestä tuo 0.19 desimaali muuttuu tuollaiseksi.
Virhe johtuu tosiaan lukujärjestelmien erosta. Digitaalitekniikalla on helpointa käyttää laskennassa sisäisesti binäärilukujärjestelmää (kantaluku 2) kun taas suurin osa ihmisistä on tottunut desimaalilukujärjestelmän käyttöön (kantaluku 10). Kokonaisluvuilla eroja ei vielä pääse syntymään. Esimerkiksi 42 eli 4*10¹ + 2*10⁰ = 40 + 2 on binäärilukuna 101010 eli 1*2⁵ + 1*2³ + 1*2¹ = 32 + 8 + 2
![]()
Kun siirrytään desimaalipilkun toiselle puolelle niin eroja voi huomata jo kohtalaisen yksinkertaisilla luvuilla. Binäärijärjestelmässä pilkun jälkeiset osat jatkuvat vastaavasti negatiivisina kantaluvun potensseina kuten kymmenjärjestelmässäkin. 10⁻¹ = 0,1, 10⁻² = 0,01, 10⁻³ = 0,001 ja vastaavasti 2⁻¹ = 0,5, 2⁻² = 0,25, 2⁻³ = 0,125. Kymmenjärjestelmässä joidenkin murtolukujen desimaaliesitys on päättymätön luku. Esimkerksi 1/11 = 0,909090909... Binäärijärjestelmässä jo usein käytetty desimaaliluku 0,1 on päättymätön 0,000110011001100110011... Näissä molemmissa tilanteissa luku on käytännöllisistä syistä katkaistava johonkin kohtaan, jolloin loppu jää virheeksi. Esimerkiksi jos binääriluku katkaistaan niin että 2⁻¹⁵ on pienin jäljelle jäävä bitti niin desimaalilukuna tulos on 0.0999755859375 ja virhe näkyy jo heti ensimmäisessä desimaalissa (pyöristämällä oikein olisi päästy vähän lähemmäs).
![]()
Katkaisusta johtuva epätarkkuus ei koske vain päättymättömiä esityksiä vaan suurimpaan osaan laskujen tuloksista tulee jonkinlaista numeerista virhettä.
Tietokoneissa käytetään yleisesti IEEE 754 standardia desimaaliosan sisältävien lukujen esitykseen. Python taitaa käyttää standardin binary64 formaattia, joka tunnetaan myös float64 tai double nimillä. Tuo standardi määrittää kuinka monta merkitsevää bittiä lukuun tulee mukaan (53) ja millä skaalalla ensimmäisen merkitsevän bitin eksponentti voi olla (-1022 ... 1023). Koska tuo exponentti eli "pilkun paikka" voi tuossa standardissa liikkua joustavasti niin puhutaankin liukuluvuista. Standaridssa on myös vähemmän tarkkoja formaatteja kuten binary32 ja binary16. Usein jos alempi tarkkuus on omaan käyttöön riittävä voidaan sitä käyttämällä päästä suurempiin laskentanopeuksiin. Esimerkiksi yhden binary64 laskennan aikana voidaan usein tehdä kaksi binary32 laskentaa.
Sama standardi määrittää myös desimaalilukuihin perustuvia formaatteja kuten decimal64. Näillä laskenta ei ole tietokoneella yhtä nopeaa kuin binääri formaateilla, mutta niille on omat käyttökohteensa niin kuin @Zigh mainitsikin.
<?php
class ImageFilterIterator extends FilterIterator {
public function accept(): bool {
return $this->isFile() && in_array(strtolower($this->getExtension()), ["jpg", "png", "webp"]);
}
}
$images = [];
foreach (range(1, 13) as $i) {
$dir = __DIR__ . "/cam" . $i;
[$images[$i], $ctime] = [null, 0];
foreach (new ImageFilterIterator(new FilesystemIterator($dir)) as $info) {
if ($info->getCTime() > $ctime) {
[$images[$i], $ctime] = [$info->getFilename(), $info->getCTime()];
}
}
}
header("Refresh: 300");
?>
<!DOCTYPE html>
<html lang="fi">
<head>
<meta charset="utf-8">
<title>Uusimmat kuvat</title>
<style>
img { width: 65%; }
a { display: block; margin: 0.5rem; }
</style>
</head>
<body>
<?php
foreach ($images as $i => $img) {
$src = $img ? "cam$i/" . htmlspecialchars($img) : "data:,x";
echo "<a href='cam$i'><img src='$src' alt='Kamera $i' /></a>";
}
?>
</body>
</html>
Löytyisikö apuja nettisivun koodin muokkaamiseen, sivun koodi hakee joka kansiosta uusimman kuvan, nyt pitäisi muokata niin, että pystyn vaihtamaan kuvien järjestystä. Nyt menee siis cam1, cam2...cam13 numerojärjestyksessä, miten saisi helposti näkymään esim. cam1, cam4, cam5, cam2 jne.
PHP:<?php class ImageFilterIterator extends FilterIterator { public function accept(): bool { return $this->isFile() && in_array(strtolower($this->getExtension()), ["jpg", "png", "webp"]); } } $images = []; foreach (range(1, 13) as $i) { $dir = __DIR__ . "/cam" . $i; [$images[$i], $ctime] = [null, 0]; foreach (new ImageFilterIterator(new FilesystemIterator($dir)) as $info) { if ($info->getCTime() > $ctime) { [$images[$i], $ctime] = [$info->getFilename(), $info->getCTime()]; } } } header("Refresh: 300"); ?> <!DOCTYPE html> <html lang="fi"> <head> <meta charset="utf-8"> <title>Uusimmat kuvat</title> <style> img { width: 65%; } a { display: block; margin: 0.5rem; } </style> </head> <body> <?php foreach ($images as $i => $img) { $src = $img ? "cam$i/" . htmlspecialchars($img) : "data:,x"; echo "<a href='cam$i'><img src='$src' alt='Kamera $i' /></a>"; } ?> </body> </html>
$images = [];
$cams = [1, 4, 5, 2]; // Tähän kamerat haluttuun järjestykseen
foreach ($cams as $i) {
<div id="synthGroundPlane">
<svg height="200%" width="200%" id="synthGroundGrid" class="groundArea">
<<defs>
<pattern id="synthGroundGridLines" width="100" height="100"
patternUnits="userSpaceOnUse">
<path d="M 100 0 L 0 0 0 100"
fill="none" />
</pattern>
</defs>
<<rect x="-50%" y="-50%" width="500%" height="200%" fill="url(#synthGroundGridLines)"/>
Sorry, your browser does not support inline SVG.
</svg>
</div>
#synthGroundPlane {
width: 100%; height: 50%;
background-color: darkmagenta;
position: absolute;
bottom: 0%;
left: 0%;
-webkit-perspective: 500px;
-webkit-perspective-origin: 50%;
}
#synthGroundGrid {
position: relative;
left: -50%;
stroke: turquoise;
stroke-width: "1.5rem";
background-color: lightslategray;
-webkit-transform: rotateX(30deg);
}
overflow: hidden;CSS ongelma:
Minulla on 100% viewport levyinen <div> elementti, korkeus 50%. Tämän sisällä haluaisin näyttää <svg> elementin, joka on diviä isompi, niin että grafiikkaa ei piirretä parentin boxin ulkopuolelle, vaan se leikkautuisi <div> elementin rajoihin. Kuinka tämä oikein pakotetaan?
HTML:<div id="synthGroundPlane"> <svg height="200%" width="200%" id="synthGroundGrid" class="groundArea"> <<defs> <pattern id="synthGroundGridLines" width="100" height="100" patternUnits="userSpaceOnUse"> <path d="M 100 0 L 0 0 0 100" fill="none" /> </pattern> </defs> <<rect x="-50%" y="-50%" width="500%" height="200%" fill="url(#synthGroundGridLines)"/> Sorry, your browser does not support inline SVG. </svg> </div>CSS:#synthGroundPlane { width: 100%; height: 50%; background-color: darkmagenta; position: absolute; bottom: 0%; left: 0%; -webkit-perspective: 500px; -webkit-perspective-origin: 50%; } #synthGroundGrid { position: relative; left: -50%; stroke: turquoise; stroke-width: "1.5rem"; background-color: lightslategray; -webkit-transform: rotateX(30deg); }
Minulla on 100% viewport levyinen <div> elementti, korkeus 50%. Tämän sisällä haluaisin näyttää <svg> elementin, joka on diviä isompi, niin että grafiikkaa ei piirretä parentin boxin ulkopuolelle, vaan se leikkautuisi <div> elementin rajoihin. Kuinka tämä oikein pakotetaan?
.container {
width: 70vw;
height: 50vh;
background: red url('https://www.svgrepo.com/show/433965/weary-face.svg') center no-repeat;
background-size: 120%;
}
overflow: hidden;
Tosin en oo 100% toimiiko position relativen kanssa ja pääse nyt testaamaan.
Kerkesin jo lopettaa, mutta jatkan illemmalla, kiitos jo etukäteen!Pääsetkö tällä vauhtiin:
Koodi:.container { width: 70vw; height: 50vh; background: red url('https://www.svgrepo.com/show/433965/weary-face.svg') center no-repeat; background-size: 120%; }
Arvot valittu että näet mitä tossa tapahtuu. Pointtina se, että käytä svg:tä divin taustana.
Tämä ratkaisi ongelman. Tuli upea, kiitos!overflow: hidden;
Tosin en oo 100% toimiiko position relativen kanssa ja pääse nyt testaamaan.
<body>
<div id="syntCanvasPlane">
<div id="synthSkyPlane">
</div>
<div id="synthGroundPlane">
<svg width="2000%" height="200%" id="synthGroundGrid" class="groundArea">
<<defs>
<pattern id="synthGroundGridLines" width="100" height="100"
patternUnits="userSpaceOnUse">
<path d="M 100 0 L 0 0 0 100"
fill="none" />
</pattern>
</defs>
<<rect x="-50%" y="0%" width="200%" height="200%" fill="url(#synthGroundGridLines)"/>
Sorry, your browser does not support inline SVG.
</svg>
</div>
</div>
</body>
#synthGroundPlane {
width: 100%; height: 50%;
background-color: darkmagenta;
position: absolute;
bottom: 0%;
left: 0%;
overflow: hidden;
-webkit-perspective: 500px;
-webkit-perspective-origin: 50%;
}
#synthGroundGrid {
position: relative;
left: -50%;
stroke: turquoise;
stroke-width: "1.5rem";
/* background-color: lightslategray; /* DEBUG */
/* -webkit-transform: rotateX(30deg); */
animation: flowing_ground_grid 3s linear infinite;
}
#synthGroundGridLines {
stroke-width: 2.5rem;
}
@keyframes flowing_ground_grid {
from {
-webkit-transform: translateY(-250px) rotateX(30deg) translateY(-10%);
}
to {
-webkit-transform: translateY(-250px) rotateX(30deg) translateY(10%);
}
}
Mikähän tässä on taustalla miksi noin pitäisi tehdä? Tietoturva tulee aika jyrkästi vastaan. Nykyaikainen tapa olisi se, että se toinen palvelin/palvelu tarjoaisi APIn, jolla voisi tietoja välittää. Tai sit ihan vain linkki ko. lomakkeeseen APIn uupuessa on myöskin selkeesti parempi ratkaisu tietämättä miksi ei olisi.Yleensä nettisivuille on lisätty toisella palvelimella oleva lomake tms. miniapplikaatio iframen avulla.
Mikä tähän olisi nykyaikainen tekniikka / tapa jos haluaisi vähän paremmin responsiivisen mitä iframe?
Kyseessä olisi erillisellä palvelimella hostattu vuejs lomake jonka pitäisi myös pystyä postaamaan tietoa palvelimelle ja se tulisi käyttöön useammalle eri sivustolle/domainiin
En tiedä moderneista tavoista, sillä mielestäni tähän ei ole olemassa konventiota. Aiemmassa vastauksessa todettu, erillisen rajapinnan käyttö lienee loogisinta. Mutta jos se ei ole mahdollista, niin:Yleensä nettisivuille on lisätty toisella palvelimella oleva lomake tms. miniapplikaatio iframen avulla.
Mikä tähän olisi nykyaikainen tekniikka / tapa jos haluaisi vähän paremmin responsiivisen mitä iframe?
Kyseessä olisi erillisellä palvelimella hostattu vuejs lomake jonka pitäisi myös pystyä postaamaan tietoa palvelimelle ja se tulisi käyttöön useammalle eri sivustolle/domainiin
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
<link rel="stylesheet" type="text/css" href="popup.css" />
</head>
<body>
<div id="redirections"></div>
<script src="../common/browser-polyfill.js"></script>
<script src="popup.js" type="module"></script>
</body>
</html>
#redirections {
text-align: center;
}
button {
width: 100%;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
body.mobile button {
height: 40px;
margin-bottom: 5px;
}


Mikähän tässä on taustalla miksi noin pitäisi tehdä? Tietoturva tulee aika jyrkästi vastaan. Nykyaikainen tapa olisi se, että se toinen palvelin/palvelu tarjoaisi APIn, jolla voisi tietoja välittää. Tai sit ihan vain linkki ko. lomakkeeseen APIn uupuessa on myöskin selkeesti parempi ratkaisu tietämättä miksi ei olisi.
JavaScriptillä sain levennettyä popupia, olisin vain halunnut löytää puhtaan CSS-keinon, mutta käy se noinkin.Mulla on selainlisäosa, jossa browser actionissa, eli selaimen osoiterivin vieressä olevasta napista painamalla aukeavassa ikkunassa on buttoneita ja jos teksti on jossain liian pitkä ettei mahdu, niin sitten lyhennettäisiin ellipsisillä. Tämä toimii Firefoxissa ok, mutta Chromessa pisin teksti lyhennetään aina, vaikka se olisi lyhyt. Aika spesifi kysymys, en tiedä tekeekö kukaan muu täällä lisäosia. Tässä linkki lisäosaan, voi olla, ettei pelkästä koodista pysty päättelemään mikä on vialla. Redirect Link
HTML:<!doctype html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width,initial-scale=1.0" /> <link rel="stylesheet" type="text/css" href="popup.css" /> </head> <body> <div id="redirections"></div> <script src="../common/browser-polyfill.js"></script> <script src="popup.js" type="module"></script> </body> </html>
Buttonit tulevat tuonne #redirectionsiin.
CSS:#redirections { text-align: center; } button { width: 100%; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } body.mobile button { height: 40px; margin-bottom: 5px; }
JavaScript lisää buttonit tuonne.
Kuvat vielä miltä näyttää eri selaimissa.
![]()
Minulle on päässyt kertymään muutamia kymmeniä Powershell-scriptejä. Suurin osa niistä tekee jotain hyödyllistä ja muutamat ovat vain lyhyitä pätkiä "muistiinpanoja", joita käytän kun teen scriptejä.
Juuri nyt niitä ei käytä kukaan muu kuin minä. Ainakin osan olisi silti hyvä olla myös muiden saatavissa (esim. Intunessa käytettävät.)
Säilytän niitä vain .ps1 -tiedostoina verkkolevyllä. Tähän olisi varmaan jotain kätevämpiäkin tapoja tai työkaluja. Ehdotuksia?
Juurikin tätä olin itse ehdottamassa. Samalla voi saada jopa parannusehdotuksiakin hyvän karman lisäksi. Aiheittain, yksittäin tai kaikki samaan repoon. Nykyää (ollu jo hyvän aikaa microsoftin ostettua palvelun) githubissa privaatti-repotki ilmaisia ilman ehtoja, jos menny ohi.Tee vaikka GitHubiin joku repo, minne sitten annat käyttöoikeudet muille tarvittaessa? Tai jos on yleisluontoisia skriptejä mitä voi jakaa julkisesti, niin laita vaikka koko repo julkiseksi.
Käytämme välttämättömiä evästeitä, jotta tämä sivusto toimisi, ja valinnaisia evästeitä käyttökokemuksesi parantamiseksi.