Julkaistu Jätä kommentti

PDF Tools demo

Ohjelmointi projektissani tarvitsee myös tavan luoda PDF tiedostoja inventaariota, laskujen yms. tekoon. Joten tein tälläisen demon jolla saan tehtyä helposti myös listoja joka on myös yksi sen tärkeimmistä ominaisuuksista.

Seuraavia ominaisuuksia tarvitsen tässä vähintään

  • Ruudukon, kuten esim. excelissä
  • Automaattisesti lisää uusia sivuja
  • Ylä- ja alaotsakkeet
  • Kuvia

Tämäkin löytyy GitHubista.

Perus idea

Perus ideana on rankentaa PDF “palikoista”. Sivulla on ylä- ja alaotsakkeet, niiden väliin lisätään muita palikoita josta sivun muu sisältö koostuu.

Tulokset

Oikean puoleisessa piirretään myös testi tarkoituksissa kunkin tekstin, kuvan yms. alueet joihin ne on piirretty.

Julkaistu Jätä kommentti

Avalonia Dialog Manager Demo

Kerran kun Avaloniassa ei tule mukana “MessageBox” toimintoa joka on esim. WinForms puolella niin silloin täytyy käyttää valmiita ratkaisuja joita Avalonia esim. mainitsee heidän dokumentaatiossa täällä taikka tehdä oma ratkaisu.

Joten tein oman ratkaisun jonka laitoin myös GitHub sivuilleni.

Tässä lyhyesti miten se toimii demossa.

C#
using Avalonia.Collections;
using AvaloniaDialogManagerDemo.Models;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System.Threading.Tasks;

namespace AvaloniaDialogManagerDemo.ViewModels
{
    public partial class MainWindowViewModel : ViewModelBase
    {
        [ObservableProperty]
        private ItemModel? selectedItem;
        [ObservableProperty]
        private AvaloniaList<ItemModel> items;
        [ObservableProperty]
        private bool isItemSelected = false;

        public MainWindowViewModel()
        {
            items = new AvaloniaList<ItemModel>();
        }

        partial void OnSelectedItemChanged(ItemModel? value)
        {
            IsItemSelected = value != null;
        }

        [RelayCommand]
        private async Task New()
        {
            var result = await DialogManager.ShowDialog(new DialogItemViewModel(null), "Create new item", ["Ok", "Cancel"]);
            if (result.ButtonPressed == "Ok" && result.ReturningObject != null)
            {
                Items.Add((ItemModel)result.ReturningObject);
            }
        }

        [RelayCommand]
        private async Task Edit()
        {
            if (SelectedItem == null) return;

            var result = await DialogManager.ShowDialog(new DialogItemViewModel(SelectedItem), "Edit item", ["Ok", "Cancel"]);

            string oldId = SelectedItem.ID;

            if (result.ButtonPressed == "Ok" && result.ReturningObject != null)
            {
                for(int i = 0; i < Items.Count; i++)
                {
                    if (Items[i].ID == oldId)
                    {
                        Items.RemoveAt(i);
                        Items.Insert(i, (ItemModel)result.ReturningObject);
                        SelectedItem = (ItemModel)result.ReturningObject;
                        break;
                    }
                }
            }
        }

        [RelayCommand]
        private async Task Delete()
        {
            if (SelectedItem == null) return;

            var result = await DialogManager.ShowDialog(new DialogMessageViewModel($"Delete {SelectedItem.Name}?"), "Delete item", ["Ok", "Cancel"]);

            if(result.ButtonPressed == "Ok")
            {
                Items.Remove(SelectedItem);
                SelectedItem = null;
            }
        }
    }
}
Julkaistu Jätä kommentti

Puinen silmälasikotelo

img

img

Silmälasi- tai aurinkolasikotelo joka on tehty koivusta.

Kotelon sisus on pinnoitettu nylon nukkauksella ja kotelo on pintakäsitelty pellavaöljyllä. Kansi on saranoitu naudan verhoilunahalla ja kantta pitää kiinni kaksi neodyymimagneettia.

Sisämitat (leveys, syvyys, korkeus): ~14,7 x 5 x 2,8 cm

img
Julkaistu

Arduino ADC Suodatin

img

Arduino kirjasto lukujen suodattamiseen.

Kuinka suodatin toimii?

Tässä suodattimessa on juokseva keskiarvoistus raaka arvoille ADC:stä ja exponential smoothing raaka arvojen summan keskiarvolle.

Visuaaliset arvot suodattimesta

Muutamia kuvia kuinka hyvin suodatin suoriutuu.

Testissä minulla on lineaarinen hall-effect sensori (A1324) 4.7uF erotuskondensaattorilla ja Arduino nano. Uusi arvo printataan joka 10ms (115200 baud rate). Sininen viiva on korkein arvo ja punainen on alin saatu arvo Arduinosta.

Muista että sinun tulokset voivat olla erilaiset.

Raaka

img

Tässä käyrässä on raaka arvot ilman suodatinta. Arvo vaihtelee 793-791 välillä, joten erotus on 2.

Exponential smoothing alpha = 0.9

img

Arvo vaihtelee ~791.65-790.65 välillä, joten erotus on 1.

Exponential smoothing alpha = 0.1

Arvo vaihtelee ~791.3-790.8 välillä, joten erotus on 0.5.

img

Esimerkki

C++
#include <ADCFilter.h>

#define ANALOG_PIN A0
#define MS 10

//Filter has 16 channels and 6 samples by default
//To change channel count and sample count edit ADCFilter.h file
ADCFilter filter;

void setup() {
    Serial.begin(9600);

    //Alpha must be 0 < a < 1, default value is 0.1
    //The lower alpha value, the higher smoothing
    //This is not required but, to set new alpha value use:
    filter.setAlpha(0.2f);
}

void loop() {
    //Update channel 0 with new value
    filter.update(0, analogRead(ANALOG_PIN));
    //Get smoothed value from channel 0 and print it
    Serial.println(filter.get(0));

    delay(MS);
}
Julkaistu Jätä kommentti

Ensimmäinen rimakanootti

img

Rakensin ensimmäisen rimakanoottini opiskellessani veneen rakennuksen perustutkintoa. Kanootin rakennuksessa minulla oli apuna rimakanootin rakennusopas jonka on kirjoittanut Lauri Hovi.

img
Mänty lautaa, lähes oksatonta.

Tämän kanootin rakensin männystä, kuten kuvasta näkyy nämä laudat ovat lyhyen näköisiä. Rimat jatketaan viisteliitoksella. Riman vähimmäis pituus tässä kanootissa on ~5m.

Kun rimaan tehdään koverat ja kuperat syrjät voi rimoja kallistaa sulavasti mallikaaren mukaan ja samalla saumasta saa tiiviin. Saumoihin laitetaan perus puuliimaa.

img

RIMAN PROFIILI

Paksuus on 6mm
Leveys on 20mm

img

Kanootin rakentamiseen tarvitsee myös rakennuspukin johon kiinnitetään mallikaaret.
Kaaret kiinnitetään 30cm välein aloittaen rakennuspukin keskeltä.
Mallikaarissa olevilla keskiviivoilla ja narua käyttäen on mallikaaret helppo asemoida keskelle.

img

Kanoottiin tarvitaan myös yhteensä neljä keulakaarta, sisä- ja ulkokaaret. Kaaret voi tehdä samasta 6x20mm rimasta. Nämä rimat on hyvä höyryttää ennen taivuttamista jotta ne eivät napsahda poikki taivuttaessa. Yön yli kuivuttuaan liimasin ne D4 polyuretaaniliimalla.

img
img

Rimoja kasataan päällekkäin niitaten ne mallikaareen kiinni ja samalla rimojen päädyt tasataan kaartavasten.
Kuvassa olevat muoviliuskat ovat tyhjistä liimapulloista. Ne laitoin niitin kanssa jotta se ei uppoa liikaa puuhun.

img
img
img

Niittien poiston jälkeen pinnan kittaus käyttäen epoksia ja mänty hiontapölyä.

Kittauksen jälkeen hionta ja sitä tehdessä kannattaa muistaa että hiomakone pitää olla aina liikkeessä, kaarevan pinnan takia kuoppia voi syntyä tosi herkästi.

Hionnan jälkeen pinnan kyllästys epoksilla ja sen kuivuttua pinta kannattaa puhdistaa vaikka asetonilla ja tehdä vielä kevyt hionta jotta uusi epoksi kerros tarttuu hyvin.

Eli uusi kerros epoksia, lasikuitu kangas pintaan ja senkin päälle epoksia.

img

Reunat siistiksi ja sisälle myös epoksit ja kangas niin kuin ulkopuolelle.

img
img

Ulkopuolelle törmäyslistat ja sisälle sellainen jossa on rakoja jotta saa veden valutettua ulos.

img

Kansiin laitoin “koivunlehden” näköisen kaiveruksen jonka täytin epoksilla ja mahonki puupölyllä (tuli vähän mämmin näköinen sekote).

Lopuksi hionta, kaksikomponentti lakka, mela ja ei kun vesille.

img
Julkaistu Jätä kommentti

Shakkia vai tammea

img

Shakin tai tammen pelaamista raittiissa ulkoilmassa.

Renderöidyt kuvat

Symbolit

Valmiit tuotteet

Tekniset tiedot

Säilytyslaatikko

  • 12mm Filmivaneria
  • Kulmasuojalistaa
  • 40×40 Kyllästetyt jalat
  • 2kpl Laatikkokahvaa
  • 2kpl T-Saranaa
  • Riippulukko paikkainen laatikkosalpa
  • Vanerin reunat käsitelty Osmo Color suojaavalla kuultoöljyllä

Shakkinappulat

  • Mänty
  • Osmo Color suojaava kuultoöljy
  • Symbolit Tikkurila teho ikkunamaali

Tamminappulat

  • Kuusi
  • 12mm Filmivaneri
  • Osmo Color suojaava kuultoöljy