
スイスポ

@ZC33S@fedibird.com
@ZC33S@fedibird.com
@ZC33S@fedibird.com
@opensuse@fosstodon.org
@opensuse@fosstodon.org
@flaky@app.wafrn.net
@Linux@mastodon.de · Reply to mcc's post
Windows 7 can still be patched — ironically — thanks to @kirb who runs the "Legacy Update" https://legacyupdate.net
It’s important to note that you won’t receive new updates — rather, "Legacy Update" restores all the content Microsoft removed when they ended support for Windows 7.
Legacy Update is compatible with Windows 2000, XP, Vista, 7, 8, 8.1, 10, and 11 (including their equivalent Windows Server editions).
They also run a sister site called Windows Update Restored, which supports Windows 95, 98, 98 SE, Windows ME, and Windows NT: https://windowsupdaterestored.com
I still suggest people try Linux, of course. Running an outdated operating system while connected to the internet carries risks.
@forest_watch_impress@rss-mstdn.studiofreesia.com
タスクバーから簡単にアクセスできるネットワークスピードテスト機能がWindows 11に
https://forest.watch.impress.co.jp/docs/news/insiderpre/2051197.html
#forest_watch_impress #ネットワーク #タスクバー #タスクトレイ #インターネット #Windows #システム_ファイル #デスクトップ #システム
@forest_watch_impress@rss-mstdn.studiofreesia.com
タスクバーから簡単にアクセスできるネットワークスピードテスト機能がWindows 11に
https://forest.watch.impress.co.jp/docs/news/insiderpre/2051197.html
#forest_watch_impress #ネットワーク #タスクバー #タスクトレイ #インターネット #Windows #システム_ファイル #デスクトップ #システム
@computertruhe@social.computertruhe.de
Am 14.10. endet der Support für #Windows10 und es wird keine Feature- und v. a. auch keine Sicherheitsupdates mehr geben. Wenn euer PC nicht für #Windows11 geeignet ist, könnt ihr ihn dennoch sehr wahrscheinlich mit einem anderen Betriebssystem weiternutzen.
Unter https://endof10.org/de/ findet ihr hierzu weitere Infos und auch Veranstaltungen in eurer Nähe, bei denen ihr Unterstützung für den Umstieg erhaltet.
Wir empfehlen übrigens #Linux. Wieso? ➡️ https://computertruhe.de/2025/05/28/linux-und-die-computertruhe-ein-perfektes-match/
@computertruhe@social.computertruhe.de
Am 14.10. endet der Support für #Windows10 und es wird keine Feature- und v. a. auch keine Sicherheitsupdates mehr geben. Wenn euer PC nicht für #Windows11 geeignet ist, könnt ihr ihn dennoch sehr wahrscheinlich mit einem anderen Betriebssystem weiternutzen.
Unter https://endof10.org/de/ findet ihr hierzu weitere Infos und auch Veranstaltungen in eurer Nähe, bei denen ihr Unterstützung für den Umstieg erhaltet.
Wir empfehlen übrigens #Linux. Wieso? ➡️ https://computertruhe.de/2025/05/28/linux-und-die-computertruhe-ein-perfektes-match/
@teleclimber@social.tchncs.de
I ran into this site while looking up things and it's incredible how some dev's personal site can bring so much joy and awe.
Minimize the blog post and explore the Start menu! I hope you weren't planning on doing anything productive in the next 20 minutes.
https://ashk.au/2022/10/03/a-self-hosters-guide-to-port-forwarding-and-ssh-tunnels/
@dalstroka@snabelen.no
Skjermskot frå ein nyoppsett elev-pc i dag. Stakkars små!
Edge. TCO Certified. Microsoft store. Copilot! ....LinkedIn???! Me snakkar 13-åringar i den norske #skulen. Er folk heilt ute? 😖🤯 #Microsoft #Windows
@dalstroka@snabelen.no
Skjermskot frå ein nyoppsett elev-pc i dag. Stakkars små!
Edge. TCO Certified. Microsoft store. Copilot! ....LinkedIn???! Me snakkar 13-åringar i den norske #skulen. Er folk heilt ute? 😖🤯 #Microsoft #Windows
@vjprema@fosstodon.org
This site does considerably better than just asking "Is this the year of the Linux Desktop?".
It lists and breaks down the current status of major software support in Linux, so you can decide whether the switch is right for you at the current moment, as well as a guide to help you make an informed choice on distro and know what else you might be getting into.
@Raccoon@techhub.social
I sure see a lot of people moving to, or talking about moving to #Linux, as #Microsoft continues to bumble the whole #Windows 11 thing, and I see a lot of the people who do switch remarking about how easy and even fun it is to use (especially #KDE) and how their aging hardware is suddenly running like it did back on Win 7 or 8....
With all the time and work that has gone into Linux and the #OpenSource #Software that is easily available for it, leading to the current "better than Windows" situation, on top of #Valve pushing all this #Wine/#Proton support with #SteamDeck's #Arch based #SteamOS, and Microsoft failing to convince consumers in this round of "we won't write software for your computer that still runs well so go buy a new one.", could this be Linux's time?
Like I'm not saying it's going to overtake Windows in popularity, but damn, it's starting to feel closer to mainstream by the day...
@Raccoon@techhub.social
I sure see a lot of people moving to, or talking about moving to #Linux, as #Microsoft continues to bumble the whole #Windows 11 thing, and I see a lot of the people who do switch remarking about how easy and even fun it is to use (especially #KDE) and how their aging hardware is suddenly running like it did back on Win 7 or 8....
With all the time and work that has gone into Linux and the #OpenSource #Software that is easily available for it, leading to the current "better than Windows" situation, on top of #Valve pushing all this #Wine/#Proton support with #SteamDeck's #Arch based #SteamOS, and Microsoft failing to convince consumers in this round of "we won't write software for your computer that still runs well so go buy a new one.", could this be Linux's time?
Like I'm not saying it's going to overtake Windows in popularity, but damn, it's starting to feel closer to mainstream by the day...
@vjprema@fosstodon.org
This site does considerably better than just asking "Is this the year of the Linux Desktop?".
It lists and breaks down the current status of major software support in Linux, so you can decide whether the switch is right for you at the current moment, as well as a guide to help you make an informed choice on distro and know what else you might be getting into.
@jon@vivaldi.net
I asked Windows 10 users what they were planning to do as Windows 10 stops getting free updates. The answers may surprise you.
Only 9% plan to move to Windows 11. 1% plan to pay for updates. 22% want to keep using Windows 10, even without security updates. 61% plan to switch to Linux. 6% plan something else.
Obviously this is a survey done here in the Fediverse, but this is quite interesting and could mean more users coming to Linux, which IMHO is a good thing.
I just made the switch and I am quite happy with it. At the same time I always look for improvements and issues to resolve. It is kind of in my blood.
@jon@vivaldi.net
I asked Windows 10 users what they were planning to do as Windows 10 stops getting free updates. The answers may surprise you.
Only 9% plan to move to Windows 11. 1% plan to pay for updates. 22% want to keep using Windows 10, even without security updates. 61% plan to switch to Linux. 6% plan something else.
Obviously this is a survey done here in the Fediverse, but this is quite interesting and could mean more users coming to Linux, which IMHO is a good thing.
I just made the switch and I am quite happy with it. At the same time I always look for improvements and issues to resolve. It is kind of in my blood.
@docyeet@halis.io
The possibly worst situation happened
For the last 5 years, I have been developing most of my homelab and personal projects from WSL, because when I started, I preferred the flexibility of still having Windows in case I need it
In those 5 years, times have changed, and so did my usage of Windows, as being a simple WSL shell (yeah I know, ironic)
The problem ? Today, Windows decided the vhdx file storing my WSL file system had to go… No message, no traces of it, my WSL setup, containing all my projects, is done
I am now trying to recover my files (if you have any tips, I will happily take them) but I do not count on retrieving much… Most of it was committed to git, but a good portion was still uncommitted…
That’s the final nail in the coffin for Windows, once I’m done with the recovery, it gets nuked in favour of Linux, it’s just a shame it had to happen like this…
#homelab #windows #windows11 #nightmare #wsl #wsl2 #opensource #linux #migration #datarecovery
@docyeet@halis.io
The possibly worst situation happened
For the last 5 years, I have been developing most of my homelab and personal projects from WSL, because when I started, I preferred the flexibility of still having Windows in case I need it
In those 5 years, times have changed, and so did my usage of Windows, as being a simple WSL shell (yeah I know, ironic)
The problem ? Today, Windows decided the vhdx file storing my WSL file system had to go… No message, no traces of it, my WSL setup, containing all my projects, is done
I am now trying to recover my files (if you have any tips, I will happily take them) but I do not count on retrieving much… Most of it was committed to git, but a good portion was still uncommitted…
That’s the final nail in the coffin for Windows, once I’m done with the recovery, it gets nuked in favour of Linux, it’s just a shame it had to happen like this…
#homelab #windows #windows11 #nightmare #wsl #wsl2 #opensource #linux #migration #datarecovery
@ArchiveOS@mastodon.social
Maelstrom – a web browser based on P2P technology, used torrent networks. Its use contributes to faster web page loading, especially when users are nearby and browsing the same website. https://archiveapp.org/maelstrom/ #webbrowser #p2p #windows
@ArchiveOS@mastodon.social
Maelstrom – a web browser based on P2P technology, used torrent networks. Its use contributes to faster web page loading, especially when users are nearby and browsing the same website. https://archiveapp.org/maelstrom/ #webbrowser #p2p #windows
@jon@vivaldi.net
I have finally moved over to Linux as my primary platform. In many ways it is like coming home, as I loved working on UNIX machines in the past. Of course, I have been using Linux as a secondary OS for a long time, but I finally made the switch. Microsoft cancelling Windows 10 and the direction Windows 11 is going was just too much for me.
@ruario helped the transition, by making it easy for me to work with multiple concurrent @Vivaldi installs.
That is a must for me as I test a lot of builds at the same time.
@jon@vivaldi.net
I have finally moved over to Linux as my primary platform. In many ways it is like coming home, as I loved working on UNIX machines in the past. Of course, I have been using Linux as a secondary OS for a long time, but I finally made the switch. Microsoft cancelling Windows 10 and the direction Windows 11 is going was just too much for me.
@ruario helped the transition, by making it easy for me to work with multiple concurrent @Vivaldi installs.
That is a must for me as I test a lot of builds at the same time.
@jon@vivaldi.net
I have finally moved over to Linux as my primary platform. In many ways it is like coming home, as I loved working on UNIX machines in the past. Of course, I have been using Linux as a secondary OS for a long time, but I finally made the switch. Microsoft cancelling Windows 10 and the direction Windows 11 is going was just too much for me.
@ruario helped the transition, by making it easy for me to work with multiple concurrent @Vivaldi installs.
That is a must for me as I test a lot of builds at the same time.
@heiseonline@social.heise.de
Millennium-Ausgabe von Windows ist 25 Jahre alt
Am 14. September 2000 veröffentlichte Microsoft mit Windows ME die letzte Windows-Fassung, die auf dem Betriebssystem-Dino MS-DOS aufbaute. Was war dran?
@heiseonline@social.heise.de
Millennium-Ausgabe von Windows ist 25 Jahre alt
Am 14. September 2000 veröffentlichte Microsoft mit Windows ME die letzte Windows-Fassung, die auf dem Betriebssystem-Dino MS-DOS aufbaute. Was war dran?
@dfx@techhub.social
Für die Retro Sammler da draußen:
Die 1993er Disketten von Windows 3.1 sind jetzt auch im Internet Archive mit 300dpi Scans und Disk Images hochgeladen. Die alten Disketten von 1992 bleiben aber natürlich weiterhin verfügbar. Vom Dateiinhalt her unterscheiden sich beide Designs allerdings nicht.
1992: https://archive.org/details/mswin_3.1_de
1993: https://archive.org/details/mswin_3.1_de_1993
Viel Spaß! 😉
#RetroComputing #Windows #Win31 #90er #Retro #Nostalgia #Diskette #FloppyDisk #Microsoft
@melroy@mastodon.melroy.org
Windows 7 is growing in popularity and increase in user base? Haha this is wonderful news, if you are using windows. Hack why not? You don't get any updates, but at least it's running faster and less hardware requirements than Windows 11 needs.
@forest_watch_impress@rss-mstdn.studiofreesia.com
「Google Chrome」に深刻度「Critical」の致命的な脆弱性、アップデートを/Windows環境には修正版のv140.0.7339.127/.128が展開中
https://forest.watch.impress.co.jp/docs/news/2046101.html
#forest_watch_impress #Google_Chrome #セキュリティ #脆弱性 #Windows #インターネット #Webブラウザー #Mac #Linux
@forest_watch_impress@rss-mstdn.studiofreesia.com
「Google Chrome」に深刻度「Critical」の致命的な脆弱性、アップデートを/Windows環境には修正版のv140.0.7339.127/.128が展開中
https://forest.watch.impress.co.jp/docs/news/2046101.html
#forest_watch_impress #Google_Chrome #セキュリティ #脆弱性 #Windows #インターネット #Webブラウザー #Mac #Linux
@eugenialoli@mastodon.social
Another day, another old computer gets new life with #Linux Mint! This Fujitsu laptop is going back to its owner this week!
I also gave my old DELL laptop (from 2010, with 4 GB RAM) to a friend who could never afford a PC at home. She said that it works great and she's very happy.
I never had a single complaint from people who have used only #Windows in the past. I modify Linux Mint and I make it so recognizable to them that they're at home.
@eugenialoli@mastodon.social
Another day, another old computer gets new life with #Linux Mint! This Fujitsu laptop is going back to its owner this week!
I also gave my old DELL laptop (from 2010, with 4 GB RAM) to a friend who could never afford a PC at home. She said that it works great and she's very happy.
I never had a single complaint from people who have used only #Windows in the past. I modify Linux Mint and I make it so recognizable to them that they're at home.
@davidschultz@mastodon.social
Viele perfekt funktionierende Computer sollen Microsoft zufolge ab Oktober auf den Müll.
Dieses Video von Heise zeigt, wie man den PC stattdessen besser als je zuvor laufen lässt. Und zwar erklärt es – ohne dass Vorkenntnisse vorausgesetzt werden – wie man eine einfache Linux-Version installiert.
https://peertube.heise.de/w/699d167d-a1b9-4458-964a-d1b006646afc
Ansonsten: http://technikspenden.de/
#Umweltschutz #Ressourcenschutz #Nachhaltigkeit #Elektroschrott #Müll #Windows #Windows10 #Windows11 #EndOf10 #Linux #Computer #PC
@amoroso@oldbytes.space
Avalonia Visual Basic 6 is a recreation of the Visual Basic 6 IDE that also runs in the browser. It looks quite close to the original.
https://github.com/BAndysc/AvaloniaVisualBasic6
@amoroso@oldbytes.space
Avalonia Visual Basic 6 is a recreation of the Visual Basic 6 IDE that also runs in the browser. It looks quite close to the original.
https://github.com/BAndysc/AvaloniaVisualBasic6
@simsus@social.tchncs.de
Ja, #Linux ist wirklich so einfach | Win-10-Ende | heise online https://www.heise.de/news/Ja-Linux-ist-wirklich-so-einfach-Win-10-Ende-10632924.html #Windows
#Windows10 #EoL #EndOfLife #Microsoft #MicrosoftWindows #OpenSource #ct3003
@simsus@social.tchncs.de
Ja, #Linux ist wirklich so einfach | Win-10-Ende | heise online https://www.heise.de/news/Ja-Linux-ist-wirklich-so-einfach-Win-10-Ende-10632924.html #Windows
#Windows10 #EoL #EndOfLife #Microsoft #MicrosoftWindows #OpenSource #ct3003
@prime@mastodon.gamedev.place
(re) Started my Linux journey today. Last time I used Linux was around 2005.
It has come... a very long way in 20 years lol.
I can't believe how smoothly everything is running. So fast. Everything works. My bluetooth mouse, my Xbox controller, my webcam, my bluetooth headphones.
No enshittification, no copilot, no ads. Just feels like a pure "this is my computer" experience so far.
I bought a brand new Lenovo Thinkpad for this, and have already deleted Windows 11.
@prime@mastodon.gamedev.place
(re) Started my Linux journey today. Last time I used Linux was around 2005.
It has come... a very long way in 20 years lol.
I can't believe how smoothly everything is running. So fast. Everything works. My bluetooth mouse, my Xbox controller, my webcam, my bluetooth headphones.
No enshittification, no copilot, no ads. Just feels like a pure "this is my computer" experience so far.
I bought a brand new Lenovo Thinkpad for this, and have already deleted Windows 11.
@Larhanya@zeroes.ca
This toot is to announce that I have officially divorced Microsoft. I was sick of how they always shared things about me without my permission, and made changes to our relationship without asking first. Then they brought a third party into our relationship and insisted that I rely on the new "person" for advice and help in everything. I tried to tell that "AI" "person" to go away, but they just kept appearing out of nowhere.
Anyway, I kicked them both out, and now I'm living with Linux, who is sweet and always asks for consent before we make any changes to how we live. Linux can do everything that Microsoft can do, and usually does it better. Linux can be a bit quirky, but is open to working things out and having productive conversations. I haven't felt this free in over 20 years.
#linux #LinuxMint #BreakUpWithMicrosoft #windows #NoRegretsHere
@scriptkiddie@anonsys.net
We can give your Laptop or Computer a new, secure future with Linux!
Please #upgrade to #Linux before the #support for #Microsoft #Windows10 ends in Oktober this year!
Linux is free and the updates are free forever - more information here: endof10.org
#meme #foss #floss #tux #penguin #update #opensource #freedom #software #os #windows #computer #laptop #gnu #change #cybersecurity #privacy #security #future #endof10 @Endof10
@scriptkiddie@anonsys.net
We can give your Laptop or Computer a new, secure future with Linux!
Please #upgrade to #Linux before the #support for #Microsoft #Windows10 ends in Oktober this year!
Linux is free and the updates are free forever - more information here: endof10.org
#meme #foss #floss #tux #penguin #update #opensource #freedom #software #os #windows #computer #laptop #gnu #change #cybersecurity #privacy #security #future #endof10 @Endof10
@Larhanya@zeroes.ca
This toot is to announce that I have officially divorced Microsoft. I was sick of how they always shared things about me without my permission, and made changes to our relationship without asking first. Then they brought a third party into our relationship and insisted that I rely on the new "person" for advice and help in everything. I tried to tell that "AI" "person" to go away, but they just kept appearing out of nowhere.
Anyway, I kicked them both out, and now I'm living with Linux, who is sweet and always asks for consent before we make any changes to how we live. Linux can do everything that Microsoft can do, and usually does it better. Linux can be a bit quirky, but is open to working things out and having productive conversations. I haven't felt this free in over 20 years.
#linux #LinuxMint #BreakUpWithMicrosoft #windows #NoRegretsHere
@hp@tmm.cx
Finally I can ditch my tired old Sparc station, and switch to #Windows like everyone else!
Introducing SSH2WIN a port of SSH2DOS to #16bit Windows. No win32s here!
This was both harder and easier than I thought it would be.
Official release coming soon, once I clean up some details.
@nova@social.lol
Today on NovaLandia, if you're using secure boot on your system and running Linux, you may want to stop doing that in the next 12 days
@nova@social.lol
Today on NovaLandia, if you're using secure boot on your system and running Linux, you may want to stop doing that in the next 12 days
@jos1264@social.skynetcloud.site
Microsoft Confirms Recent Windows 11 24H2 Security Update Not Causing SSD/HDD Failures https://cybersecuritynews.com/windows-11-24h2-security-update-2/ #CyberSecurityNews #cybersecuritynews #Windows11 #TechNews #Windows #windows
@hp@tmm.cx
Finally I can ditch my tired old Sparc station, and switch to #Windows like everyone else!
Introducing SSH2WIN a port of SSH2DOS to #16bit Windows. No win32s here!
This was both harder and easier than I thought it would be.
Official release coming soon, once I clean up some details.
@bluejay@ohai.social
#FensterFreitag
An unexpected vanishing point.
#photography #urbanphotography #architecture #windows #WindowFriday #nyc
@bluejay@ohai.social
#FensterFreitag
An unexpected vanishing point.
#photography #urbanphotography #architecture #windows #WindowFriday #nyc
@forest_watch_impress@rss-mstdn.studiofreesia.com
「Word」にまたお節介機能? 新規ドキュメントはクラウドに自動保存するように/新規ファイル名は「ドキュメント 1」などではなく日付けベースに
https://forest.watch.impress.co.jp/docs/news/2042428.html
#forest_watch_impress #Word #Microsoft_365 #genai #文章生成 #Copilot #オフィス_ドキュメント #オフィス #Windows #Mac
@forest_watch_impress@rss-mstdn.studiofreesia.com
「Word」にまたお節介機能? 新規ドキュメントはクラウドに自動保存するように/新規ファイル名は「ドキュメント 1」などではなく日付けベースに
https://forest.watch.impress.co.jp/docs/news/2042428.html
#forest_watch_impress #Word #Microsoft_365 #genai #文章生成 #Copilot #オフィス_ドキュメント #オフィス #Windows #Mac
@melroy@mastodon.melroy.org
Warning: Do NOT dual-boot Linux with Windows. Especially when you are using "SecureBoot", since the license will expire upcoming September. You have been warned!
Please, read: https://lwn.net/Articles/1029767/
@dennyhenke@social.coop
Jenna with her old laptop, now updated to GNU/Linux! She'd stopped using it some time ago because #Windows had become so slow that it was unusable. A project of our local #Library where I #Volunteer. We spent some time installing then a brief introduction to the basics of using #GNU #Linux and a few of the apps.
She was excited to have a working computer again and, bonus, touch screen worked perfectly which made her extra happy.
#FreeSoftware #MutualAid #FOSS #Microsoft #Endof10 #Missouri
@dennyhenke@social.coop
Jenna with her old laptop, now updated to GNU/Linux! She'd stopped using it some time ago because #Windows had become so slow that it was unusable. A project of our local #Library where I #Volunteer. We spent some time installing then a brief introduction to the basics of using #GNU #Linux and a few of the apps.
She was excited to have a working computer again and, bonus, touch screen worked perfectly which made her extra happy.
#FreeSoftware #MutualAid #FOSS #Microsoft #Endof10 #Missouri
@ESETresearch@infosec.exchange
#ESETResearch has discovered the first known AI-powered ransomware, which we named #PromptLock. The PromptLock malware uses the gpt-oss:20b model from OpenAI locally via the Ollama API to generate malicious Lua scripts on the fly, which it then executes.
PromptLock leverages Lua scripts generated from hard-coded prompts to enumerate the local filesystem, inspect target files, exfiltrate selected data, and perform encryption. These Lua scripts are cross-platform compatible, functioning on #Windows, #Linux, and #macOS.
Based on the detected user files, the malware may exfiltrate data, encrypt it, or potentially destroy it. Although the destruction functionality appears to be not yet implemented. #Bitcoin address used in the prompt appears to belong to Bitcoin creator https://en.wikipedia.org/wiki/Satoshi_Nakamoto
For its file encryption mechanism, the PromptLock ransomware utilizes the SPECK 128-bit encryption algorithm.
Although multiple indicators suggest the sample is a proof-of-concept (PoC) or work-in-progress rather than fully operational malware deployed in the wild, we believe it is our responsibility to inform the cybersecurity community about such developments.
The PromptLock ransomware is written in #Golang, and we have identified both Windows and Linux variants uploaded to VirusTotal. IoCs:
🚨 Filecoder.PromptLock.A
📄 24BF7B72F54AA5B93C6681B4F69E579A47D7C102
AD223FE2BB4563446AEE5227357BBFDC8ADA3797
BB8FB75285BCD151132A3287F2786D4D91DA58B8
F3F4C40C344695388E10CBF29DDB18EF3B61F7EF
639DBC9B365096D6347142FCAE64725BD9F73270
161CDCDB46FB8A348AEC609A86FF5823752065D2
@aliceif@mkultra.x27.one
hello everyfedi!!
I wanna for some fun retrocomputing run Windows Home Server 2011 on my Proxmox box.
It has an Intel N100 (700MHz base, 3.6GHz turbo) CPU.
Sadly Windows Home Server 2011, when starting the install, does a check if the hardware is supported.
It marks the CPU as unsupported (required: x64, 1.3GHz). Even if I set proxmox to emulate Nehalem or Sandy Bridge it doesn't change. If I enter the setup command prompt with Shift+F10 in the installer and query WMI it reports a CPU frequency of 805MHz for some reason, unchanging even if I run stress on the host.
Anyone have any idea why and what I could do about it? Both in terms of, like, spoofing what Proxmox presents to the guest or how to bypass that check in the installer?
#homelab #retrocomputing #promox #windows
@Htbaa@fosstodon.org
Why is it that in both #MacOS and #Windows any browser (Chrome, Safari even) hijacks the multimedia buttons? Never ever have I wanted to use my pause/play button for a browser tab. I only want to use them for my music player.
Tried pausing a song, but for some reason that would play the notification sound of Mastodon in my browser.
Oh, and the Apple Music app simply refuses to work with my play/pause button anyway 😐. But Spotify does support it.
@xoron@infosec.exchange
Selhosted P2P E2EE File Transfer & Messaging PWA
https://positive-intentions.com
* #OpenSource
* #CrossPlatform
* #PWA
* #iOS, #Android, #Desktop (self compile)
* App store, Play store (coming soon)
* Desktop
* #Windows, #MacOS, #Linux (self compile)
* run `index.html` on any modern #browser
* #Decentralized
* #Secure
* #NoCookies
* #P2P #encrypted
* No registration
* No installing
* #Messaging
* Group Messaging (coming soon)
* Text Messaging
* #Multimedia Messaging
* #Screensharing (on desktop browsers)
* Offline Messaging (in #research phase)
* #FileTransfer
* #VideoCalls
* #DataOwnership
* #SelfHosted
* GitHub pages Hosting
* #LocalOnly storage
Check them out!
(Degoogled links to the apps)
- P2P Chat: https://chat.positive-intentions.com
- P2P File: https://file.positive-intentions.com
- Encrypted drive storage: https://dim.positive-intentions.com/?path=/story/usefs--encrypted-demo
- GitHub: https://github.com/positive-intentions
IMPORTANT NOTES (PLEASE READ!):
* These are NOT products. It's for #testing and #demonstration purposes only.
* They have NOT been reviewed or audited. Do NOT use for sensitive data.
* All functionality demonstrated is experimental.
* This is NOT meant to replace robust solutions like #VeraCrypt, #Simplexchat, #Signal, #Whatsapp, #wetransfer. It's just a #proofofconcept to show what's possible with #browser #APIs.
@xoron@infosec.exchange
Selhosted P2P E2EE File Transfer & Messaging PWA
https://positive-intentions.com
* #OpenSource
* #CrossPlatform
* #PWA
* #iOS, #Android, #Desktop (self compile)
* App store, Play store (coming soon)
* Desktop
* #Windows, #MacOS, #Linux (self compile)
* run `index.html` on any modern #browser
* #Decentralized
* #Secure
* #NoCookies
* #P2P #encrypted
* No registration
* No installing
* #Messaging
* Group Messaging (coming soon)
* Text Messaging
* #Multimedia Messaging
* #Screensharing (on desktop browsers)
* Offline Messaging (in #research phase)
* #FileTransfer
* #VideoCalls
* #DataOwnership
* #SelfHosted
* GitHub pages Hosting
* #LocalOnly storage
Check them out!
(Degoogled links to the apps)
- P2P Chat: https://chat.positive-intentions.com
- P2P File: https://file.positive-intentions.com
- Encrypted drive storage: https://dim.positive-intentions.com/?path=/story/usefs--encrypted-demo
- GitHub: https://github.com/positive-intentions
IMPORTANT NOTES (PLEASE READ!):
* These are NOT products. It's for #testing and #demonstration purposes only.
* They have NOT been reviewed or audited. Do NOT use for sensitive data.
* All functionality demonstrated is experimental.
* This is NOT meant to replace robust solutions like #VeraCrypt, #Simplexchat, #Signal, #Whatsapp, #wetransfer. It's just a #proofofconcept to show what's possible with #browser #APIs.
@forest_watch_impress@rss-mstdn.studiofreesia.com
「LibreOffice」がメジャーアップデート、非力なデバイスでもサクサク動くv25.8が公開/フリーのオフィス統合環境。「PDF 2.0」出力、「Excel」互換関数の大量導入も
https://forest.watch.impress.co.jp/docs/news/2040467.html
#forest_watch_impress #LibreOffice #オフィス_ドキュメント #オフィス #Windows #ドキュメント #Mac #Linux
@forest_watch_impress@rss-mstdn.studiofreesia.com
「LibreOffice」がメジャーアップデート、非力なデバイスでもサクサク動くv25.8が公開/フリーのオフィス統合環境。「PDF 2.0」出力、「Excel」互換関数の大量導入も
https://forest.watch.impress.co.jp/docs/news/2040467.html
#forest_watch_impress #LibreOffice #オフィス_ドキュメント #オフィス #Windows #ドキュメント #Mac #Linux
@forest_watch_impress@rss-mstdn.studiofreesia.com
Windows 11パッチでSSDに障害発生、起動不能の場合も?~Phisonが声明を発表/「KB5062660」「KB5063878」適用後の影響をXユーザーが確認【やじうまの杜】
https://forest.watch.impress.co.jp/docs/serial/yajiuma/2040076.html
#forest_watch_impress #SSD #KB5063878 #KB5062660 #セキュリティ #不具合_障害 #Windows #システム_ファイル #システム #ファイル #ハードウェア
@teto@app.wafrn.net
@teto@app.wafrn.net
@impress@rss-mstdn.studiofreesia.com
Windows 11最新パッチ、大容量データコピーでSSDアクセス不能になるバグ。なお、コントローラの問題ではない
https://pc.watch.impress.co.jp/docs/news/2040183.html
@forest_watch_impress@rss-mstdn.studiofreesia.com
Windows 11パッチでSSDに障害発生、起動不能の場合も?~Phisonが声明を発表/「KB5062660」「KB5063878」適用後の影響をXユーザーが確認【やじうまの杜】
https://forest.watch.impress.co.jp/docs/serial/yajiuma/2040076.html
#forest_watch_impress #SSD #KB5063878 #KB5062660 #セキュリティ #不具合_障害 #Windows #システム_ファイル #システム #ファイル #ハードウェア
@jerome_herbinet@pouet.chapril.org
@jerome_herbinet@pouet.chapril.org
@elduvelle@neuromatch.social
With the coming end of support of #Windows10 I would like to hear from people who recently (say < 3 years ago) moved from Windows (or MacOS) to Linux:
.1. which Linux distribution did you settle on?
.2. which are the main problems that you had "transitioning"?
.3. are you planning to keep using Linux for now?
.4. What are you missing in Linux that you had with your former OS?
.5. If you tried but did not keep using it - why?
#windows10endofsupport #Linux #ChoiceOfOS #ComputerStuff #MacOS #Windows
And here's a related poll:
Have you recently moved to Linux from a different OS? ⬇️
Option | Voters |
---|---|
Yes, I moved to Linux in the last few months | 24 (11%) |
Yes, I moved to Linux in the last few years | 55 (25%) |
I moved to Linux but a long time ago | 112 (51%) |
I tried Linux but did not keep using it | 23 (10%) |
I never used Linux | 6 (3%) |
@CppGuy@infosec.space · Reply to ℒӱḏɩę's post
#Linux is much user-friendlier than it was even a few years ago, and there are lots of other benefits in having a computer that isn't constantly trying to get one over on you. But I agree that it isn't yet ready for the average person to install and use without help.
I look at it like this: #Windows will boot up and appear to work on your machine, but you're at risk of viruses, fraud, spyware, vendor lock-in, advertisements, dark patterns, and generally being treated like a cash cow. In contrast, Linux will occasionally not support all your hardware and you may encounter problems that take time and research to solve, but the OS and the apps you run are working for you rather than against you. No one is spying on you, advertising at you, trying to lock you in, or demanding expensive subscriptions.
It's annoying and unjust that the bulk of the market has gone to the extractive OS and ecosystem, but every person who uses and advocates for Linux helps to break Microsoft's hegemony.
@CppGuy@infosec.space · Reply to ℒӱḏɩę's post
That's great, but do you see how it sounds to people outside the #Windows world? Your operating system vendor has gradually become your adversary. One way or another, you still end up dancing to #Microsoft's tune.
Your computer shouldn't be a tool for wringing money and data out of you. You shouldn't need to trick your OS vendor in order to get security updates. That's not a healthy relationship.
I acknowledge that I'm in an equally unhealthy relationship myself, because I'm writing this on an Android phone and using Blokada to shelter from surveillance and advertising. I'm not criticising you: I'm bemoaning the state of the major consumer operating systems at the moment.
@scriptkiddie@anonsys.net
@scriptkiddie@anonsys.net
@jon@vivaldi.net
Is Microsoft Windows Recall the worst AI idea? Share your experience!
https://news.itsfoss.com/microsoft-recall-fails-again/
#AI #Microsoft #Windows #Recall #Spyware #surveillance #Technology #Linux
@direktorik@mastodon.social
The sun and the shaded window
📷 Ricoh GRIIIX
#photography #photo #fotografie #darktable #ricohgr #windows #WindowFriday #FensterFreitag
@direktorik@mastodon.social
The sun and the shaded window
📷 Ricoh GRIIIX
#photography #photo #fotografie #darktable #ricohgr #windows #WindowFriday #FensterFreitag
@karlsruhe@vhs.social
Mit dem Supportende von #Windows 10 im Oktober würden - ginge es nach #MicroSoft - Millionen von voll funktionalen Computern zu Altmetall.
Praktisch alle können durch Upgrade auf #Linux noch jahrelang gute Dienste leisten und so der Umwelt Millionen Tonnen von Elektroschrott ersparen.
Linux und die dafür existierende Open-Source-Software können Windows / MS-Office mehr als nur ersetzen - und der Umstieg ist gar nicht schwer, schon gar nicht mit kostenloser fachkundiger Hilfe ehrenamtlicher Helfer*innen bei der #vhs #Karlsruhe.
Am 23.8. könnt Ihr Euch informieren, Linux auf der eigenen Maschine testen und mit Unterstützung auch gleich installieren.
@jon@vivaldi.net
@jon@vivaldi.net
@Nathan@bsd.cafe
@Sempf@infosec.exchange
Battlefield 6 needs what now?
https://www.windowscentral.com/microsoft/windows/how-enable-secure-boot-battlefield-6-windows
@forest_watch_impress@rss-mstdn.studiofreesia.com
「EmEditor Professional」が値上げ、月額900円の月間サブスクリプションも開始/8月28日から
https://forest.watch.impress.co.jp/docs/news/2037519.html
#forest_watch_impress #EmEditor #EmEditor_Professional #オフィス_ドキュメント #テキストエディター #Windows
@Sempf@infosec.exchange
Battlefield 6 needs what now?
https://www.windowscentral.com/microsoft/windows/how-enable-secure-boot-battlefield-6-windows
@forest_watch_impress@rss-mstdn.studiofreesia.com
「EmEditor Professional」が値上げ、月額900円の月間サブスクリプションも開始/8月28日から
https://forest.watch.impress.co.jp/docs/news/2037519.html
#forest_watch_impress #EmEditor #EmEditor_Professional #オフィス_ドキュメント #テキストエディター #Windows
@astian@mastodon.social
Midori Browser's revamped New Tab will soon have news, RSS without telemetry, work tools and very useful tools.
https://astian.org/midori-browser
Coming soon.
#privacy #browser #linux #windows #tech #technology #debian #ubuntu #opensuse #archlinux #midoribrowser
@astian@mastodon.social
Midori Browser's revamped New Tab will soon have news, RSS without telemetry, work tools and very useful tools.
https://astian.org/midori-browser
Coming soon.
#privacy #browser #linux #windows #tech #technology #debian #ubuntu #opensuse #archlinux #midoribrowser
@forest_watch_impress@rss-mstdn.studiofreesia.com
「メモ帳」に続け? フリーのオフィス統合環境「LibreOffice」もMarkdown対応へ/次の「LibreOffice 25.8」には間に合わないけれど、インポート機能の実装を確認【やじうまの杜】
https://forest.watch.impress.co.jp/docs/serial/yajiuma/2036822.html
#forest_watch_impress #LibreOffice #Markdown #オフィス_ドキュメント #オフィス #Windows #ドキュメント #Mac #Linux
@forest_watch_impress@rss-mstdn.studiofreesia.com
「メモ帳」に続け? フリーのオフィス統合環境「LibreOffice」もMarkdown対応へ/次の「LibreOffice 25.8」には間に合わないけれど、インポート機能の実装を確認【やじうまの杜】
https://forest.watch.impress.co.jp/docs/serial/yajiuma/2036822.html
#forest_watch_impress #LibreOffice #Markdown #オフィス_ドキュメント #オフィス #Windows #ドキュメント #Mac #Linux
@nizarus@mastodon.tn
Windows 10 ends in 2025. Don’t buy a new PC — revive yours with Linux
@nizarus@mastodon.tn
Windows 10 ends in 2025. Don’t buy a new PC — revive yours with Linux
@forest_watch_impress@rss-mstdn.studiofreesia.com
Webページの“ここ”へ直接飛ぶリンクを作りたい ~「Firefox」もようやく標準対応へ/「Microsoft Edge」や「Google Chrome」はとっくに対応済み【やじうまの杜】
https://forest.watch.impress.co.jp/docs/serial/yajiuma/2036610.html
#forest_watch_impress #Firefox #インターネット #Webブラウザー #Windows #Mac #Linux
@Isthmus@infosec.exchange · Reply to Jen Gentleman's post
@JenMsft
You know what's really odd. Windows 10 reaches end-of-life in October and the only official upgrade path for those whose machines don't meet the hardware requirements is to buy a new computer.
But, instead of launching Windows 12 before October so they can buy a new computer with a new operating system, those people have to buy a brand new computer with a four year old operating system.
So they will only get six years support on their expensive brand new computer, when even a £120 Samsung Galaxy A16 comes with six years of support.
I'm not sure Satya has any strategy at all, unless his *brilliant* plan is exactly this. It's bizarre.
@JenMsft@mastodon.social
Happy tenth birthday Windows 10 - this one's for you 🎉 #Windows
@zadjii@mastodon.social · Reply to Patrik Svensson's post
@patriksvensson
#sudo for #windows?
Tmux?
wt.exe for the #WindowsTerminal?
@magicfab@mastodon.social
Atlas-OS/Atlas: 🚀 An open and lightweight modification to Windows by #Acer and #Intel, designed to optimize performance, privacy and usability. - #AtlasOS, or Atlas, is an open-source project (#MIT / #GPLv3)that enhances #Windows by conveniently applying privacy, usability, and performance optimizations, all while maintaining functionality and customizability.
Get Linux or waste time with this ? Intriguing.
@itsfoss@mastodon.social
@itsfoss@mastodon.social
@midtsveen@social.linux.pizza
Meanwhile, desktop Linux has a 20% market share here in Norway! 🇳🇴
@midtsveen@social.linux.pizza
Meanwhile, desktop Linux has a 20% market share here in Norway! 🇳🇴
@kkarhan@infosec.space · Reply to Kevin Karhan :verified:'s post
EVERY SINGLE TIME I see someone using #Windows I want to shout at them:
@denfaminicogamer@rss-mstdn.studiofreesia.com
とある“戦時下の都市で起きた事件”を追うモノクロビジュアルノベル『Lavender Quartz 境界秤動』の体験版がリリース。ミステリアス系VTuber「鳩羽つぐ」のプロデュース元が手がける破滅的な追跡劇
https://news.denfaminicogamer.jp/news/2507162e
#denfaminicogamer #Steam_Deck #Steam #ビジュアルノベル #Lavender_Quartz_境界秤動 #ヨシムネ #Linux #ニュース #Windows
@denfaminicogamer@rss-mstdn.studiofreesia.com
とある“戦時下の都市で起きた事件”を追うモノクロビジュアルノベル『Lavender Quartz 境界秤動』の体験版がリリース。ミステリアス系VTuber「鳩羽つぐ」のプロデュース元が手がける破滅的な追跡劇
https://news.denfaminicogamer.jp/news/2507162e
#denfaminicogamer #Steam_Deck #Steam #ビジュアルノベル #Lavender_Quartz_境界秤動 #ヨシムネ #Linux #ニュース #Windows
@readbeanicecream@mastodon.social
Want to know how to keep me on #linux? This is how you keep me on #linux!
Now Microsoft’s Copilot Vision AI can scan everything on your screen
Copilot Vision will be able to look at your whole desktop.
https://www.theverge.com/news/707995/microsoft-copilot-vision-ai-windows-scan-screen-desktop
@argv_minus_one@mastodon.sdf.org
For all its faults, copy-and-paste is still a pretty neat feature.
I just copied a funny picture I saw in my Mastodon feed and pasted it into a Gajim chat, and it worked, just like that.
To someone who'd been using a single-tasking computer like an IBM PC or Commodore 64 or something, moving an object from one app to another unrelated app like that must've been mind-blowing when it first appeared.
Who had it first, by the way? #MacOS via MultiFinder? #Amiga? #Windows?
@karlsruhe@vhs.social
Mit dem Supportende von #Windows 10 im Oktober würden - ginge es nach #MicroSoft - Millionen von voll funktionalen Computern zu Altmetall.
Praktisch alle können durch Upgrade auf #Linux noch jahrelang gute Dienste leisten und so der Umwelt Millionen Tonnen von Elektroschrott ersparen.
Linux und die dafür existierende Open-Source-Software können Windows / MS-Office mehr als nur ersetzen - und der Umstieg ist gar nicht schwer, schon gar nicht mit kostenloser fachkundiger Hilfe ehrenamtlicher Helfer*innen bei der #vhs #Karlsruhe.
Am 23.8. könnt Ihr Euch informieren, Linux auf der eigenen Maschine testen und mit Unterstützung auch gleich installieren.
@looopTools@mastodon.social
After helping five friends in the last two months transition from #windows to #linux here are my thoughts:
1. Show case both #kde and #gnome before you pick it form them. 2/5 Decided to try KDE because it reminded them of Windows and the rest wanted Gnome because they where tired of windows UI
2. Do not fill their head with distros, go with one where it is easy to get support. I went with @fedora as it is the one I know best and like the resource for. So far only one has swapped (to Ubuntu)
@jon@vivaldi.net
I asked the question : Do you want a laptop with Copilot+?
1% said yes.
96% said (hell) no.
3% were not sure.
This is a great example of something being pushed that most really do not want.
Big Tech is very focused on winning the AI war. Problem is, that in their eagerness to do that, they focus just on what they want you to do, instead of what you want to do.
#Windows #Macos #Linux #Microsoft #Computer #Spyware #AI #Copilot #Technology #Vivaldi @Vivaldi #BigTech
@dhry@mastodon.social
In the late 90's I was looking through all sorts of #email clients for #Windows. #OutlookExpress was probably the most popular but it didn't do "enough" for me. #Outlook was too bloated and was also commercial. I used something called #Eudora for a while and then found a niche client called "#TheBat" from a company based in Moldova.
It was AMAZING.
It still IS amazing. I still use it, more than 25 years later. It has never failed on me. Best email client ever created. https://www.ritlabs.com/en/products/thebat/
@perspiraattori@mementomori.social
Nyt tulee pitkä avautuminen käyttöjärjestelmästä nimeltä Windows.
/rant
Alan olla niin läpeensä kyllästynyt W11 ja siihen miten se tekee asioita, mitä en halua sen tekevän. Käyttäessäni Windowsia en koe olevani koneen hallitsija millään tasolla, vaan pikemminkin käyttöjärjestelmän informaatiovirran mukana menevä "kokija", jonka eteen tungetaan jatkuvasti ehdotuksia ja yhtä jos toista vipstaakia, joilla en tee yhtikäs mitään. Tiedän tasan tarkkaan mitä haluan ja miten haluan saada aikaiseksi, kun käytän tietokonetta. Windows ei näytä enää olevan yhteensopiva tämän ajatuksen kanssa kanssa.
Koitan seuraavassa havainnollistaa sen mistä puhun:
--
Minä: "Hetkonen, missäs se yks tiedosto olikaan.."
*kirjoittaa hakuun tiedostonimen täydellisesti*
Windows: "Hmmm, etsitäänkö kuitenkin ensin Edgellä internetistä mikä tiedosto tuo ylipäätään on? Joo, niin voitais tehd..HEI KATSO, TÄSSÄ OIS MULLA CANDY CRUSH JA PÄIVÄN UUTISET!!"
--
Minä: "Pitääkin asentaa uusi selain."
*asentaa selainta*
Windows: "HEI OOTAPPA TÄÄ EDGE OIS AIKA HYVÄ! TAI SIIS... EI SUN OO PAKKO TÄTÄ KÄYTTÄÄ MUT KATO, KÄYTÄ TÄTÄ NÄIN, TÄSSÄ ON NAPPI, PAINA SITÄ! NAMINAMI!"
--
Minä: "no koitetaan sitä uutta sel.."
Windows: "COPILOT!! KATO NYT, TÄSSÄ ON COPILOT!! HEHHEH, MITÄS SIIHEN SANOT, SE AUTTAA SUA TOSI PALJON!! Ja niin.. ööö CANDY CRUSH JA UUTISIA!! JEE!!"
--
Minä: *työpöydällä*
Windows: "HEI, ONEDRIVE TÄÄLLÄ MORO HALUAAAAAATKOOOOOOS VÄHÄN LISÄÄ TILAA JA TÄTÄHÄN EI SIT LAITETA POIS KÄYTÖSTÄ EIHÄN, HEHHEH!!
--
Joo, ylläolevat olivat karrikoituja esimerkkejä, mutta minua turhauttaa nämä aika kovaa ja siksi annoin hieman värityskynää.
Tuki W10 loppumiselle oli myöskin yksi murheenkryyni. Mikäli haluan pysyä Windowsissa, uusien koneiden tulisi olla W11-yhteensopivia. Jos kone ei ole mikkisoftan listojen mukaan yhteensopiva, joudun säätämään astetta enemmän, jotta vähänkään vanhempaan koneeseen saa asennettua W11. Sekin säätö tuli tuossa tehtyä, kun pojan koneeseen (joka on mun vanha kone) piti asentaa se, jotta family safety -asetukset saa pidettyä kunnossa.
Sen lisäksi ryhmäpaine vaihtoon alkaa olla aika kova. Entisen bändimme, Raster Densityn, kaikki muut jäsenet ovat jo vaihtaneet Linuxiin. Kyse on siis death metal -muusikoista, jotka ovat myös tämän epäkohdan tajunneet. Sen lisäksi vanhan yliopistoporukan tyypit joko ovat aina olleet, tai enenevissä määrin hiljattain siirtyneet Linuxin käyttäjiksi.
Oikeastaan ainoat asiat mitkä tällä hetkellä enää estävät siirtymisen, ovat videoeditointisovellus DaVinci Resolven potentiaaliset yhteensopivuusongelmat ja tietyt pelit, joita haluan pelata, mutta jotka eivät yksinkertaisesti toimi Linuxilla.
/rant
Huah. Siinäpä se. Olisikohan nyt hyvä hetki jäädä lomalle? Ja ehkäpä loman aikana asentaa Linux.
@jon@vivaldi.net
I asked the question : Do you want a laptop with Copilot+?
1% said yes.
96% said (hell) no.
3% were not sure.
This is a great example of something being pushed that most really do not want.
Big Tech is very focused on winning the AI war. Problem is, that in their eagerness to do that, they focus just on what they want you to do, instead of what you want to do.
#Windows #Macos #Linux #Microsoft #Computer #Spyware #AI #Copilot #Technology #Vivaldi @Vivaldi #BigTech
@jon@vivaldi.net
I asked the question : Do you want a laptop with Copilot+?
1% said yes.
96% said (hell) no.
3% were not sure.
This is a great example of something being pushed that most really do not want.
Big Tech is very focused on winning the AI war. Problem is, that in their eagerness to do that, they focus just on what they want you to do, instead of what you want to do.
#Windows #Macos #Linux #Microsoft #Computer #Spyware #AI #Copilot #Technology #Vivaldi @Vivaldi #BigTech
@perspiraattori@mementomori.social
Nyt tulee pitkä avautuminen käyttöjärjestelmästä nimeltä Windows.
/rant
Alan olla niin läpeensä kyllästynyt W11 ja siihen miten se tekee asioita, mitä en halua sen tekevän. Käyttäessäni Windowsia en koe olevani koneen hallitsija millään tasolla, vaan pikemminkin käyttöjärjestelmän informaatiovirran mukana menevä "kokija", jonka eteen tungetaan jatkuvasti ehdotuksia ja yhtä jos toista vipstaakia, joilla en tee yhtikäs mitään. Tiedän tasan tarkkaan mitä haluan ja miten haluan saada aikaiseksi, kun käytän tietokonetta. Windows ei näytä enää olevan yhteensopiva tämän ajatuksen kanssa kanssa.
Koitan seuraavassa havainnollistaa sen mistä puhun:
--
Minä: "Hetkonen, missäs se yks tiedosto olikaan.."
*kirjoittaa hakuun tiedostonimen täydellisesti*
Windows: "Hmmm, etsitäänkö kuitenkin ensin Edgellä internetistä mikä tiedosto tuo ylipäätään on? Joo, niin voitais tehd..HEI KATSO, TÄSSÄ OIS MULLA CANDY CRUSH JA PÄIVÄN UUTISET!!"
--
Minä: "Pitääkin asentaa uusi selain."
*asentaa selainta*
Windows: "HEI OOTAPPA TÄÄ EDGE OIS AIKA HYVÄ! TAI SIIS... EI SUN OO PAKKO TÄTÄ KÄYTTÄÄ MUT KATO, KÄYTÄ TÄTÄ NÄIN, TÄSSÄ ON NAPPI, PAINA SITÄ! NAMINAMI!"
--
Minä: "no koitetaan sitä uutta sel.."
Windows: "COPILOT!! KATO NYT, TÄSSÄ ON COPILOT!! HEHHEH, MITÄS SIIHEN SANOT, SE AUTTAA SUA TOSI PALJON!! Ja niin.. ööö CANDY CRUSH JA UUTISIA!! JEE!!"
--
Minä: *työpöydällä*
Windows: "HEI, ONEDRIVE TÄÄLLÄ MORO HALUAAAAAATKOOOOOOS VÄHÄN LISÄÄ TILAA JA TÄTÄHÄN EI SIT LAITETA POIS KÄYTÖSTÄ EIHÄN, HEHHEH!!
--
Joo, ylläolevat olivat karrikoituja esimerkkejä, mutta minua turhauttaa nämä aika kovaa ja siksi annoin hieman värityskynää.
Tuki W10 loppumiselle oli myöskin yksi murheenkryyni. Mikäli haluan pysyä Windowsissa, uusien koneiden tulisi olla W11-yhteensopivia. Jos kone ei ole mikkisoftan listojen mukaan yhteensopiva, joudun säätämään astetta enemmän, jotta vähänkään vanhempaan koneeseen saa asennettua W11. Sekin säätö tuli tuossa tehtyä, kun pojan koneeseen (joka on mun vanha kone) piti asentaa se, jotta family safety -asetukset saa pidettyä kunnossa.
Sen lisäksi ryhmäpaine vaihtoon alkaa olla aika kova. Entisen bändimme, Raster Densityn, kaikki muut jäsenet ovat jo vaihtaneet Linuxiin. Kyse on siis death metal -muusikoista, jotka ovat myös tämän epäkohdan tajunneet. Sen lisäksi vanhan yliopistoporukan tyypit joko ovat aina olleet, tai enenevissä määrin hiljattain siirtyneet Linuxin käyttäjiksi.
Oikeastaan ainoat asiat mitkä tällä hetkellä enää estävät siirtymisen, ovat videoeditointisovellus DaVinci Resolven potentiaaliset yhteensopivuusongelmat ja tietyt pelit, joita haluan pelata, mutta jotka eivät yksinkertaisesti toimi Linuxilla.
/rant
Huah. Siinäpä se. Olisikohan nyt hyvä hetki jäädä lomalle? Ja ehkäpä loman aikana asentaa Linux.
@jon@vivaldi.net
A lot of polishing in the new Vivaldi 7.5.
Our goal is to make a browser that is powerful, personal and private. We continue our efforts there. I hope you enjoy it!
#Windows #Macos #Linux #Computer #Technology #Eu #Europa #Norway #Iceland
https://vivaldi.com/press/releases/vivaldi-7-5-color-clarity-and-control/
@jon@vivaldi.net
A lot of polishing in the new Vivaldi 7.5.
Our goal is to make a browser that is powerful, personal and private. We continue our efforts there. I hope you enjoy it!
#Windows #Macos #Linux #Computer #Technology #Eu #Europa #Norway #Iceland
https://vivaldi.com/press/releases/vivaldi-7-5-color-clarity-and-control/
@jon@vivaldi.net
A lot of polishing in the new Vivaldi 7.5.
Our goal is to make a browser that is powerful, personal and private. We continue our efforts there. I hope you enjoy it!
#Windows #Macos #Linux #Computer #Technology #Eu #Europa #Norway #Iceland
https://vivaldi.com/press/releases/vivaldi-7-5-color-clarity-and-control/
@ncoca@social.coop
@ncoca@social.coop
@gregofabre@piaille.fr
#Microsoft laisse entendre discrètement que #Windows a perdu environ 400 millions d'utilisateurs au cours des trois dernières années, tandis que l'utilisation des smartphones, de #Linux et de Mac a augmenté
@gregofabre@piaille.fr
#Microsoft laisse entendre discrètement que #Windows a perdu environ 400 millions d'utilisateurs au cours des trois dernières années, tandis que l'utilisation des smartphones, de #Linux et de Mac a augmenté
@tj@howse.social
Fuckin' what? Huh? Windows? Excel? I've been using windows since 3.1 and I've never hit a case of write contention on the clipboard.
@aoetk.bsky.social@bsky.brid.gy
Windows11のメモ帳のMarkdownサポートが来てた。限定的なマークアップにのみ対応していて、まだまだと言ったところ。 #windows
@aoetk.bsky.social@bsky.brid.gy
Windows11のメモ帳のMarkdownサポートが来てた。限定的なマークアップにのみ対応していて、まだまだと言ったところ。 #windows
@hhttg@mastodon.online
Not by me, found it somewhere in the vastness of the net:
For Windows problems, reboot
For Linux problems, be root
@louischance@piaille.fr
Yeaah, I persuaded another person of my family to ditch Windows and move to Linux. Not because of data privacy (he doesn't care about providing Google and such with his personal data) but because of performance. I'll install it on his computer over the summer.
I also pushed quite a few people to install Signal (and they do use it, at least to talk to me).
Small achievements but it's better than nothing!
#linux #signalapp #windows
@soheb@pkutalk.com
Who here changed from Windows to Linux after the whole Windows Recall fiasco, and are you still using Linux?
Option | Voters |
---|---|
Moved from Windows to Linux and stayed with Linux | 23 (82%) |
Moved from Windows to Linux and moved to Mac | 0 (0%) |
Moved from Windows to Linux and went back | 1 (4%) |
Never left Windows | 4 (14%) |
@hadsn@mstdn.nere9.help
64ビット版 #Windows でも一応32ビット版のIMEが使えるけど、64ビットのアプリじゃ使えないと (DLLとして実装されているのであればそれは、そう)
日本語IME「風」が使えなくなる日 https://note.com/egao_it/n/nae9ed4eb721e
@hadsn@mstdn.nere9.help
64ビット版 #Windows でも一応32ビット版のIMEが使えるけど、64ビットのアプリじゃ使えないと (DLLとして実装されているのであればそれは、そう)
日本語IME「風」が使えなくなる日 https://note.com/egao_it/n/nae9ed4eb721e
@hadsn@mstdn.nere9.help
64ビット版 #Windows でも一応32ビット版のIMEが使えるけど、64ビットのアプリじゃ使えないと (DLLとして実装されているのであればそれは、そう)
日本語IME「風」が使えなくなる日 https://note.com/egao_it/n/nae9ed4eb721e
@grumpy_website@mastodon.online
@gnh1201@hackers.pub
세상에는 참 불경(?)한 것들이 많습니다.
개발에 쓰이는 도구가 불경하다며 어떠한 도구도 깔지말고 메모장(Notepad)만으로 코딩을 하라더니, 이제는 데이터베이스가 불경하다며 PC에 이미 설치된 기본 기능만으로 데이터베이스 처럼 사용할 수 있는 방법을 강구하라고 합니다.
아... 먹고 살기 쉽지 않습니다.
하지만 메모장 "Only" 코딩도 성공시킨 제가 데이터베이스라고 성공시키지 못하겠습니까? 해봅시다.
외부 개발 도구가 매우 제한적으로 공급되는 환경(사실상 쓸 수 있는 개발 도구가 "메모장"밖에 없는 환경)에서도 고급 기능을 구현할 수 있는 방안에 대한 요구는, 윈도우즈 운영체제의 내부 ECMAScript를 활용하는 WelsonJS 프레임워크의 공개를 통해 해결할 수 있었습니다.
WelsonJS 프레임워크는 2025년 6월 26일 기준, 깃허브(GitHub)에서 350개의 긍정적인 평가(Stars)를 받는 성과도 이루었습니다.
이후로, 지금까지의 경험을 데이터베이스 영역으로 확대해보자는 의견이 나오기 시작하였습니다. 상용 데이터베이스의 존재는 그 자체만으로도 매우 거대하기 때문에 외부 개발 도구의 공급이 제한되는 환경에서는 데이터베이스도 업무에 걸림돌이 되기 때문입니다.
결국 운영체제에서 기본적으로 지원되는 데이터베이스로 사용 가능한 시스템이 있는지 사전 조사를 시작합니다.
결국 윈도우즈 운영체제에는 Windows 2000부터 현재 버전(Windows 11)에도 탑재된 오던 ESENT (ESE) 데이터베이스라는 것이 존재한다는걸 확인하게 됩니다.
제 그동안의 경험에 의한 관심법과, LLM(거대 언어 모델)과의 협공이라면 빠른 시간 내에 구현이 가능할거라 생각하지만 상대적으로 정보가 부족하여 생각보다는 오래 걸렸습니다.
ESENT 데이터베이스를 사용하기 위한 API 구현은 존재하지만, Column(칼럼), Schema(스키마, 혹은 테이블), CRUD(생성, 읽기, 수정, 삭제) 등 실제 어플리케이션을 구현하는 용도로 사용하기에 적합하도록 데이터베이스의 개념을 추상화해둔 구현은 존재하지 않았습니다.
그런고로, 직접 작성을 해보았습니다! 먼저 칼럼과 스키마라는 개념을 구현해봅시다.
// Column.cs (WelsonJS.Esent)
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: 2025 Namhyeon Go <gnh1201@catswords.re.kr>, Catswords OSS and WelsonJS Contributors
// https://github.com/gnh1201/welsonjs
//
using System;
using System.Text;
using Microsoft.Isam.Esent.Interop;
namespace WelsonJS.Esent
{
public class Column
{
public string Name { get; set; }
public JET_coltyp Type { get; set; }
public int MaxSize { get; set; }
public JET_CP CodePage { get; set; }
public bool IsPrimaryKey { get; set; } = false;
public override string ToString()
{
return Name;
}
public static explicit operator string(Column c)
{
return c.ToString();
}
public Column(string name, JET_coltyp type, int maxSize = 0, JET_CP codePage = JET_CP.None)
{
Name = name;
Type = type;
MaxSize = maxSize;
CodePage = codePage == JET_CP.None ?
JET_CP.Unicode : codePage;
}
public Column(string name, Type dotNetType, int maxSize = 0, Encoding encoding = null)
{
Name = name;
Type = GetJetColtypFromType(dotNetType);
MaxSize = maxSize;
CodePage = GetJetCpFromEncoding(encoding ?? Encoding.Unicode);
}
private static JET_coltyp GetJetColtypFromType(Type type)
{
if (type == typeof(string)) return JET_coltyp.Text;
if (type == typeof(int)) return JET_coltyp.Long;
if (type == typeof(long)) return JET_coltyp.Currency;
if (type == typeof(bool)) return JET_coltyp.Bit;
if (type == typeof(float)) return JET_coltyp.IEEESingle;
if (type == typeof(double)) return JET_coltyp.IEEEDouble;
if (type == typeof(DateTime)) return JET_coltyp.DateTime;
if (type == typeof(byte[])) return JET_coltyp.LongBinary;
throw new NotSupportedException($"Unsupported .NET type: {type.FullName}");
}
private static JET_CP GetJetCpFromEncoding(Encoding encoding)
{
if (encoding == Encoding.Unicode) return JET_CP.Unicode;
if (encoding == Encoding.ASCII) return JET_CP.ASCII;
if (encoding.CodePage == 1252) return (JET_CP)1252; // Windows-1252 / Latin1
if (encoding.CodePage == 51949) return (JET_CP)51949; // EUC-KR
if (encoding.CodePage == 949) return (JET_CP)949; // UHC (Windows Korean)
if (encoding.CodePage == 932) return (JET_CP)932; // Shift-JIS (Japanese)
if (encoding.CodePage == 936) return (JET_CP)936; // GB2312 (Simplified Chinese)
if (encoding.CodePage == 65001) return (JET_CP)65001; // UTF-8
if (encoding.CodePage == 28591) return (JET_CP)28591; // ISO-8859-1
throw new NotSupportedException($"Unsupported encoding: {encoding.WebName} (code page {encoding.CodePage})");
}
}
}
// Schema.cs (WelsonJS.Esent)
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: 2025 Namhyeon Go <gnh1201@catswords.re.kr>, Catswords OSS and WelsonJS Contributors
// https://github.com/gnh1201/welsonjs
//
using System;
using System.Collections.Generic;
namespace WelsonJS.Esent
{
public class Schema
{
public string TableName { get; set; }
public List<Column> Columns { get; set; }
public Column PrimaryKey
{
get
{
return Columns.Find(c => c.IsPrimaryKey) ?? null;
}
}
public Schema(string tableName, List<Column> columns)
{
TableName = tableName;
Columns = columns ?? new List<Column>();
}
public void SetPrimaryKey(string columnName)
{
Column column = Columns.Find(c => c.Name.Equals(columnName, StringComparison.OrdinalIgnoreCase));
if (column != null)
{
column.IsPrimaryKey = true;
}
else
{
throw new ArgumentException($"Column '{columnName}' does not exist in schema '{TableName}'.");
}
}
}
}
그리고, 대망의 CRUD를 구현해줍니다. (예시의 내용 중 Logger 인터페이스의 활용과 관련된 내용은 생략하였습니다.)
// DataStore.cs (WelsonJS.Esent)
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: 2025 Namhyeon Go <gnh1201@catswords.re.kr>, Catswords OSS and WelsonJS Contributors
// https://github.com/gnh1201/welsonjs
//
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using Microsoft.Isam.Esent.Interop;
namespace WelsonJS.Esent
{
public class EsentDatabase : IDisposable
{
private const string _primaryKeyindexName = "primary";
private const string _indexNamePrefix = "idx_";
private const string _databaseName = "metadata.edb";
private readonly ICompatibleLogger _logger;
private static readonly object _lock = new object();
private static bool _initialized = false;
private static Instance _instance;
private static string _workingDirectory;
private static string _filePath;
private readonly Session _session;
private readonly JET_DBID _dbid;
private readonly Schema _schema;
private readonly Column _primaryKey;
private readonly Dictionary<string, JET_COLUMNID> _columnIds;
public EsentDatabase(Schema schema, string workingDirectory, ICompatibleLogger logger = null)
{
_logger = logger ?? new TraceLogger();
if (schema == null)
throw new ArgumentNullException(nameof(schema));
_primaryKey = schema.PrimaryKey;
if (_primaryKey == null)
throw new ArgumentNullException();
if (!schema.Columns.Exists(c => c == _primaryKey))
throw new ArgumentException($"Primary key '{_primaryKey.Name}' is not in schema.");
_workingDirectory = workingDirectory;
_schema = schema;
_columnIds = new Dictionary<string, JET_COLUMNID>(StringComparer.OrdinalIgnoreCase);
InitializeInstance();
_session = new Session(_instance);
if (!File.Exists(_filePath))
{
Api.JetCreateDatabase(_session, _filePath, null, out _dbid, CreateDatabaseGrbit.None);
CreateTable(_schema);
}
else
{
Api.JetAttachDatabase(_session, _filePath, AttachDatabaseGrbit.None);
Api.JetOpenDatabase(_session, _filePath, null, out _dbid, OpenDatabaseGrbit.None);
}
CacheColumns();
}
private static void InitializeInstance()
{
if (_initialized) return;
lock (_lock)
{
if (_initialized) return;
// set the file path
_filePath = Path.Combine(_workingDirectory, _databaseName);
// config the instance
_instance = new Instance(typeof(EsentDatabase).Namespace);
_instance.Parameters.SystemDirectory = _workingDirectory;
_instance.Parameters.LogFileDirectory = _workingDirectory;
_instance.Parameters.TempDirectory = _workingDirectory;
// initialize the instance
_instance.Init();
_initialized = true;
}
}
private void CreateTable(Schema schema)
{
Api.JetBeginTransaction(_session);
JET_TABLEID tableid;
Api.JetCreateTable(_session, _dbid, schema.TableName, 0, 100, out tableid);
foreach (var col in schema.Columns)
{
var coldef = new JET_COLUMNDEF
{
coltyp = col.Type,
cbMax = col.MaxSize,
cp = col.CodePage
};
Api.JetAddColumn(_session, tableid, col.Name, coldef, null, 0, out _);
}
CreateIndex(tableid, new[] { _primaryKey }, CreateIndexGrbit.IndexPrimary | CreateIndexGrbit.IndexUnique);
Api.JetCloseTable(_session, tableid);
Api.JetCommitTransaction(_session, CommitTransactionGrbit.None);
}
public void CreateIndex(JET_TABLEID tableid, IEnumerable<Column> columns, CreateIndexGrbit grbit)
{
if (columns == null)
throw new ArgumentNullException(nameof(columns));
var columnList = columns.ToList();
if (columnList.Count == 0)
throw new ArgumentException("At least one column is required to create an index.", nameof(columns));
if (tableid == JET_TABLEID.Nil)
throw new ArgumentException("Invalid table ID.", nameof(tableid));
bool isPrimaryKeyIndex = (columnList.Count == 1 && columnList[0].IsPrimaryKey);
if (isPrimaryKeyIndex && (grbit & CreateIndexGrbit.IndexPrimary) == 0)
throw new ArgumentException("Primary key index must have the CreateIndexGrbit.IndexPrimary flag set.", nameof(grbit));
string indexName = isPrimaryKeyIndex
? _primaryKeyindexName
: _indexNamePrefix + string.Join("_", columnList.Select(c => c.Name));
string key = string.Concat(columnList.Select(c => "+" + c.Name));
string keyDescription = key + "\0\0"; // double null-terminated
int keyDescriptionLength = keyDescription.Length;
Api.JetCreateIndex(
_session,
tableid,
indexName,
grbit,
keyDescription,
keyDescriptionLength,
100
);
}
private void CacheColumns()
{
using (var table = new Table(_session, _dbid, _schema.TableName, OpenTableGrbit.ReadOnly))
{
foreach (var col in _schema.Columns)
{
try
{
JET_COLUMNID colid = Api.GetTableColumnid(_session, table, col.Name);
_columnIds[col.Name] = colid;
}
catch (EsentColumnNotFoundException)
{
_logger.Warn($"Column '{col.Name}' not found.");
}
}
}
}
public bool Insert(Dictionary<string, object> values, out object key)
{
return TrySaveRecord(values, JET_prep.Insert, expectSeek: false, out key);
}
public bool Update(Dictionary<string, object> values)
{
return TrySaveRecord(values, JET_prep.Replace, expectSeek: true, out _);
}
private bool TrySaveRecord(
Dictionary<string, object> values,
JET_prep prepType,
bool expectSeek,
out object primaryKeyValue)
{
primaryKeyValue = null;
if (!TryGetPrimaryKeyValue(values, out var keyValue))
return false;
var keyType = _primaryKey.Type;
using (var table = new Table(_session, _dbid, _schema.TableName, OpenTableGrbit.Updatable))
{
try
{
Api.JetBeginTransaction(_session);
Api.JetSetCurrentIndex(_session, table, _primaryKeyindexName);
MakeKeyByType(keyValue, keyType, _session, table);
bool found = Api.TrySeek(_session, table, SeekGrbit.SeekEQ);
if (expectSeek != found)
{
_logger.Warn($"[ESENT] Operation skipped. Seek result = {found}, expected = {expectSeek}");
Api.JetRollback(_session, RollbackTransactionGrbit.None);
return false;
}
Api.JetPrepareUpdate(_session, table, prepType);
SetAllColumns(values, table);
Api.JetUpdate(_session, table);
Api.JetCommitTransaction(_session, CommitTransactionGrbit.None);
if (prepType == JET_prep.Insert)
primaryKeyValue = keyValue;
return true;
}
catch (Exception ex)
{
Api.JetRollback(_session, RollbackTransactionGrbit.None);
throw new InvalidOperationException($"[ESENT] Operation failed: {ex.Message}");
}
}
}
public Dictionary<string, object> FindById(object keyValue)
{
var result = new Dictionary<string, object>();
var keyType = _primaryKey.Type;
using (var table = new Table(_session, _dbid, _schema.TableName, OpenTableGrbit.ReadOnly))
{
Api.JetSetCurrentIndex(_session, table, _primaryKeyindexName);
MakeKeyByType(keyValue, keyType, _session, table);
if (!Api.TrySeek(_session, table, SeekGrbit.SeekEQ))
return null;
foreach (var col in _schema.Columns)
{
if (!_columnIds.TryGetValue(col.Name, out var colid))
continue;
var value = RetrieveColumnByType(_session, table, colid, col.Type);
result[col.Name] = value;
}
}
return result;
}
public List<Dictionary<string, object>> FindAll()
{
var results = new List<Dictionary<string, object>>();
using (var table = new Table(_session, _dbid, _schema.TableName, OpenTableGrbit.ReadOnly))
{
Api.JetSetCurrentIndex(_session, table, _primaryKeyindexName);
if (!Api.TryMoveFirst(_session, table))
return results;
do
{
var row = new Dictionary<string, object>();
foreach (var col in _schema.Columns)
{
if (!_columnIds.TryGetValue(col.Name, out var colid))
continue;
var value = RetrieveColumnByType(_session, table, colid, col.Type);
row[col.Name] = value;
}
results.Add(row);
}
while (Api.TryMoveNext(_session, table));
}
return results;
}
public bool DeleteById(object keyValue)
{
var keyType = _primaryKey.Type;
using (var table = new Table(_session, _dbid, _schema.TableName, OpenTableGrbit.Updatable))
{
Api.JetSetCurrentIndex(_session, table, _primaryKeyindexName);
MakeKeyByType(keyValue, keyType, _session, table);
if (!Api.TrySeek(_session, table, SeekGrbit.SeekEQ))
return false;
Api.JetDelete(_session, table);
return true;
}
}
private object RetrieveColumnByType(Session session, Table table, JET_COLUMNID columnId, JET_coltyp type)
{
switch (type)
{
case JET_coltyp.Text:
return Api.RetrieveColumnAsString(session, table, columnId, Encoding.Unicode);
case JET_coltyp.Long:
return Api.RetrieveColumnAsInt32(session, table, columnId);
case JET_coltyp.IEEEDouble:
return Api.RetrieveColumnAsDouble(session, table, columnId);
case JET_coltyp.DateTime:
return Api.RetrieveColumnAsDateTime(session, table, columnId);
case JET_coltyp.Binary:
case JET_coltyp.LongBinary:
return Api.RetrieveColumn(session, table, columnId);
default:
_logger.Warn($"[ESENT] Unsupported RetrieveColumn type: {type}");
return null;
}
}
private bool TryGetPrimaryKeyValue(Dictionary<string, object> values, out object keyValue)
{
keyValue = null;
if (!values.TryGetValue(_primaryKey.Name, out keyValue))
{
_logger.Warn($"[ESENT] Missing primary key '{_primaryKey.Name}'.");
return false;
}
if (keyValue == null)
{
_logger.Warn("[ESENT] Primary key value cannot be null.");
return false;
}
return true;
}
private JET_coltyp GetColumnType(string columnName)
{
var column = _schema.Columns.FirstOrDefault(c => c.Name == columnName);
if (column == null)
throw new ArgumentException($"Column '{columnName}' not found in schema.");
return column.Type;
}
private void SetAllColumns(Dictionary<string, object> values, Table table)
{
foreach (var kv in values)
{
if (!_columnIds.TryGetValue(kv.Key, out var colid))
{
_logger.Warn($"[ESENT] Column '{kv.Key}' not found in cache.");
continue;
}
var colType = GetColumnType(kv.Key);
SetColumnByType(_session, table, colid, kv.Value, colType);
}
}
private void SetColumnByType(Session session, Table table, JET_COLUMNID columnId, object value, JET_coltyp type)
{
if (value == null)
return;
switch (type)
{
case JET_coltyp.Text:
Api.SetColumn(session, table, columnId, value.ToString(), Encoding.Unicode);
break;
case JET_coltyp.Long:
Api.SetColumn(session, table, columnId, Convert.ToInt32(value));
break;
case JET_coltyp.IEEEDouble:
Api.SetColumn(session, table, columnId, Convert.ToDouble(value));
break;
case JET_coltyp.DateTime:
Api.SetColumn(session, table, columnId, Convert.ToDateTime(value));
break;
case JET_coltyp.Binary:
case JET_coltyp.LongBinary:
Api.SetColumn(session, table, columnId, (byte[])value);
break;
default:
_logger.Warn($"[ESENT] Unsupported SetColumn type: {type}");
break;
}
}
private void MakeKeyByType(object value, JET_coltyp type, Session session, Table table)
{
switch (type)
{
case JET_coltyp.Text:
Api.MakeKey(session, table, value.ToString(), Encoding.Unicode, MakeKeyGrbit.NewKey);
break;
case JET_coltyp.Long:
Api.MakeKey(session, table, Convert.ToInt32(value), MakeKeyGrbit.NewKey);
break;
case JET_coltyp.IEEEDouble:
Api.MakeKey(session, table, Convert.ToDouble(value), MakeKeyGrbit.NewKey);
break;
case JET_coltyp.DateTime:
Api.MakeKey(session, table, Convert.ToDateTime(value), MakeKeyGrbit.NewKey);
break;
case JET_coltyp.Binary:
case JET_coltyp.LongBinary:
Api.MakeKey(session, table, (byte[])value, MakeKeyGrbit.NewKey);
break;
default:
_logger.Warn($"[ESENT] Unsupported MakeKey type: {type}");
break;
}
}
public void Dispose()
{
_session?.Dispose();
}
}
}
이렇게하면 ESENT (ESE) 데이터베이스에서 어플리케이션 개발 용도에 적합한 칼럼, 스키마 및 CRUD를 위한 메소드를 구현할 수 있습니다.
이렇게 만들어진 구현은 다음과 같이 사용할 수 있습니다.
using WelsonJS.Esent;
// connect the database to manage instances
Schema schema = new Schema("Instances", new List<Column>
{
new Column("InstanceId", typeof(string), 255),
new Column("FirstDeployTime", typeof(DateTime), 1)
});
schema.SetPrimaryKey("InstanceId");
_db = new EsentDatabase(schema, Path.GetTempPath());
// Insert row
try
{
_db.Insert(new Dictionary<string, object>
{
["InstanceId"] = instanceId,
["FirstDeployTime"] = now
}, out _);
}
catch (Exception ex)
{
// Handle exception
}
// find all
var instances = _db.FindAll();
foreach (var instance in instances)
{
try
{
string instanceId = instance["InstanceId"].ToString();
string firstDeployTime = instance.ContainsKey("FirstDeployTime")
? ((DateTime)instance["FirstDeployTime"]).ToString("yyyy-MM-dd HH:mm:ss")
: "Unknown";
Console.WriteLine($"{firstDeployTime}, {instanceId}");
}
catch (Exception ex)
{
// Handle exception
}
}
우리에게 다소 익숙한 어플리케이션 개발에 적합한 메소드를 지원하고 있음을 확인할 수 있습니다.
@gnh1201@hackers.pub
세상에는 참 불경(?)한 것들이 많습니다.
개발에 쓰이는 도구가 불경하다며 어떠한 도구도 깔지말고 메모장(Notepad)만으로 코딩을 하라더니, 이제는 데이터베이스가 불경하다며 PC에 이미 설치된 기본 기능만으로 데이터베이스 처럼 사용할 수 있는 방법을 강구하라고 합니다.
아... 먹고 살기 쉽지 않습니다.
하지만 메모장 "Only" 코딩도 성공시킨 제가 데이터베이스라고 성공시키지 못하겠습니까? 해봅시다.
외부 개발 도구가 매우 제한적으로 공급되는 환경(사실상 쓸 수 있는 개발 도구가 "메모장"밖에 없는 환경)에서도 고급 기능을 구현할 수 있는 방안에 대한 요구는, 윈도우즈 운영체제의 내부 ECMAScript를 활용하는 WelsonJS 프레임워크의 공개를 통해 해결할 수 있었습니다.
WelsonJS 프레임워크는 2025년 6월 26일 기준, 깃허브(GitHub)에서 350개의 긍정적인 평가(Stars)를 받는 성과도 이루었습니다.
이후로, 지금까지의 경험을 데이터베이스 영역으로 확대해보자는 의견이 나오기 시작하였습니다. 상용 데이터베이스의 존재는 그 자체만으로도 매우 거대하기 때문에 외부 개발 도구의 공급이 제한되는 환경에서는 데이터베이스도 업무에 걸림돌이 되기 때문입니다.
결국 운영체제에서 기본적으로 지원되는 데이터베이스로 사용 가능한 시스템이 있는지 사전 조사를 시작합니다.
결국 윈도우즈 운영체제에는 Windows 2000부터 현재 버전(Windows 11)에도 탑재된 오던 ESENT (ESE) 데이터베이스라는 것이 존재한다는걸 확인하게 됩니다.
제 그동안의 경험에 의한 관심법과, LLM(거대 언어 모델)과의 협공이라면 빠른 시간 내에 구현이 가능할거라 생각하지만 상대적으로 정보가 부족하여 생각보다는 오래 걸렸습니다.
ESENT 데이터베이스를 사용하기 위한 API 구현은 존재하지만, Column(칼럼), Schema(스키마, 혹은 테이블), CRUD(생성, 읽기, 수정, 삭제) 등 실제 어플리케이션을 구현하는 용도로 사용하기에 적합하도록 데이터베이스의 개념을 추상화해둔 구현은 존재하지 않았습니다.
그런고로, 직접 작성을 해보았습니다! 먼저 칼럼과 스키마라는 개념을 구현해봅시다.
// Column.cs (WelsonJS.Esent)
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: 2025 Namhyeon Go <gnh1201@catswords.re.kr>, Catswords OSS and WelsonJS Contributors
// https://github.com/gnh1201/welsonjs
//
using System;
using System.Text;
using Microsoft.Isam.Esent.Interop;
namespace WelsonJS.Esent
{
public class Column
{
public string Name { get; set; }
public JET_coltyp Type { get; set; }
public int MaxSize { get; set; }
public JET_CP CodePage { get; set; }
public bool IsPrimaryKey { get; set; } = false;
public override string ToString()
{
return Name;
}
public static explicit operator string(Column c)
{
return c.ToString();
}
public Column(string name, JET_coltyp type, int maxSize = 0, JET_CP codePage = JET_CP.None)
{
Name = name;
Type = type;
MaxSize = maxSize;
CodePage = codePage == JET_CP.None ?
JET_CP.Unicode : codePage;
}
public Column(string name, Type dotNetType, int maxSize = 0, Encoding encoding = null)
{
Name = name;
Type = GetJetColtypFromType(dotNetType);
MaxSize = maxSize;
CodePage = GetJetCpFromEncoding(encoding ?? Encoding.Unicode);
}
private static JET_coltyp GetJetColtypFromType(Type type)
{
if (type == typeof(string)) return JET_coltyp.Text;
if (type == typeof(int)) return JET_coltyp.Long;
if (type == typeof(long)) return JET_coltyp.Currency;
if (type == typeof(bool)) return JET_coltyp.Bit;
if (type == typeof(float)) return JET_coltyp.IEEESingle;
if (type == typeof(double)) return JET_coltyp.IEEEDouble;
if (type == typeof(DateTime)) return JET_coltyp.DateTime;
if (type == typeof(byte[])) return JET_coltyp.LongBinary;
throw new NotSupportedException($"Unsupported .NET type: {type.FullName}");
}
private static JET_CP GetJetCpFromEncoding(Encoding encoding)
{
if (encoding == Encoding.Unicode) return JET_CP.Unicode;
if (encoding == Encoding.ASCII) return JET_CP.ASCII;
if (encoding.CodePage == 1252) return (JET_CP)1252; // Windows-1252 / Latin1
if (encoding.CodePage == 51949) return (JET_CP)51949; // EUC-KR
if (encoding.CodePage == 949) return (JET_CP)949; // UHC (Windows Korean)
if (encoding.CodePage == 932) return (JET_CP)932; // Shift-JIS (Japanese)
if (encoding.CodePage == 936) return (JET_CP)936; // GB2312 (Simplified Chinese)
if (encoding.CodePage == 65001) return (JET_CP)65001; // UTF-8
if (encoding.CodePage == 28591) return (JET_CP)28591; // ISO-8859-1
throw new NotSupportedException($"Unsupported encoding: {encoding.WebName} (code page {encoding.CodePage})");
}
}
}
// Schema.cs (WelsonJS.Esent)
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: 2025 Namhyeon Go <gnh1201@catswords.re.kr>, Catswords OSS and WelsonJS Contributors
// https://github.com/gnh1201/welsonjs
//
using System;
using System.Collections.Generic;
namespace WelsonJS.Esent
{
public class Schema
{
public string TableName { get; set; }
public List<Column> Columns { get; set; }
public Column PrimaryKey
{
get
{
return Columns.Find(c => c.IsPrimaryKey) ?? null;
}
}
public Schema(string tableName, List<Column> columns)
{
TableName = tableName;
Columns = columns ?? new List<Column>();
}
public void SetPrimaryKey(string columnName)
{
Column column = Columns.Find(c => c.Name.Equals(columnName, StringComparison.OrdinalIgnoreCase));
if (column != null)
{
column.IsPrimaryKey = true;
}
else
{
throw new ArgumentException($"Column '{columnName}' does not exist in schema '{TableName}'.");
}
}
}
}
그리고, 대망의 CRUD를 구현해줍니다. (예시의 내용 중 Logger 인터페이스의 활용과 관련된 내용은 생략하였습니다.)
// DataStore.cs (WelsonJS.Esent)
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: 2025 Namhyeon Go <gnh1201@catswords.re.kr>, Catswords OSS and WelsonJS Contributors
// https://github.com/gnh1201/welsonjs
//
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using Microsoft.Isam.Esent.Interop;
namespace WelsonJS.Esent
{
public class EsentDatabase : IDisposable
{
private const string _primaryKeyindexName = "primary";
private const string _indexNamePrefix = "idx_";
private const string _databaseName = "metadata.edb";
private readonly ICompatibleLogger _logger;
private static readonly object _lock = new object();
private static bool _initialized = false;
private static Instance _instance;
private static string _workingDirectory;
private static string _filePath;
private readonly Session _session;
private readonly JET_DBID _dbid;
private readonly Schema _schema;
private readonly Column _primaryKey;
private readonly Dictionary<string, JET_COLUMNID> _columnIds;
public EsentDatabase(Schema schema, string workingDirectory, ICompatibleLogger logger = null)
{
_logger = logger ?? new TraceLogger();
if (schema == null)
throw new ArgumentNullException(nameof(schema));
_primaryKey = schema.PrimaryKey;
if (_primaryKey == null)
throw new ArgumentNullException();
if (!schema.Columns.Exists(c => c == _primaryKey))
throw new ArgumentException($"Primary key '{_primaryKey.Name}' is not in schema.");
_workingDirectory = workingDirectory;
_schema = schema;
_columnIds = new Dictionary<string, JET_COLUMNID>(StringComparer.OrdinalIgnoreCase);
InitializeInstance();
_session = new Session(_instance);
if (!File.Exists(_filePath))
{
Api.JetCreateDatabase(_session, _filePath, null, out _dbid, CreateDatabaseGrbit.None);
CreateTable(_schema);
}
else
{
Api.JetAttachDatabase(_session, _filePath, AttachDatabaseGrbit.None);
Api.JetOpenDatabase(_session, _filePath, null, out _dbid, OpenDatabaseGrbit.None);
}
CacheColumns();
}
private static void InitializeInstance()
{
if (_initialized) return;
lock (_lock)
{
if (_initialized) return;
// set the file path
_filePath = Path.Combine(_workingDirectory, _databaseName);
// config the instance
_instance = new Instance(typeof(EsentDatabase).Namespace);
_instance.Parameters.SystemDirectory = _workingDirectory;
_instance.Parameters.LogFileDirectory = _workingDirectory;
_instance.Parameters.TempDirectory = _workingDirectory;
// initialize the instance
_instance.Init();
_initialized = true;
}
}
private void CreateTable(Schema schema)
{
Api.JetBeginTransaction(_session);
JET_TABLEID tableid;
Api.JetCreateTable(_session, _dbid, schema.TableName, 0, 100, out tableid);
foreach (var col in schema.Columns)
{
var coldef = new JET_COLUMNDEF
{
coltyp = col.Type,
cbMax = col.MaxSize,
cp = col.CodePage
};
Api.JetAddColumn(_session, tableid, col.Name, coldef, null, 0, out _);
}
CreateIndex(tableid, new[] { _primaryKey }, CreateIndexGrbit.IndexPrimary | CreateIndexGrbit.IndexUnique);
Api.JetCloseTable(_session, tableid);
Api.JetCommitTransaction(_session, CommitTransactionGrbit.None);
}
public void CreateIndex(JET_TABLEID tableid, IEnumerable<Column> columns, CreateIndexGrbit grbit)
{
if (columns == null)
throw new ArgumentNullException(nameof(columns));
var columnList = columns.ToList();
if (columnList.Count == 0)
throw new ArgumentException("At least one column is required to create an index.", nameof(columns));
if (tableid == JET_TABLEID.Nil)
throw new ArgumentException("Invalid table ID.", nameof(tableid));
bool isPrimaryKeyIndex = (columnList.Count == 1 && columnList[0].IsPrimaryKey);
if (isPrimaryKeyIndex && (grbit & CreateIndexGrbit.IndexPrimary) == 0)
throw new ArgumentException("Primary key index must have the CreateIndexGrbit.IndexPrimary flag set.", nameof(grbit));
string indexName = isPrimaryKeyIndex
? _primaryKeyindexName
: _indexNamePrefix + string.Join("_", columnList.Select(c => c.Name));
string key = string.Concat(columnList.Select(c => "+" + c.Name));
string keyDescription = key + "\0\0"; // double null-terminated
int keyDescriptionLength = keyDescription.Length;
Api.JetCreateIndex(
_session,
tableid,
indexName,
grbit,
keyDescription,
keyDescriptionLength,
100
);
}
private void CacheColumns()
{
using (var table = new Table(_session, _dbid, _schema.TableName, OpenTableGrbit.ReadOnly))
{
foreach (var col in _schema.Columns)
{
try
{
JET_COLUMNID colid = Api.GetTableColumnid(_session, table, col.Name);
_columnIds[col.Name] = colid;
}
catch (EsentColumnNotFoundException)
{
_logger.Warn($"Column '{col.Name}' not found.");
}
}
}
}
public bool Insert(Dictionary<string, object> values, out object key)
{
return TrySaveRecord(values, JET_prep.Insert, expectSeek: false, out key);
}
public bool Update(Dictionary<string, object> values)
{
return TrySaveRecord(values, JET_prep.Replace, expectSeek: true, out _);
}
private bool TrySaveRecord(
Dictionary<string, object> values,
JET_prep prepType,
bool expectSeek,
out object primaryKeyValue)
{
primaryKeyValue = null;
if (!TryGetPrimaryKeyValue(values, out var keyValue))
return false;
var keyType = _primaryKey.Type;
using (var table = new Table(_session, _dbid, _schema.TableName, OpenTableGrbit.Updatable))
{
try
{
Api.JetBeginTransaction(_session);
Api.JetSetCurrentIndex(_session, table, _primaryKeyindexName);
MakeKeyByType(keyValue, keyType, _session, table);
bool found = Api.TrySeek(_session, table, SeekGrbit.SeekEQ);
if (expectSeek != found)
{
_logger.Warn($"[ESENT] Operation skipped. Seek result = {found}, expected = {expectSeek}");
Api.JetRollback(_session, RollbackTransactionGrbit.None);
return false;
}
Api.JetPrepareUpdate(_session, table, prepType);
SetAllColumns(values, table);
Api.JetUpdate(_session, table);
Api.JetCommitTransaction(_session, CommitTransactionGrbit.None);
if (prepType == JET_prep.Insert)
primaryKeyValue = keyValue;
return true;
}
catch (Exception ex)
{
Api.JetRollback(_session, RollbackTransactionGrbit.None);
throw new InvalidOperationException($"[ESENT] Operation failed: {ex.Message}");
}
}
}
public Dictionary<string, object> FindById(object keyValue)
{
var result = new Dictionary<string, object>();
var keyType = _primaryKey.Type;
using (var table = new Table(_session, _dbid, _schema.TableName, OpenTableGrbit.ReadOnly))
{
Api.JetSetCurrentIndex(_session, table, _primaryKeyindexName);
MakeKeyByType(keyValue, keyType, _session, table);
if (!Api.TrySeek(_session, table, SeekGrbit.SeekEQ))
return null;
foreach (var col in _schema.Columns)
{
if (!_columnIds.TryGetValue(col.Name, out var colid))
continue;
var value = RetrieveColumnByType(_session, table, colid, col.Type);
result[col.Name] = value;
}
}
return result;
}
public List<Dictionary<string, object>> FindAll()
{
var results = new List<Dictionary<string, object>>();
using (var table = new Table(_session, _dbid, _schema.TableName, OpenTableGrbit.ReadOnly))
{
Api.JetSetCurrentIndex(_session, table, _primaryKeyindexName);
if (!Api.TryMoveFirst(_session, table))
return results;
do
{
var row = new Dictionary<string, object>();
foreach (var col in _schema.Columns)
{
if (!_columnIds.TryGetValue(col.Name, out var colid))
continue;
var value = RetrieveColumnByType(_session, table, colid, col.Type);
row[col.Name] = value;
}
results.Add(row);
}
while (Api.TryMoveNext(_session, table));
}
return results;
}
public bool DeleteById(object keyValue)
{
var keyType = _primaryKey.Type;
using (var table = new Table(_session, _dbid, _schema.TableName, OpenTableGrbit.Updatable))
{
Api.JetSetCurrentIndex(_session, table, _primaryKeyindexName);
MakeKeyByType(keyValue, keyType, _session, table);
if (!Api.TrySeek(_session, table, SeekGrbit.SeekEQ))
return false;
Api.JetDelete(_session, table);
return true;
}
}
private object RetrieveColumnByType(Session session, Table table, JET_COLUMNID columnId, JET_coltyp type)
{
switch (type)
{
case JET_coltyp.Text:
return Api.RetrieveColumnAsString(session, table, columnId, Encoding.Unicode);
case JET_coltyp.Long:
return Api.RetrieveColumnAsInt32(session, table, columnId);
case JET_coltyp.IEEEDouble:
return Api.RetrieveColumnAsDouble(session, table, columnId);
case JET_coltyp.DateTime:
return Api.RetrieveColumnAsDateTime(session, table, columnId);
case JET_coltyp.Binary:
case JET_coltyp.LongBinary:
return Api.RetrieveColumn(session, table, columnId);
default:
_logger.Warn($"[ESENT] Unsupported RetrieveColumn type: {type}");
return null;
}
}
private bool TryGetPrimaryKeyValue(Dictionary<string, object> values, out object keyValue)
{
keyValue = null;
if (!values.TryGetValue(_primaryKey.Name, out keyValue))
{
_logger.Warn($"[ESENT] Missing primary key '{_primaryKey.Name}'.");
return false;
}
if (keyValue == null)
{
_logger.Warn("[ESENT] Primary key value cannot be null.");
return false;
}
return true;
}
private JET_coltyp GetColumnType(string columnName)
{
var column = _schema.Columns.FirstOrDefault(c => c.Name == columnName);
if (column == null)
throw new ArgumentException($"Column '{columnName}' not found in schema.");
return column.Type;
}
private void SetAllColumns(Dictionary<string, object> values, Table table)
{
foreach (var kv in values)
{
if (!_columnIds.TryGetValue(kv.Key, out var colid))
{
_logger.Warn($"[ESENT] Column '{kv.Key}' not found in cache.");
continue;
}
var colType = GetColumnType(kv.Key);
SetColumnByType(_session, table, colid, kv.Value, colType);
}
}
private void SetColumnByType(Session session, Table table, JET_COLUMNID columnId, object value, JET_coltyp type)
{
if (value == null)
return;
switch (type)
{
case JET_coltyp.Text:
Api.SetColumn(session, table, columnId, value.ToString(), Encoding.Unicode);
break;
case JET_coltyp.Long:
Api.SetColumn(session, table, columnId, Convert.ToInt32(value));
break;
case JET_coltyp.IEEEDouble:
Api.SetColumn(session, table, columnId, Convert.ToDouble(value));
break;
case JET_coltyp.DateTime:
Api.SetColumn(session, table, columnId, Convert.ToDateTime(value));
break;
case JET_coltyp.Binary:
case JET_coltyp.LongBinary:
Api.SetColumn(session, table, columnId, (byte[])value);
break;
default:
_logger.Warn($"[ESENT] Unsupported SetColumn type: {type}");
break;
}
}
private void MakeKeyByType(object value, JET_coltyp type, Session session, Table table)
{
switch (type)
{
case JET_coltyp.Text:
Api.MakeKey(session, table, value.ToString(), Encoding.Unicode, MakeKeyGrbit.NewKey);
break;
case JET_coltyp.Long:
Api.MakeKey(session, table, Convert.ToInt32(value), MakeKeyGrbit.NewKey);
break;
case JET_coltyp.IEEEDouble:
Api.MakeKey(session, table, Convert.ToDouble(value), MakeKeyGrbit.NewKey);
break;
case JET_coltyp.DateTime:
Api.MakeKey(session, table, Convert.ToDateTime(value), MakeKeyGrbit.NewKey);
break;
case JET_coltyp.Binary:
case JET_coltyp.LongBinary:
Api.MakeKey(session, table, (byte[])value, MakeKeyGrbit.NewKey);
break;
default:
_logger.Warn($"[ESENT] Unsupported MakeKey type: {type}");
break;
}
}
public void Dispose()
{
_session?.Dispose();
}
}
}
이렇게하면 ESENT (ESE) 데이터베이스에서 어플리케이션 개발 용도에 적합한 칼럼, 스키마 및 CRUD를 위한 메소드를 구현할 수 있습니다.
이렇게 만들어진 구현은 다음과 같이 사용할 수 있습니다.
using WelsonJS.Esent;
// connect the database to manage instances
Schema schema = new Schema("Instances", new List<Column>
{
new Column("InstanceId", typeof(string), 255),
new Column("FirstDeployTime", typeof(DateTime), 1)
});
schema.SetPrimaryKey("InstanceId");
_db = new EsentDatabase(schema, Path.GetTempPath());
// Insert row
try
{
_db.Insert(new Dictionary<string, object>
{
["InstanceId"] = instanceId,
["FirstDeployTime"] = now
}, out _);
}
catch (Exception ex)
{
// Handle exception
}
// find all
var instances = _db.FindAll();
foreach (var instance in instances)
{
try
{
string instanceId = instance["InstanceId"].ToString();
string firstDeployTime = instance.ContainsKey("FirstDeployTime")
? ((DateTime)instance["FirstDeployTime"]).ToString("yyyy-MM-dd HH:mm:ss")
: "Unknown";
Console.WriteLine($"{firstDeployTime}, {instanceId}");
}
catch (Exception ex)
{
// Handle exception
}
}
우리에게 다소 익숙한 어플리케이션 개발에 적합한 메소드를 지원하고 있음을 확인할 수 있습니다.
@gnh1201@hackers.pub
세상에는 참 불경(?)한 것들이 많습니다.
개발에 쓰이는 도구가 불경하다며 어떠한 도구도 깔지말고 메모장(Notepad)만으로 코딩을 하라더니, 이제는 데이터베이스가 불경하다며 PC에 이미 설치된 기본 기능만으로 데이터베이스 처럼 사용할 수 있는 방법을 강구하라고 합니다.
아... 먹고 살기 쉽지 않습니다.
하지만 메모장 "Only" 코딩도 성공시킨 제가 데이터베이스라고 성공시키지 못하겠습니까? 해봅시다.
외부 개발 도구가 매우 제한적으로 공급되는 환경(사실상 쓸 수 있는 개발 도구가 "메모장"밖에 없는 환경)에서도 고급 기능을 구현할 수 있는 방안에 대한 요구는, 윈도우즈 운영체제의 내부 ECMAScript를 활용하는 WelsonJS 프레임워크의 공개를 통해 해결할 수 있었습니다.
WelsonJS 프레임워크는 2025년 6월 26일 기준, 깃허브(GitHub)에서 350개의 긍정적인 평가(Stars)를 받는 성과도 이루었습니다.
이후로, 지금까지의 경험을 데이터베이스 영역으로 확대해보자는 의견이 나오기 시작하였습니다. 상용 데이터베이스의 존재는 그 자체만으로도 매우 거대하기 때문에 외부 개발 도구의 공급이 제한되는 환경에서는 데이터베이스도 업무에 걸림돌이 되기 때문입니다.
결국 운영체제에서 기본적으로 지원되는 데이터베이스로 사용 가능한 시스템이 있는지 사전 조사를 시작합니다.
결국 윈도우즈 운영체제에는 Windows 2000부터 현재 버전(Windows 11)에도 탑재된 오던 ESENT (ESE) 데이터베이스라는 것이 존재한다는걸 확인하게 됩니다.
제 그동안의 경험에 의한 관심법과, LLM(거대 언어 모델)과의 협공이라면 빠른 시간 내에 구현이 가능할거라 생각하지만 상대적으로 정보가 부족하여 생각보다는 오래 걸렸습니다.
ESENT 데이터베이스를 사용하기 위한 API 구현은 존재하지만, Column(칼럼), Schema(스키마, 혹은 테이블), CRUD(생성, 읽기, 수정, 삭제) 등 실제 어플리케이션을 구현하는 용도로 사용하기에 적합하도록 데이터베이스의 개념을 추상화해둔 구현은 존재하지 않았습니다.
그런고로, 직접 작성을 해보았습니다! 먼저 칼럼과 스키마라는 개념을 구현해봅시다.
// Column.cs (WelsonJS.Esent)
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: 2025 Namhyeon Go <gnh1201@catswords.re.kr>, Catswords OSS and WelsonJS Contributors
// https://github.com/gnh1201/welsonjs
//
using System;
using System.Text;
using Microsoft.Isam.Esent.Interop;
namespace WelsonJS.Esent
{
public class Column
{
public string Name { get; set; }
public JET_coltyp Type { get; set; }
public int MaxSize { get; set; }
public JET_CP CodePage { get; set; }
public bool IsPrimaryKey { get; set; } = false;
public override string ToString()
{
return Name;
}
public static explicit operator string(Column c)
{
return c.ToString();
}
public Column(string name, JET_coltyp type, int maxSize = 0, JET_CP codePage = JET_CP.None)
{
Name = name;
Type = type;
MaxSize = maxSize;
CodePage = codePage == JET_CP.None ?
JET_CP.Unicode : codePage;
}
public Column(string name, Type dotNetType, int maxSize = 0, Encoding encoding = null)
{
Name = name;
Type = GetJetColtypFromType(dotNetType);
MaxSize = maxSize;
CodePage = GetJetCpFromEncoding(encoding ?? Encoding.Unicode);
}
private static JET_coltyp GetJetColtypFromType(Type type)
{
if (type == typeof(string)) return JET_coltyp.Text;
if (type == typeof(int)) return JET_coltyp.Long;
if (type == typeof(long)) return JET_coltyp.Currency;
if (type == typeof(bool)) return JET_coltyp.Bit;
if (type == typeof(float)) return JET_coltyp.IEEESingle;
if (type == typeof(double)) return JET_coltyp.IEEEDouble;
if (type == typeof(DateTime)) return JET_coltyp.DateTime;
if (type == typeof(byte[])) return JET_coltyp.LongBinary;
throw new NotSupportedException($"Unsupported .NET type: {type.FullName}");
}
private static JET_CP GetJetCpFromEncoding(Encoding encoding)
{
if (encoding == Encoding.Unicode) return JET_CP.Unicode;
if (encoding == Encoding.ASCII) return JET_CP.ASCII;
if (encoding.CodePage == 1252) return (JET_CP)1252; // Windows-1252 / Latin1
if (encoding.CodePage == 51949) return (JET_CP)51949; // EUC-KR
if (encoding.CodePage == 949) return (JET_CP)949; // UHC (Windows Korean)
if (encoding.CodePage == 932) return (JET_CP)932; // Shift-JIS (Japanese)
if (encoding.CodePage == 936) return (JET_CP)936; // GB2312 (Simplified Chinese)
if (encoding.CodePage == 65001) return (JET_CP)65001; // UTF-8
if (encoding.CodePage == 28591) return (JET_CP)28591; // ISO-8859-1
throw new NotSupportedException($"Unsupported encoding: {encoding.WebName} (code page {encoding.CodePage})");
}
}
}
// Schema.cs (WelsonJS.Esent)
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: 2025 Namhyeon Go <gnh1201@catswords.re.kr>, Catswords OSS and WelsonJS Contributors
// https://github.com/gnh1201/welsonjs
//
using System;
using System.Collections.Generic;
namespace WelsonJS.Esent
{
public class Schema
{
public string TableName { get; set; }
public List<Column> Columns { get; set; }
public Column PrimaryKey
{
get
{
return Columns.Find(c => c.IsPrimaryKey) ?? null;
}
}
public Schema(string tableName, List<Column> columns)
{
TableName = tableName;
Columns = columns ?? new List<Column>();
}
public void SetPrimaryKey(string columnName)
{
Column column = Columns.Find(c => c.Name.Equals(columnName, StringComparison.OrdinalIgnoreCase));
if (column != null)
{
column.IsPrimaryKey = true;
}
else
{
throw new ArgumentException($"Column '{columnName}' does not exist in schema '{TableName}'.");
}
}
}
}
그리고, 대망의 CRUD를 구현해줍니다. (예시의 내용 중 Logger 인터페이스의 활용과 관련된 내용은 생략하였습니다.)
// DataStore.cs (WelsonJS.Esent)
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: 2025 Namhyeon Go <gnh1201@catswords.re.kr>, Catswords OSS and WelsonJS Contributors
// https://github.com/gnh1201/welsonjs
//
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using Microsoft.Isam.Esent.Interop;
namespace WelsonJS.Esent
{
public class EsentDatabase : IDisposable
{
private const string _primaryKeyindexName = "primary";
private const string _indexNamePrefix = "idx_";
private const string _databaseName = "metadata.edb";
private readonly ICompatibleLogger _logger;
private static readonly object _lock = new object();
private static bool _initialized = false;
private static Instance _instance;
private static string _workingDirectory;
private static string _filePath;
private readonly Session _session;
private readonly JET_DBID _dbid;
private readonly Schema _schema;
private readonly Column _primaryKey;
private readonly Dictionary<string, JET_COLUMNID> _columnIds;
public EsentDatabase(Schema schema, string workingDirectory, ICompatibleLogger logger = null)
{
_logger = logger ?? new TraceLogger();
if (schema == null)
throw new ArgumentNullException(nameof(schema));
_primaryKey = schema.PrimaryKey;
if (_primaryKey == null)
throw new ArgumentNullException();
if (!schema.Columns.Exists(c => c == _primaryKey))
throw new ArgumentException($"Primary key '{_primaryKey.Name}' is not in schema.");
_workingDirectory = workingDirectory;
_schema = schema;
_columnIds = new Dictionary<string, JET_COLUMNID>(StringComparer.OrdinalIgnoreCase);
InitializeInstance();
_session = new Session(_instance);
if (!File.Exists(_filePath))
{
Api.JetCreateDatabase(_session, _filePath, null, out _dbid, CreateDatabaseGrbit.None);
CreateTable(_schema);
}
else
{
Api.JetAttachDatabase(_session, _filePath, AttachDatabaseGrbit.None);
Api.JetOpenDatabase(_session, _filePath, null, out _dbid, OpenDatabaseGrbit.None);
}
CacheColumns();
}
private static void InitializeInstance()
{
if (_initialized) return;
lock (_lock)
{
if (_initialized) return;
// set the file path
_filePath = Path.Combine(_workingDirectory, _databaseName);
// config the instance
_instance = new Instance(typeof(EsentDatabase).Namespace);
_instance.Parameters.SystemDirectory = _workingDirectory;
_instance.Parameters.LogFileDirectory = _workingDirectory;
_instance.Parameters.TempDirectory = _workingDirectory;
// initialize the instance
_instance.Init();
_initialized = true;
}
}
private void CreateTable(Schema schema)
{
Api.JetBeginTransaction(_session);
JET_TABLEID tableid;
Api.JetCreateTable(_session, _dbid, schema.TableName, 0, 100, out tableid);
foreach (var col in schema.Columns)
{
var coldef = new JET_COLUMNDEF
{
coltyp = col.Type,
cbMax = col.MaxSize,
cp = col.CodePage
};
Api.JetAddColumn(_session, tableid, col.Name, coldef, null, 0, out _);
}
CreateIndex(tableid, new[] { _primaryKey }, CreateIndexGrbit.IndexPrimary | CreateIndexGrbit.IndexUnique);
Api.JetCloseTable(_session, tableid);
Api.JetCommitTransaction(_session, CommitTransactionGrbit.None);
}
public void CreateIndex(JET_TABLEID tableid, IEnumerable<Column> columns, CreateIndexGrbit grbit)
{
if (columns == null)
throw new ArgumentNullException(nameof(columns));
var columnList = columns.ToList();
if (columnList.Count == 0)
throw new ArgumentException("At least one column is required to create an index.", nameof(columns));
if (tableid == JET_TABLEID.Nil)
throw new ArgumentException("Invalid table ID.", nameof(tableid));
bool isPrimaryKeyIndex = (columnList.Count == 1 && columnList[0].IsPrimaryKey);
if (isPrimaryKeyIndex && (grbit & CreateIndexGrbit.IndexPrimary) == 0)
throw new ArgumentException("Primary key index must have the CreateIndexGrbit.IndexPrimary flag set.", nameof(grbit));
string indexName = isPrimaryKeyIndex
? _primaryKeyindexName
: _indexNamePrefix + string.Join("_", columnList.Select(c => c.Name));
string key = string.Concat(columnList.Select(c => "+" + c.Name));
string keyDescription = key + "\0\0"; // double null-terminated
int keyDescriptionLength = keyDescription.Length;
Api.JetCreateIndex(
_session,
tableid,
indexName,
grbit,
keyDescription,
keyDescriptionLength,
100
);
}
private void CacheColumns()
{
using (var table = new Table(_session, _dbid, _schema.TableName, OpenTableGrbit.ReadOnly))
{
foreach (var col in _schema.Columns)
{
try
{
JET_COLUMNID colid = Api.GetTableColumnid(_session, table, col.Name);
_columnIds[col.Name] = colid;
}
catch (EsentColumnNotFoundException)
{
_logger.Warn($"Column '{col.Name}' not found.");
}
}
}
}
public bool Insert(Dictionary<string, object> values, out object key)
{
return TrySaveRecord(values, JET_prep.Insert, expectSeek: false, out key);
}
public bool Update(Dictionary<string, object> values)
{
return TrySaveRecord(values, JET_prep.Replace, expectSeek: true, out _);
}
private bool TrySaveRecord(
Dictionary<string, object> values,
JET_prep prepType,
bool expectSeek,
out object primaryKeyValue)
{
primaryKeyValue = null;
if (!TryGetPrimaryKeyValue(values, out var keyValue))
return false;
var keyType = _primaryKey.Type;
using (var table = new Table(_session, _dbid, _schema.TableName, OpenTableGrbit.Updatable))
{
try
{
Api.JetBeginTransaction(_session);
Api.JetSetCurrentIndex(_session, table, _primaryKeyindexName);
MakeKeyByType(keyValue, keyType, _session, table);
bool found = Api.TrySeek(_session, table, SeekGrbit.SeekEQ);
if (expectSeek != found)
{
_logger.Warn($"[ESENT] Operation skipped. Seek result = {found}, expected = {expectSeek}");
Api.JetRollback(_session, RollbackTransactionGrbit.None);
return false;
}
Api.JetPrepareUpdate(_session, table, prepType);
SetAllColumns(values, table);
Api.JetUpdate(_session, table);
Api.JetCommitTransaction(_session, CommitTransactionGrbit.None);
if (prepType == JET_prep.Insert)
primaryKeyValue = keyValue;
return true;
}
catch (Exception ex)
{
Api.JetRollback(_session, RollbackTransactionGrbit.None);
throw new InvalidOperationException($"[ESENT] Operation failed: {ex.Message}");
}
}
}
public Dictionary<string, object> FindById(object keyValue)
{
var result = new Dictionary<string, object>();
var keyType = _primaryKey.Type;
using (var table = new Table(_session, _dbid, _schema.TableName, OpenTableGrbit.ReadOnly))
{
Api.JetSetCurrentIndex(_session, table, _primaryKeyindexName);
MakeKeyByType(keyValue, keyType, _session, table);
if (!Api.TrySeek(_session, table, SeekGrbit.SeekEQ))
return null;
foreach (var col in _schema.Columns)
{
if (!_columnIds.TryGetValue(col.Name, out var colid))
continue;
var value = RetrieveColumnByType(_session, table, colid, col.Type);
result[col.Name] = value;
}
}
return result;
}
public List<Dictionary<string, object>> FindAll()
{
var results = new List<Dictionary<string, object>>();
using (var table = new Table(_session, _dbid, _schema.TableName, OpenTableGrbit.ReadOnly))
{
Api.JetSetCurrentIndex(_session, table, _primaryKeyindexName);
if (!Api.TryMoveFirst(_session, table))
return results;
do
{
var row = new Dictionary<string, object>();
foreach (var col in _schema.Columns)
{
if (!_columnIds.TryGetValue(col.Name, out var colid))
continue;
var value = RetrieveColumnByType(_session, table, colid, col.Type);
row[col.Name] = value;
}
results.Add(row);
}
while (Api.TryMoveNext(_session, table));
}
return results;
}
public bool DeleteById(object keyValue)
{
var keyType = _primaryKey.Type;
using (var table = new Table(_session, _dbid, _schema.TableName, OpenTableGrbit.Updatable))
{
Api.JetSetCurrentIndex(_session, table, _primaryKeyindexName);
MakeKeyByType(keyValue, keyType, _session, table);
if (!Api.TrySeek(_session, table, SeekGrbit.SeekEQ))
return false;
Api.JetDelete(_session, table);
return true;
}
}
private object RetrieveColumnByType(Session session, Table table, JET_COLUMNID columnId, JET_coltyp type)
{
switch (type)
{
case JET_coltyp.Text:
return Api.RetrieveColumnAsString(session, table, columnId, Encoding.Unicode);
case JET_coltyp.Long:
return Api.RetrieveColumnAsInt32(session, table, columnId);
case JET_coltyp.IEEEDouble:
return Api.RetrieveColumnAsDouble(session, table, columnId);
case JET_coltyp.DateTime:
return Api.RetrieveColumnAsDateTime(session, table, columnId);
case JET_coltyp.Binary:
case JET_coltyp.LongBinary:
return Api.RetrieveColumn(session, table, columnId);
default:
_logger.Warn($"[ESENT] Unsupported RetrieveColumn type: {type}");
return null;
}
}
private bool TryGetPrimaryKeyValue(Dictionary<string, object> values, out object keyValue)
{
keyValue = null;
if (!values.TryGetValue(_primaryKey.Name, out keyValue))
{
_logger.Warn($"[ESENT] Missing primary key '{_primaryKey.Name}'.");
return false;
}
if (keyValue == null)
{
_logger.Warn("[ESENT] Primary key value cannot be null.");
return false;
}
return true;
}
private JET_coltyp GetColumnType(string columnName)
{
var column = _schema.Columns.FirstOrDefault(c => c.Name == columnName);
if (column == null)
throw new ArgumentException($"Column '{columnName}' not found in schema.");
return column.Type;
}
private void SetAllColumns(Dictionary<string, object> values, Table table)
{
foreach (var kv in values)
{
if (!_columnIds.TryGetValue(kv.Key, out var colid))
{
_logger.Warn($"[ESENT] Column '{kv.Key}' not found in cache.");
continue;
}
var colType = GetColumnType(kv.Key);
SetColumnByType(_session, table, colid, kv.Value, colType);
}
}
private void SetColumnByType(Session session, Table table, JET_COLUMNID columnId, object value, JET_coltyp type)
{
if (value == null)
return;
switch (type)
{
case JET_coltyp.Text:
Api.SetColumn(session, table, columnId, value.ToString(), Encoding.Unicode);
break;
case JET_coltyp.Long:
Api.SetColumn(session, table, columnId, Convert.ToInt32(value));
break;
case JET_coltyp.IEEEDouble:
Api.SetColumn(session, table, columnId, Convert.ToDouble(value));
break;
case JET_coltyp.DateTime:
Api.SetColumn(session, table, columnId, Convert.ToDateTime(value));
break;
case JET_coltyp.Binary:
case JET_coltyp.LongBinary:
Api.SetColumn(session, table, columnId, (byte[])value);
break;
default:
_logger.Warn($"[ESENT] Unsupported SetColumn type: {type}");
break;
}
}
private void MakeKeyByType(object value, JET_coltyp type, Session session, Table table)
{
switch (type)
{
case JET_coltyp.Text:
Api.MakeKey(session, table, value.ToString(), Encoding.Unicode, MakeKeyGrbit.NewKey);
break;
case JET_coltyp.Long:
Api.MakeKey(session, table, Convert.ToInt32(value), MakeKeyGrbit.NewKey);
break;
case JET_coltyp.IEEEDouble:
Api.MakeKey(session, table, Convert.ToDouble(value), MakeKeyGrbit.NewKey);
break;
case JET_coltyp.DateTime:
Api.MakeKey(session, table, Convert.ToDateTime(value), MakeKeyGrbit.NewKey);
break;
case JET_coltyp.Binary:
case JET_coltyp.LongBinary:
Api.MakeKey(session, table, (byte[])value, MakeKeyGrbit.NewKey);
break;
default:
_logger.Warn($"[ESENT] Unsupported MakeKey type: {type}");
break;
}
}
public void Dispose()
{
_session?.Dispose();
}
}
}
이렇게하면 ESENT (ESE) 데이터베이스에서 어플리케이션 개발 용도에 적합한 칼럼, 스키마 및 CRUD를 위한 메소드를 구현할 수 있습니다.
이렇게 만들어진 구현은 다음과 같이 사용할 수 있습니다.
using WelsonJS.Esent;
// connect the database to manage instances
Schema schema = new Schema("Instances", new List<Column>
{
new Column("InstanceId", typeof(string), 255),
new Column("FirstDeployTime", typeof(DateTime), 1)
});
schema.SetPrimaryKey("InstanceId");
_db = new EsentDatabase(schema, Path.GetTempPath());
// Insert row
try
{
_db.Insert(new Dictionary<string, object>
{
["InstanceId"] = instanceId,
["FirstDeployTime"] = now
}, out _);
}
catch (Exception ex)
{
// Handle exception
}
// find all
var instances = _db.FindAll();
foreach (var instance in instances)
{
try
{
string instanceId = instance["InstanceId"].ToString();
string firstDeployTime = instance.ContainsKey("FirstDeployTime")
? ((DateTime)instance["FirstDeployTime"]).ToString("yyyy-MM-dd HH:mm:ss")
: "Unknown";
Console.WriteLine($"{firstDeployTime}, {instanceId}");
}
catch (Exception ex)
{
// Handle exception
}
}
우리에게 다소 익숙한 어플리케이션 개발에 적합한 메소드를 지원하고 있음을 확인할 수 있습니다.
@gnh1201@hackers.pub
세상에는 참 불경(?)한 것들이 많습니다.
개발에 쓰이는 도구가 불경하다며 어떠한 도구도 깔지말고 메모장(Notepad)만으로 코딩을 하라더니, 이제는 데이터베이스가 불경하다며 PC에 이미 설치된 기본 기능만으로 데이터베이스 처럼 사용할 수 있는 방법을 강구하라고 합니다.
아... 먹고 살기 쉽지 않습니다.
하지만 메모장 "Only" 코딩도 성공시킨 제가 데이터베이스라고 성공시키지 못하겠습니까? 해봅시다.
외부 개발 도구가 매우 제한적으로 공급되는 환경(사실상 쓸 수 있는 개발 도구가 "메모장"밖에 없는 환경)에서도 고급 기능을 구현할 수 있는 방안에 대한 요구는, 윈도우즈 운영체제의 내부 ECMAScript를 활용하는 WelsonJS 프레임워크의 공개를 통해 해결할 수 있었습니다.
WelsonJS 프레임워크는 2025년 6월 26일 기준, 깃허브(GitHub)에서 350개의 긍정적인 평가(Stars)를 받는 성과도 이루었습니다.
이후로, 지금까지의 경험을 데이터베이스 영역으로 확대해보자는 의견이 나오기 시작하였습니다. 상용 데이터베이스의 존재는 그 자체만으로도 매우 거대하기 때문에 외부 개발 도구의 공급이 제한되는 환경에서는 데이터베이스도 업무에 걸림돌이 되기 때문입니다.
결국 운영체제에서 기본적으로 지원되는 데이터베이스로 사용 가능한 시스템이 있는지 사전 조사를 시작합니다.
결국 윈도우즈 운영체제에는 Windows 2000부터 현재 버전(Windows 11)에도 탑재된 오던 ESENT (ESE) 데이터베이스라는 것이 존재한다는걸 확인하게 됩니다.
제 그동안의 경험에 의한 관심법과, LLM(거대 언어 모델)과의 협공이라면 빠른 시간 내에 구현이 가능할거라 생각하지만 상대적으로 정보가 부족하여 생각보다는 오래 걸렸습니다.
ESENT 데이터베이스를 사용하기 위한 API 구현은 존재하지만, Column(칼럼), Schema(스키마, 혹은 테이블), CRUD(생성, 읽기, 수정, 삭제) 등 실제 어플리케이션을 구현하는 용도로 사용하기에 적합하도록 데이터베이스의 개념을 추상화해둔 구현은 존재하지 않았습니다.
그런고로, 직접 작성을 해보았습니다! 먼저 칼럼과 스키마라는 개념을 구현해봅시다.
// Column.cs (WelsonJS.Esent)
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: 2025 Namhyeon Go <gnh1201@catswords.re.kr>, Catswords OSS and WelsonJS Contributors
// https://github.com/gnh1201/welsonjs
//
using System;
using System.Text;
using Microsoft.Isam.Esent.Interop;
namespace WelsonJS.Esent
{
public class Column
{
public string Name { get; set; }
public JET_coltyp Type { get; set; }
public int MaxSize { get; set; }
public JET_CP CodePage { get; set; }
public bool IsPrimaryKey { get; set; } = false;
public override string ToString()
{
return Name;
}
public static explicit operator string(Column c)
{
return c.ToString();
}
public Column(string name, JET_coltyp type, int maxSize = 0, JET_CP codePage = JET_CP.None)
{
Name = name;
Type = type;
MaxSize = maxSize;
CodePage = codePage == JET_CP.None ?
JET_CP.Unicode : codePage;
}
public Column(string name, Type dotNetType, int maxSize = 0, Encoding encoding = null)
{
Name = name;
Type = GetJetColtypFromType(dotNetType);
MaxSize = maxSize;
CodePage = GetJetCpFromEncoding(encoding ?? Encoding.Unicode);
}
private static JET_coltyp GetJetColtypFromType(Type type)
{
if (type == typeof(string)) return JET_coltyp.Text;
if (type == typeof(int)) return JET_coltyp.Long;
if (type == typeof(long)) return JET_coltyp.Currency;
if (type == typeof(bool)) return JET_coltyp.Bit;
if (type == typeof(float)) return JET_coltyp.IEEESingle;
if (type == typeof(double)) return JET_coltyp.IEEEDouble;
if (type == typeof(DateTime)) return JET_coltyp.DateTime;
if (type == typeof(byte[])) return JET_coltyp.LongBinary;
throw new NotSupportedException($"Unsupported .NET type: {type.FullName}");
}
private static JET_CP GetJetCpFromEncoding(Encoding encoding)
{
if (encoding == Encoding.Unicode) return JET_CP.Unicode;
if (encoding == Encoding.ASCII) return JET_CP.ASCII;
if (encoding.CodePage == 1252) return (JET_CP)1252; // Windows-1252 / Latin1
if (encoding.CodePage == 51949) return (JET_CP)51949; // EUC-KR
if (encoding.CodePage == 949) return (JET_CP)949; // UHC (Windows Korean)
if (encoding.CodePage == 932) return (JET_CP)932; // Shift-JIS (Japanese)
if (encoding.CodePage == 936) return (JET_CP)936; // GB2312 (Simplified Chinese)
if (encoding.CodePage == 65001) return (JET_CP)65001; // UTF-8
if (encoding.CodePage == 28591) return (JET_CP)28591; // ISO-8859-1
throw new NotSupportedException($"Unsupported encoding: {encoding.WebName} (code page {encoding.CodePage})");
}
}
}
// Schema.cs (WelsonJS.Esent)
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: 2025 Namhyeon Go <gnh1201@catswords.re.kr>, Catswords OSS and WelsonJS Contributors
// https://github.com/gnh1201/welsonjs
//
using System;
using System.Collections.Generic;
namespace WelsonJS.Esent
{
public class Schema
{
public string TableName { get; set; }
public List<Column> Columns { get; set; }
public Column PrimaryKey
{
get
{
return Columns.Find(c => c.IsPrimaryKey) ?? null;
}
}
public Schema(string tableName, List<Column> columns)
{
TableName = tableName;
Columns = columns ?? new List<Column>();
}
public void SetPrimaryKey(string columnName)
{
Column column = Columns.Find(c => c.Name.Equals(columnName, StringComparison.OrdinalIgnoreCase));
if (column != null)
{
column.IsPrimaryKey = true;
}
else
{
throw new ArgumentException($"Column '{columnName}' does not exist in schema '{TableName}'.");
}
}
}
}
그리고, 대망의 CRUD를 구현해줍니다. (예시의 내용 중 Logger 인터페이스의 활용과 관련된 내용은 생략하였습니다.)
// DataStore.cs (WelsonJS.Esent)
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: 2025 Namhyeon Go <gnh1201@catswords.re.kr>, Catswords OSS and WelsonJS Contributors
// https://github.com/gnh1201/welsonjs
//
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using Microsoft.Isam.Esent.Interop;
namespace WelsonJS.Esent
{
public class EsentDatabase : IDisposable
{
private const string _primaryKeyindexName = "primary";
private const string _indexNamePrefix = "idx_";
private const string _databaseName = "metadata.edb";
private readonly ICompatibleLogger _logger;
private static readonly object _lock = new object();
private static bool _initialized = false;
private static Instance _instance;
private static string _workingDirectory;
private static string _filePath;
private readonly Session _session;
private readonly JET_DBID _dbid;
private readonly Schema _schema;
private readonly Column _primaryKey;
private readonly Dictionary<string, JET_COLUMNID> _columnIds;
public EsentDatabase(Schema schema, string workingDirectory, ICompatibleLogger logger = null)
{
_logger = logger ?? new TraceLogger();
if (schema == null)
throw new ArgumentNullException(nameof(schema));
_primaryKey = schema.PrimaryKey;
if (_primaryKey == null)
throw new ArgumentNullException();
if (!schema.Columns.Exists(c => c == _primaryKey))
throw new ArgumentException($"Primary key '{_primaryKey.Name}' is not in schema.");
_workingDirectory = workingDirectory;
_schema = schema;
_columnIds = new Dictionary<string, JET_COLUMNID>(StringComparer.OrdinalIgnoreCase);
InitializeInstance();
_session = new Session(_instance);
if (!File.Exists(_filePath))
{
Api.JetCreateDatabase(_session, _filePath, null, out _dbid, CreateDatabaseGrbit.None);
CreateTable(_schema);
}
else
{
Api.JetAttachDatabase(_session, _filePath, AttachDatabaseGrbit.None);
Api.JetOpenDatabase(_session, _filePath, null, out _dbid, OpenDatabaseGrbit.None);
}
CacheColumns();
}
private static void InitializeInstance()
{
if (_initialized) return;
lock (_lock)
{
if (_initialized) return;
// set the file path
_filePath = Path.Combine(_workingDirectory, _databaseName);
// config the instance
_instance = new Instance(typeof(EsentDatabase).Namespace);
_instance.Parameters.SystemDirectory = _workingDirectory;
_instance.Parameters.LogFileDirectory = _workingDirectory;
_instance.Parameters.TempDirectory = _workingDirectory;
// initialize the instance
_instance.Init();
_initialized = true;
}
}
private void CreateTable(Schema schema)
{
Api.JetBeginTransaction(_session);
JET_TABLEID tableid;
Api.JetCreateTable(_session, _dbid, schema.TableName, 0, 100, out tableid);
foreach (var col in schema.Columns)
{
var coldef = new JET_COLUMNDEF
{
coltyp = col.Type,
cbMax = col.MaxSize,
cp = col.CodePage
};
Api.JetAddColumn(_session, tableid, col.Name, coldef, null, 0, out _);
}
CreateIndex(tableid, new[] { _primaryKey }, CreateIndexGrbit.IndexPrimary | CreateIndexGrbit.IndexUnique);
Api.JetCloseTable(_session, tableid);
Api.JetCommitTransaction(_session, CommitTransactionGrbit.None);
}
public void CreateIndex(JET_TABLEID tableid, IEnumerable<Column> columns, CreateIndexGrbit grbit)
{
if (columns == null)
throw new ArgumentNullException(nameof(columns));
var columnList = columns.ToList();
if (columnList.Count == 0)
throw new ArgumentException("At least one column is required to create an index.", nameof(columns));
if (tableid == JET_TABLEID.Nil)
throw new ArgumentException("Invalid table ID.", nameof(tableid));
bool isPrimaryKeyIndex = (columnList.Count == 1 && columnList[0].IsPrimaryKey);
if (isPrimaryKeyIndex && (grbit & CreateIndexGrbit.IndexPrimary) == 0)
throw new ArgumentException("Primary key index must have the CreateIndexGrbit.IndexPrimary flag set.", nameof(grbit));
string indexName = isPrimaryKeyIndex
? _primaryKeyindexName
: _indexNamePrefix + string.Join("_", columnList.Select(c => c.Name));
string key = string.Concat(columnList.Select(c => "+" + c.Name));
string keyDescription = key + "\0\0"; // double null-terminated
int keyDescriptionLength = keyDescription.Length;
Api.JetCreateIndex(
_session,
tableid,
indexName,
grbit,
keyDescription,
keyDescriptionLength,
100
);
}
private void CacheColumns()
{
using (var table = new Table(_session, _dbid, _schema.TableName, OpenTableGrbit.ReadOnly))
{
foreach (var col in _schema.Columns)
{
try
{
JET_COLUMNID colid = Api.GetTableColumnid(_session, table, col.Name);
_columnIds[col.Name] = colid;
}
catch (EsentColumnNotFoundException)
{
_logger.Warn($"Column '{col.Name}' not found.");
}
}
}
}
public bool Insert(Dictionary<string, object> values, out object key)
{
return TrySaveRecord(values, JET_prep.Insert, expectSeek: false, out key);
}
public bool Update(Dictionary<string, object> values)
{
return TrySaveRecord(values, JET_prep.Replace, expectSeek: true, out _);
}
private bool TrySaveRecord(
Dictionary<string, object> values,
JET_prep prepType,
bool expectSeek,
out object primaryKeyValue)
{
primaryKeyValue = null;
if (!TryGetPrimaryKeyValue(values, out var keyValue))
return false;
var keyType = _primaryKey.Type;
using (var table = new Table(_session, _dbid, _schema.TableName, OpenTableGrbit.Updatable))
{
try
{
Api.JetBeginTransaction(_session);
Api.JetSetCurrentIndex(_session, table, _primaryKeyindexName);
MakeKeyByType(keyValue, keyType, _session, table);
bool found = Api.TrySeek(_session, table, SeekGrbit.SeekEQ);
if (expectSeek != found)
{
_logger.Warn($"[ESENT] Operation skipped. Seek result = {found}, expected = {expectSeek}");
Api.JetRollback(_session, RollbackTransactionGrbit.None);
return false;
}
Api.JetPrepareUpdate(_session, table, prepType);
SetAllColumns(values, table);
Api.JetUpdate(_session, table);
Api.JetCommitTransaction(_session, CommitTransactionGrbit.None);
if (prepType == JET_prep.Insert)
primaryKeyValue = keyValue;
return true;
}
catch (Exception ex)
{
Api.JetRollback(_session, RollbackTransactionGrbit.None);
throw new InvalidOperationException($"[ESENT] Operation failed: {ex.Message}");
}
}
}
public Dictionary<string, object> FindById(object keyValue)
{
var result = new Dictionary<string, object>();
var keyType = _primaryKey.Type;
using (var table = new Table(_session, _dbid, _schema.TableName, OpenTableGrbit.ReadOnly))
{
Api.JetSetCurrentIndex(_session, table, _primaryKeyindexName);
MakeKeyByType(keyValue, keyType, _session, table);
if (!Api.TrySeek(_session, table, SeekGrbit.SeekEQ))
return null;
foreach (var col in _schema.Columns)
{
if (!_columnIds.TryGetValue(col.Name, out var colid))
continue;
var value = RetrieveColumnByType(_session, table, colid, col.Type);
result[col.Name] = value;
}
}
return result;
}
public List<Dictionary<string, object>> FindAll()
{
var results = new List<Dictionary<string, object>>();
using (var table = new Table(_session, _dbid, _schema.TableName, OpenTableGrbit.ReadOnly))
{
Api.JetSetCurrentIndex(_session, table, _primaryKeyindexName);
if (!Api.TryMoveFirst(_session, table))
return results;
do
{
var row = new Dictionary<string, object>();
foreach (var col in _schema.Columns)
{
if (!_columnIds.TryGetValue(col.Name, out var colid))
continue;
var value = RetrieveColumnByType(_session, table, colid, col.Type);
row[col.Name] = value;
}
results.Add(row);
}
while (Api.TryMoveNext(_session, table));
}
return results;
}
public bool DeleteById(object keyValue)
{
var keyType = _primaryKey.Type;
using (var table = new Table(_session, _dbid, _schema.TableName, OpenTableGrbit.Updatable))
{
Api.JetSetCurrentIndex(_session, table, _primaryKeyindexName);
MakeKeyByType(keyValue, keyType, _session, table);
if (!Api.TrySeek(_session, table, SeekGrbit.SeekEQ))
return false;
Api.JetDelete(_session, table);
return true;
}
}
private object RetrieveColumnByType(Session session, Table table, JET_COLUMNID columnId, JET_coltyp type)
{
switch (type)
{
case JET_coltyp.Text:
return Api.RetrieveColumnAsString(session, table, columnId, Encoding.Unicode);
case JET_coltyp.Long:
return Api.RetrieveColumnAsInt32(session, table, columnId);
case JET_coltyp.IEEEDouble:
return Api.RetrieveColumnAsDouble(session, table, columnId);
case JET_coltyp.DateTime:
return Api.RetrieveColumnAsDateTime(session, table, columnId);
case JET_coltyp.Binary:
case JET_coltyp.LongBinary:
return Api.RetrieveColumn(session, table, columnId);
default:
_logger.Warn($"[ESENT] Unsupported RetrieveColumn type: {type}");
return null;
}
}
private bool TryGetPrimaryKeyValue(Dictionary<string, object> values, out object keyValue)
{
keyValue = null;
if (!values.TryGetValue(_primaryKey.Name, out keyValue))
{
_logger.Warn($"[ESENT] Missing primary key '{_primaryKey.Name}'.");
return false;
}
if (keyValue == null)
{
_logger.Warn("[ESENT] Primary key value cannot be null.");
return false;
}
return true;
}
private JET_coltyp GetColumnType(string columnName)
{
var column = _schema.Columns.FirstOrDefault(c => c.Name == columnName);
if (column == null)
throw new ArgumentException($"Column '{columnName}' not found in schema.");
return column.Type;
}
private void SetAllColumns(Dictionary<string, object> values, Table table)
{
foreach (var kv in values)
{
if (!_columnIds.TryGetValue(kv.Key, out var colid))
{
_logger.Warn($"[ESENT] Column '{kv.Key}' not found in cache.");
continue;
}
var colType = GetColumnType(kv.Key);
SetColumnByType(_session, table, colid, kv.Value, colType);
}
}
private void SetColumnByType(Session session, Table table, JET_COLUMNID columnId, object value, JET_coltyp type)
{
if (value == null)
return;
switch (type)
{
case JET_coltyp.Text:
Api.SetColumn(session, table, columnId, value.ToString(), Encoding.Unicode);
break;
case JET_coltyp.Long:
Api.SetColumn(session, table, columnId, Convert.ToInt32(value));
break;
case JET_coltyp.IEEEDouble:
Api.SetColumn(session, table, columnId, Convert.ToDouble(value));
break;
case JET_coltyp.DateTime:
Api.SetColumn(session, table, columnId, Convert.ToDateTime(value));
break;
case JET_coltyp.Binary:
case JET_coltyp.LongBinary:
Api.SetColumn(session, table, columnId, (byte[])value);
break;
default:
_logger.Warn($"[ESENT] Unsupported SetColumn type: {type}");
break;
}
}
private void MakeKeyByType(object value, JET_coltyp type, Session session, Table table)
{
switch (type)
{
case JET_coltyp.Text:
Api.MakeKey(session, table, value.ToString(), Encoding.Unicode, MakeKeyGrbit.NewKey);
break;
case JET_coltyp.Long:
Api.MakeKey(session, table, Convert.ToInt32(value), MakeKeyGrbit.NewKey);
break;
case JET_coltyp.IEEEDouble:
Api.MakeKey(session, table, Convert.ToDouble(value), MakeKeyGrbit.NewKey);
break;
case JET_coltyp.DateTime:
Api.MakeKey(session, table, Convert.ToDateTime(value), MakeKeyGrbit.NewKey);
break;
case JET_coltyp.Binary:
case JET_coltyp.LongBinary:
Api.MakeKey(session, table, (byte[])value, MakeKeyGrbit.NewKey);
break;
default:
_logger.Warn($"[ESENT] Unsupported MakeKey type: {type}");
break;
}
}
public void Dispose()
{
_session?.Dispose();
}
}
}
이렇게하면 ESENT (ESE) 데이터베이스에서 어플리케이션 개발 용도에 적합한 칼럼, 스키마 및 CRUD를 위한 메소드를 구현할 수 있습니다.
이렇게 만들어진 구현은 다음과 같이 사용할 수 있습니다.
using WelsonJS.Esent;
// connect the database to manage instances
Schema schema = new Schema("Instances", new List<Column>
{
new Column("InstanceId", typeof(string), 255),
new Column("FirstDeployTime", typeof(DateTime), 1)
});
schema.SetPrimaryKey("InstanceId");
_db = new EsentDatabase(schema, Path.GetTempPath());
// Insert row
try
{
_db.Insert(new Dictionary<string, object>
{
["InstanceId"] = instanceId,
["FirstDeployTime"] = now
}, out _);
}
catch (Exception ex)
{
// Handle exception
}
// find all
var instances = _db.FindAll();
foreach (var instance in instances)
{
try
{
string instanceId = instance["InstanceId"].ToString();
string firstDeployTime = instance.ContainsKey("FirstDeployTime")
? ((DateTime)instance["FirstDeployTime"]).ToString("yyyy-MM-dd HH:mm:ss")
: "Unknown";
Console.WriteLine($"{firstDeployTime}, {instanceId}");
}
catch (Exception ex)
{
// Handle exception
}
}
우리에게 다소 익숙한 어플리케이션 개발에 적합한 메소드를 지원하고 있음을 확인할 수 있습니다.
@gnh1201@hackers.pub
세상에는 참 불경(?)한 것들이 많습니다.
개발에 쓰이는 도구가 불경하다며 어떠한 도구도 깔지말고 메모장(Notepad)만으로 코딩을 하라더니, 이제는 데이터베이스가 불경하다며 PC에 이미 설치된 기본 기능만으로 데이터베이스 처럼 사용할 수 있는 방법을 강구하라고 합니다.
아... 먹고 살기 쉽지 않습니다.
하지만 메모장 "Only" 코딩도 성공시킨 제가 데이터베이스라고 성공시키지 못하겠습니까? 해봅시다.
외부 개발 도구가 매우 제한적으로 공급되는 환경(사실상 쓸 수 있는 개발 도구가 "메모장"밖에 없는 환경)에서도 고급 기능을 구현할 수 있는 방안에 대한 요구는, 윈도우즈 운영체제의 내부 ECMAScript를 활용하는 WelsonJS 프레임워크의 공개를 통해 해결할 수 있었습니다.
WelsonJS 프레임워크는 2025년 6월 26일 기준, 깃허브(GitHub)에서 350개의 긍정적인 평가(Stars)를 받는 성과도 이루었습니다.
이후로, 지금까지의 경험을 데이터베이스 영역으로 확대해보자는 의견이 나오기 시작하였습니다. 상용 데이터베이스의 존재는 그 자체만으로도 매우 거대하기 때문에 외부 개발 도구의 공급이 제한되는 환경에서는 데이터베이스도 업무에 걸림돌이 되기 때문입니다.
결국 운영체제에서 기본적으로 지원되는 데이터베이스로 사용 가능한 시스템이 있는지 사전 조사를 시작합니다.
결국 윈도우즈 운영체제에는 Windows 2000부터 현재 버전(Windows 11)에도 탑재된 오던 ESENT (ESE) 데이터베이스라는 것이 존재한다는걸 확인하게 됩니다.
제 그동안의 경험에 의한 관심법과, LLM(거대 언어 모델)과의 협공이라면 빠른 시간 내에 구현이 가능할거라 생각하지만 상대적으로 정보가 부족하여 생각보다는 오래 걸렸습니다.
ESENT 데이터베이스를 사용하기 위한 API 구현은 존재하지만, Column(칼럼), Schema(스키마, 혹은 테이블), CRUD(생성, 읽기, 수정, 삭제) 등 실제 어플리케이션을 구현하는 용도로 사용하기에 적합하도록 데이터베이스의 개념을 추상화해둔 구현은 존재하지 않았습니다.
그런고로, 직접 작성을 해보았습니다! 먼저 칼럼과 스키마라는 개념을 구현해봅시다.
// Column.cs (WelsonJS.Esent)
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: 2025 Namhyeon Go <gnh1201@catswords.re.kr>, Catswords OSS and WelsonJS Contributors
// https://github.com/gnh1201/welsonjs
//
using System;
using System.Text;
using Microsoft.Isam.Esent.Interop;
namespace WelsonJS.Esent
{
public class Column
{
public string Name { get; set; }
public JET_coltyp Type { get; set; }
public int MaxSize { get; set; }
public JET_CP CodePage { get; set; }
public bool IsPrimaryKey { get; set; } = false;
public override string ToString()
{
return Name;
}
public static explicit operator string(Column c)
{
return c.ToString();
}
public Column(string name, JET_coltyp type, int maxSize = 0, JET_CP codePage = JET_CP.None)
{
Name = name;
Type = type;
MaxSize = maxSize;
CodePage = codePage == JET_CP.None ?
JET_CP.Unicode : codePage;
}
public Column(string name, Type dotNetType, int maxSize = 0, Encoding encoding = null)
{
Name = name;
Type = GetJetColtypFromType(dotNetType);
MaxSize = maxSize;
CodePage = GetJetCpFromEncoding(encoding ?? Encoding.Unicode);
}
private static JET_coltyp GetJetColtypFromType(Type type)
{
if (type == typeof(string)) return JET_coltyp.Text;
if (type == typeof(int)) return JET_coltyp.Long;
if (type == typeof(long)) return JET_coltyp.Currency;
if (type == typeof(bool)) return JET_coltyp.Bit;
if (type == typeof(float)) return JET_coltyp.IEEESingle;
if (type == typeof(double)) return JET_coltyp.IEEEDouble;
if (type == typeof(DateTime)) return JET_coltyp.DateTime;
if (type == typeof(byte[])) return JET_coltyp.LongBinary;
throw new NotSupportedException($"Unsupported .NET type: {type.FullName}");
}
private static JET_CP GetJetCpFromEncoding(Encoding encoding)
{
if (encoding == Encoding.Unicode) return JET_CP.Unicode;
if (encoding == Encoding.ASCII) return JET_CP.ASCII;
if (encoding.CodePage == 1252) return (JET_CP)1252; // Windows-1252 / Latin1
if (encoding.CodePage == 51949) return (JET_CP)51949; // EUC-KR
if (encoding.CodePage == 949) return (JET_CP)949; // UHC (Windows Korean)
if (encoding.CodePage == 932) return (JET_CP)932; // Shift-JIS (Japanese)
if (encoding.CodePage == 936) return (JET_CP)936; // GB2312 (Simplified Chinese)
if (encoding.CodePage == 65001) return (JET_CP)65001; // UTF-8
if (encoding.CodePage == 28591) return (JET_CP)28591; // ISO-8859-1
throw new NotSupportedException($"Unsupported encoding: {encoding.WebName} (code page {encoding.CodePage})");
}
}
}
// Schema.cs (WelsonJS.Esent)
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: 2025 Namhyeon Go <gnh1201@catswords.re.kr>, Catswords OSS and WelsonJS Contributors
// https://github.com/gnh1201/welsonjs
//
using System;
using System.Collections.Generic;
namespace WelsonJS.Esent
{
public class Schema
{
public string TableName { get; set; }
public List<Column> Columns { get; set; }
public Column PrimaryKey
{
get
{
return Columns.Find(c => c.IsPrimaryKey) ?? null;
}
}
public Schema(string tableName, List<Column> columns)
{
TableName = tableName;
Columns = columns ?? new List<Column>();
}
public void SetPrimaryKey(string columnName)
{
Column column = Columns.Find(c => c.Name.Equals(columnName, StringComparison.OrdinalIgnoreCase));
if (column != null)
{
column.IsPrimaryKey = true;
}
else
{
throw new ArgumentException($"Column '{columnName}' does not exist in schema '{TableName}'.");
}
}
}
}
그리고, 대망의 CRUD를 구현해줍니다. (예시의 내용 중 Logger 인터페이스의 활용과 관련된 내용은 생략하였습니다.)
// DataStore.cs (WelsonJS.Esent)
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: 2025 Namhyeon Go <gnh1201@catswords.re.kr>, Catswords OSS and WelsonJS Contributors
// https://github.com/gnh1201/welsonjs
//
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using Microsoft.Isam.Esent.Interop;
namespace WelsonJS.Esent
{
public class EsentDatabase : IDisposable
{
private const string _primaryKeyindexName = "primary";
private const string _indexNamePrefix = "idx_";
private const string _databaseName = "metadata.edb";
private readonly ICompatibleLogger _logger;
private static readonly object _lock = new object();
private static bool _initialized = false;
private static Instance _instance;
private static string _workingDirectory;
private static string _filePath;
private readonly Session _session;
private readonly JET_DBID _dbid;
private readonly Schema _schema;
private readonly Column _primaryKey;
private readonly Dictionary<string, JET_COLUMNID> _columnIds;
public EsentDatabase(Schema schema, string workingDirectory, ICompatibleLogger logger = null)
{
_logger = logger ?? new TraceLogger();
if (schema == null)
throw new ArgumentNullException(nameof(schema));
_primaryKey = schema.PrimaryKey;
if (_primaryKey == null)
throw new ArgumentNullException();
if (!schema.Columns.Exists(c => c == _primaryKey))
throw new ArgumentException($"Primary key '{_primaryKey.Name}' is not in schema.");
_workingDirectory = workingDirectory;
_schema = schema;
_columnIds = new Dictionary<string, JET_COLUMNID>(StringComparer.OrdinalIgnoreCase);
InitializeInstance();
_session = new Session(_instance);
if (!File.Exists(_filePath))
{
Api.JetCreateDatabase(_session, _filePath, null, out _dbid, CreateDatabaseGrbit.None);
CreateTable(_schema);
}
else
{
Api.JetAttachDatabase(_session, _filePath, AttachDatabaseGrbit.None);
Api.JetOpenDatabase(_session, _filePath, null, out _dbid, OpenDatabaseGrbit.None);
}
CacheColumns();
}
private static void InitializeInstance()
{
if (_initialized) return;
lock (_lock)
{
if (_initialized) return;
// set the file path
_filePath = Path.Combine(_workingDirectory, _databaseName);
// config the instance
_instance = new Instance(typeof(EsentDatabase).Namespace);
_instance.Parameters.SystemDirectory = _workingDirectory;
_instance.Parameters.LogFileDirectory = _workingDirectory;
_instance.Parameters.TempDirectory = _workingDirectory;
// initialize the instance
_instance.Init();
_initialized = true;
}
}
private void CreateTable(Schema schema)
{
Api.JetBeginTransaction(_session);
JET_TABLEID tableid;
Api.JetCreateTable(_session, _dbid, schema.TableName, 0, 100, out tableid);
foreach (var col in schema.Columns)
{
var coldef = new JET_COLUMNDEF
{
coltyp = col.Type,
cbMax = col.MaxSize,
cp = col.CodePage
};
Api.JetAddColumn(_session, tableid, col.Name, coldef, null, 0, out _);
}
CreateIndex(tableid, new[] { _primaryKey }, CreateIndexGrbit.IndexPrimary | CreateIndexGrbit.IndexUnique);
Api.JetCloseTable(_session, tableid);
Api.JetCommitTransaction(_session, CommitTransactionGrbit.None);
}
public void CreateIndex(JET_TABLEID tableid, IEnumerable<Column> columns, CreateIndexGrbit grbit)
{
if (columns == null)
throw new ArgumentNullException(nameof(columns));
var columnList = columns.ToList();
if (columnList.Count == 0)
throw new ArgumentException("At least one column is required to create an index.", nameof(columns));
if (tableid == JET_TABLEID.Nil)
throw new ArgumentException("Invalid table ID.", nameof(tableid));
bool isPrimaryKeyIndex = (columnList.Count == 1 && columnList[0].IsPrimaryKey);
if (isPrimaryKeyIndex && (grbit & CreateIndexGrbit.IndexPrimary) == 0)
throw new ArgumentException("Primary key index must have the CreateIndexGrbit.IndexPrimary flag set.", nameof(grbit));
string indexName = isPrimaryKeyIndex
? _primaryKeyindexName
: _indexNamePrefix + string.Join("_", columnList.Select(c => c.Name));
string key = string.Concat(columnList.Select(c => "+" + c.Name));
string keyDescription = key + "\0\0"; // double null-terminated
int keyDescriptionLength = keyDescription.Length;
Api.JetCreateIndex(
_session,
tableid,
indexName,
grbit,
keyDescription,
keyDescriptionLength,
100
);
}
private void CacheColumns()
{
using (var table = new Table(_session, _dbid, _schema.TableName, OpenTableGrbit.ReadOnly))
{
foreach (var col in _schema.Columns)
{
try
{
JET_COLUMNID colid = Api.GetTableColumnid(_session, table, col.Name);
_columnIds[col.Name] = colid;
}
catch (EsentColumnNotFoundException)
{
_logger.Warn($"Column '{col.Name}' not found.");
}
}
}
}
public bool Insert(Dictionary<string, object> values, out object key)
{
return TrySaveRecord(values, JET_prep.Insert, expectSeek: false, out key);
}
public bool Update(Dictionary<string, object> values)
{
return TrySaveRecord(values, JET_prep.Replace, expectSeek: true, out _);
}
private bool TrySaveRecord(
Dictionary<string, object> values,
JET_prep prepType,
bool expectSeek,
out object primaryKeyValue)
{
primaryKeyValue = null;
if (!TryGetPrimaryKeyValue(values, out var keyValue))
return false;
var keyType = _primaryKey.Type;
using (var table = new Table(_session, _dbid, _schema.TableName, OpenTableGrbit.Updatable))
{
try
{
Api.JetBeginTransaction(_session);
Api.JetSetCurrentIndex(_session, table, _primaryKeyindexName);
MakeKeyByType(keyValue, keyType, _session, table);
bool found = Api.TrySeek(_session, table, SeekGrbit.SeekEQ);
if (expectSeek != found)
{
_logger.Warn($"[ESENT] Operation skipped. Seek result = {found}, expected = {expectSeek}");
Api.JetRollback(_session, RollbackTransactionGrbit.None);
return false;
}
Api.JetPrepareUpdate(_session, table, prepType);
SetAllColumns(values, table);
Api.JetUpdate(_session, table);
Api.JetCommitTransaction(_session, CommitTransactionGrbit.None);
if (prepType == JET_prep.Insert)
primaryKeyValue = keyValue;
return true;
}
catch (Exception ex)
{
Api.JetRollback(_session, RollbackTransactionGrbit.None);
throw new InvalidOperationException($"[ESENT] Operation failed: {ex.Message}");
}
}
}
public Dictionary<string, object> FindById(object keyValue)
{
var result = new Dictionary<string, object>();
var keyType = _primaryKey.Type;
using (var table = new Table(_session, _dbid, _schema.TableName, OpenTableGrbit.ReadOnly))
{
Api.JetSetCurrentIndex(_session, table, _primaryKeyindexName);
MakeKeyByType(keyValue, keyType, _session, table);
if (!Api.TrySeek(_session, table, SeekGrbit.SeekEQ))
return null;
foreach (var col in _schema.Columns)
{
if (!_columnIds.TryGetValue(col.Name, out var colid))
continue;
var value = RetrieveColumnByType(_session, table, colid, col.Type);
result[col.Name] = value;
}
}
return result;
}
public List<Dictionary<string, object>> FindAll()
{
var results = new List<Dictionary<string, object>>();
using (var table = new Table(_session, _dbid, _schema.TableName, OpenTableGrbit.ReadOnly))
{
Api.JetSetCurrentIndex(_session, table, _primaryKeyindexName);
if (!Api.TryMoveFirst(_session, table))
return results;
do
{
var row = new Dictionary<string, object>();
foreach (var col in _schema.Columns)
{
if (!_columnIds.TryGetValue(col.Name, out var colid))
continue;
var value = RetrieveColumnByType(_session, table, colid, col.Type);
row[col.Name] = value;
}
results.Add(row);
}
while (Api.TryMoveNext(_session, table));
}
return results;
}
public bool DeleteById(object keyValue)
{
var keyType = _primaryKey.Type;
using (var table = new Table(_session, _dbid, _schema.TableName, OpenTableGrbit.Updatable))
{
Api.JetSetCurrentIndex(_session, table, _primaryKeyindexName);
MakeKeyByType(keyValue, keyType, _session, table);
if (!Api.TrySeek(_session, table, SeekGrbit.SeekEQ))
return false;
Api.JetDelete(_session, table);
return true;
}
}
private object RetrieveColumnByType(Session session, Table table, JET_COLUMNID columnId, JET_coltyp type)
{
switch (type)
{
case JET_coltyp.Text:
return Api.RetrieveColumnAsString(session, table, columnId, Encoding.Unicode);
case JET_coltyp.Long:
return Api.RetrieveColumnAsInt32(session, table, columnId);
case JET_coltyp.IEEEDouble:
return Api.RetrieveColumnAsDouble(session, table, columnId);
case JET_coltyp.DateTime:
return Api.RetrieveColumnAsDateTime(session, table, columnId);
case JET_coltyp.Binary:
case JET_coltyp.LongBinary:
return Api.RetrieveColumn(session, table, columnId);
default:
_logger.Warn($"[ESENT] Unsupported RetrieveColumn type: {type}");
return null;
}
}
private bool TryGetPrimaryKeyValue(Dictionary<string, object> values, out object keyValue)
{
keyValue = null;
if (!values.TryGetValue(_primaryKey.Name, out keyValue))
{
_logger.Warn($"[ESENT] Missing primary key '{_primaryKey.Name}'.");
return false;
}
if (keyValue == null)
{
_logger.Warn("[ESENT] Primary key value cannot be null.");
return false;
}
return true;
}
private JET_coltyp GetColumnType(string columnName)
{
var column = _schema.Columns.FirstOrDefault(c => c.Name == columnName);
if (column == null)
throw new ArgumentException($"Column '{columnName}' not found in schema.");
return column.Type;
}
private void SetAllColumns(Dictionary<string, object> values, Table table)
{
foreach (var kv in values)
{
if (!_columnIds.TryGetValue(kv.Key, out var colid))
{
_logger.Warn($"[ESENT] Column '{kv.Key}' not found in cache.");
continue;
}
var colType = GetColumnType(kv.Key);
SetColumnByType(_session, table, colid, kv.Value, colType);
}
}
private void SetColumnByType(Session session, Table table, JET_COLUMNID columnId, object value, JET_coltyp type)
{
if (value == null)
return;
switch (type)
{
case JET_coltyp.Text:
Api.SetColumn(session, table, columnId, value.ToString(), Encoding.Unicode);
break;
case JET_coltyp.Long:
Api.SetColumn(session, table, columnId, Convert.ToInt32(value));
break;
case JET_coltyp.IEEEDouble:
Api.SetColumn(session, table, columnId, Convert.ToDouble(value));
break;
case JET_coltyp.DateTime:
Api.SetColumn(session, table, columnId, Convert.ToDateTime(value));
break;
case JET_coltyp.Binary:
case JET_coltyp.LongBinary:
Api.SetColumn(session, table, columnId, (byte[])value);
break;
default:
_logger.Warn($"[ESENT] Unsupported SetColumn type: {type}");
break;
}
}
private void MakeKeyByType(object value, JET_coltyp type, Session session, Table table)
{
switch (type)
{
case JET_coltyp.Text:
Api.MakeKey(session, table, value.ToString(), Encoding.Unicode, MakeKeyGrbit.NewKey);
break;
case JET_coltyp.Long:
Api.MakeKey(session, table, Convert.ToInt32(value), MakeKeyGrbit.NewKey);
break;
case JET_coltyp.IEEEDouble:
Api.MakeKey(session, table, Convert.ToDouble(value), MakeKeyGrbit.NewKey);
break;
case JET_coltyp.DateTime:
Api.MakeKey(session, table, Convert.ToDateTime(value), MakeKeyGrbit.NewKey);
break;
case JET_coltyp.Binary:
case JET_coltyp.LongBinary:
Api.MakeKey(session, table, (byte[])value, MakeKeyGrbit.NewKey);
break;
default:
_logger.Warn($"[ESENT] Unsupported MakeKey type: {type}");
break;
}
}
public void Dispose()
{
_session?.Dispose();
}
}
}
이렇게하면 ESENT (ESE) 데이터베이스에서 어플리케이션 개발 용도에 적합한 칼럼, 스키마 및 CRUD를 위한 메소드를 구현할 수 있습니다.
이렇게 만들어진 구현은 다음과 같이 사용할 수 있습니다.
using WelsonJS.Esent;
// connect the database to manage instances
Schema schema = new Schema("Instances", new List<Column>
{
new Column("InstanceId", typeof(string), 255),
new Column("FirstDeployTime", typeof(DateTime), 1)
});
schema.SetPrimaryKey("InstanceId");
_db = new EsentDatabase(schema, Path.GetTempPath());
// Insert row
try
{
_db.Insert(new Dictionary<string, object>
{
["InstanceId"] = instanceId,
["FirstDeployTime"] = now
}, out _);
}
catch (Exception ex)
{
// Handle exception
}
// find all
var instances = _db.FindAll();
foreach (var instance in instances)
{
try
{
string instanceId = instance["InstanceId"].ToString();
string firstDeployTime = instance.ContainsKey("FirstDeployTime")
? ((DateTime)instance["FirstDeployTime"]).ToString("yyyy-MM-dd HH:mm:ss")
: "Unknown";
Console.WriteLine($"{firstDeployTime}, {instanceId}");
}
catch (Exception ex)
{
// Handle exception
}
}
우리에게 다소 익숙한 어플리케이션 개발에 적합한 메소드를 지원하고 있음을 확인할 수 있습니다.
@gnh1201@hackers.pub
세상에는 참 불경(?)한 것들이 많습니다.
개발에 쓰이는 도구가 불경하다며 어떠한 도구도 깔지말고 메모장(Notepad)만으로 코딩을 하라더니, 이제는 데이터베이스가 불경하다며 PC에 이미 설치된 기본 기능만으로 데이터베이스 처럼 사용할 수 있는 방법을 강구하라고 합니다.
아... 먹고 살기 쉽지 않습니다.
하지만 메모장 "Only" 코딩도 성공시킨 제가 데이터베이스라고 성공시키지 못하겠습니까? 해봅시다.
외부 개발 도구가 매우 제한적으로 공급되는 환경(사실상 쓸 수 있는 개발 도구가 "메모장"밖에 없는 환경)에서도 고급 기능을 구현할 수 있는 방안에 대한 요구는, 윈도우즈 운영체제의 내부 ECMAScript를 활용하는 WelsonJS 프레임워크의 공개를 통해 해결할 수 있었습니다.
WelsonJS 프레임워크는 2025년 6월 26일 기준, 깃허브(GitHub)에서 350개의 긍정적인 평가(Stars)를 받는 성과도 이루었습니다.
이후로, 지금까지의 경험을 데이터베이스 영역으로 확대해보자는 의견이 나오기 시작하였습니다. 상용 데이터베이스의 존재는 그 자체만으로도 매우 거대하기 때문에 외부 개발 도구의 공급이 제한되는 환경에서는 데이터베이스도 업무에 걸림돌이 되기 때문입니다.
결국 운영체제에서 기본적으로 지원되는 데이터베이스로 사용 가능한 시스템이 있는지 사전 조사를 시작합니다.
결국 윈도우즈 운영체제에는 Windows 2000부터 현재 버전(Windows 11)에도 탑재된 오던 ESENT (ESE) 데이터베이스라는 것이 존재한다는걸 확인하게 됩니다.
제 그동안의 경험에 의한 관심법과, LLM(거대 언어 모델)과의 협공이라면 빠른 시간 내에 구현이 가능할거라 생각하지만 상대적으로 정보가 부족하여 생각보다는 오래 걸렸습니다.
ESENT 데이터베이스를 사용하기 위한 API 구현은 존재하지만, Column(칼럼), Schema(스키마, 혹은 테이블), CRUD(생성, 읽기, 수정, 삭제) 등 실제 어플리케이션을 구현하는 용도로 사용하기에 적합하도록 데이터베이스의 개념을 추상화해둔 구현은 존재하지 않았습니다.
그런고로, 직접 작성을 해보았습니다! 먼저 칼럼과 스키마라는 개념을 구현해봅시다.
// Column.cs (WelsonJS.Esent)
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: 2025 Namhyeon Go <gnh1201@catswords.re.kr>, Catswords OSS and WelsonJS Contributors
// https://github.com/gnh1201/welsonjs
//
using System;
using System.Text;
using Microsoft.Isam.Esent.Interop;
namespace WelsonJS.Esent
{
public class Column
{
public string Name { get; set; }
public JET_coltyp Type { get; set; }
public int MaxSize { get; set; }
public JET_CP CodePage { get; set; }
public bool IsPrimaryKey { get; set; } = false;
public override string ToString()
{
return Name;
}
public static explicit operator string(Column c)
{
return c.ToString();
}
public Column(string name, JET_coltyp type, int maxSize = 0, JET_CP codePage = JET_CP.None)
{
Name = name;
Type = type;
MaxSize = maxSize;
CodePage = codePage == JET_CP.None ?
JET_CP.Unicode : codePage;
}
public Column(string name, Type dotNetType, int maxSize = 0, Encoding encoding = null)
{
Name = name;
Type = GetJetColtypFromType(dotNetType);
MaxSize = maxSize;
CodePage = GetJetCpFromEncoding(encoding ?? Encoding.Unicode);
}
private static JET_coltyp GetJetColtypFromType(Type type)
{
if (type == typeof(string)) return JET_coltyp.Text;
if (type == typeof(int)) return JET_coltyp.Long;
if (type == typeof(long)) return JET_coltyp.Currency;
if (type == typeof(bool)) return JET_coltyp.Bit;
if (type == typeof(float)) return JET_coltyp.IEEESingle;
if (type == typeof(double)) return JET_coltyp.IEEEDouble;
if (type == typeof(DateTime)) return JET_coltyp.DateTime;
if (type == typeof(byte[])) return JET_coltyp.LongBinary;
throw new NotSupportedException($"Unsupported .NET type: {type.FullName}");
}
private static JET_CP GetJetCpFromEncoding(Encoding encoding)
{
if (encoding == Encoding.Unicode) return JET_CP.Unicode;
if (encoding == Encoding.ASCII) return JET_CP.ASCII;
if (encoding.CodePage == 1252) return (JET_CP)1252; // Windows-1252 / Latin1
if (encoding.CodePage == 51949) return (JET_CP)51949; // EUC-KR
if (encoding.CodePage == 949) return (JET_CP)949; // UHC (Windows Korean)
if (encoding.CodePage == 932) return (JET_CP)932; // Shift-JIS (Japanese)
if (encoding.CodePage == 936) return (JET_CP)936; // GB2312 (Simplified Chinese)
if (encoding.CodePage == 65001) return (JET_CP)65001; // UTF-8
if (encoding.CodePage == 28591) return (JET_CP)28591; // ISO-8859-1
throw new NotSupportedException($"Unsupported encoding: {encoding.WebName} (code page {encoding.CodePage})");
}
}
}
// Schema.cs (WelsonJS.Esent)
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: 2025 Namhyeon Go <gnh1201@catswords.re.kr>, Catswords OSS and WelsonJS Contributors
// https://github.com/gnh1201/welsonjs
//
using System;
using System.Collections.Generic;
namespace WelsonJS.Esent
{
public class Schema
{
public string TableName { get; set; }
public List<Column> Columns { get; set; }
public Column PrimaryKey
{
get
{
return Columns.Find(c => c.IsPrimaryKey) ?? null;
}
}
public Schema(string tableName, List<Column> columns)
{
TableName = tableName;
Columns = columns ?? new List<Column>();
}
public void SetPrimaryKey(string columnName)
{
Column column = Columns.Find(c => c.Name.Equals(columnName, StringComparison.OrdinalIgnoreCase));
if (column != null)
{
column.IsPrimaryKey = true;
}
else
{
throw new ArgumentException($"Column '{columnName}' does not exist in schema '{TableName}'.");
}
}
}
}
그리고, 대망의 CRUD를 구현해줍니다. (예시의 내용 중 Logger 인터페이스의 활용과 관련된 내용은 생략하였습니다.)
// DataStore.cs (WelsonJS.Esent)
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: 2025 Namhyeon Go <gnh1201@catswords.re.kr>, Catswords OSS and WelsonJS Contributors
// https://github.com/gnh1201/welsonjs
//
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using Microsoft.Isam.Esent.Interop;
namespace WelsonJS.Esent
{
public class EsentDatabase : IDisposable
{
private const string _primaryKeyindexName = "primary";
private const string _indexNamePrefix = "idx_";
private const string _databaseName = "metadata.edb";
private readonly ICompatibleLogger _logger;
private static readonly object _lock = new object();
private static bool _initialized = false;
private static Instance _instance;
private static string _workingDirectory;
private static string _filePath;
private readonly Session _session;
private readonly JET_DBID _dbid;
private readonly Schema _schema;
private readonly Column _primaryKey;
private readonly Dictionary<string, JET_COLUMNID> _columnIds;
public EsentDatabase(Schema schema, string workingDirectory, ICompatibleLogger logger = null)
{
_logger = logger ?? new TraceLogger();
if (schema == null)
throw new ArgumentNullException(nameof(schema));
_primaryKey = schema.PrimaryKey;
if (_primaryKey == null)
throw new ArgumentNullException();
if (!schema.Columns.Exists(c => c == _primaryKey))
throw new ArgumentException($"Primary key '{_primaryKey.Name}' is not in schema.");
_workingDirectory = workingDirectory;
_schema = schema;
_columnIds = new Dictionary<string, JET_COLUMNID>(StringComparer.OrdinalIgnoreCase);
InitializeInstance();
_session = new Session(_instance);
if (!File.Exists(_filePath))
{
Api.JetCreateDatabase(_session, _filePath, null, out _dbid, CreateDatabaseGrbit.None);
CreateTable(_schema);
}
else
{
Api.JetAttachDatabase(_session, _filePath, AttachDatabaseGrbit.None);
Api.JetOpenDatabase(_session, _filePath, null, out _dbid, OpenDatabaseGrbit.None);
}
CacheColumns();
}
private static void InitializeInstance()
{
if (_initialized) return;
lock (_lock)
{
if (_initialized) return;
// set the file path
_filePath = Path.Combine(_workingDirectory, _databaseName);
// config the instance
_instance = new Instance(typeof(EsentDatabase).Namespace);
_instance.Parameters.SystemDirectory = _workingDirectory;
_instance.Parameters.LogFileDirectory = _workingDirectory;
_instance.Parameters.TempDirectory = _workingDirectory;
// initialize the instance
_instance.Init();
_initialized = true;
}
}
private void CreateTable(Schema schema)
{
Api.JetBeginTransaction(_session);
JET_TABLEID tableid;
Api.JetCreateTable(_session, _dbid, schema.TableName, 0, 100, out tableid);
foreach (var col in schema.Columns)
{
var coldef = new JET_COLUMNDEF
{
coltyp = col.Type,
cbMax = col.MaxSize,
cp = col.CodePage
};
Api.JetAddColumn(_session, tableid, col.Name, coldef, null, 0, out _);
}
CreateIndex(tableid, new[] { _primaryKey }, CreateIndexGrbit.IndexPrimary | CreateIndexGrbit.IndexUnique);
Api.JetCloseTable(_session, tableid);
Api.JetCommitTransaction(_session, CommitTransactionGrbit.None);
}
public void CreateIndex(JET_TABLEID tableid, IEnumerable<Column> columns, CreateIndexGrbit grbit)
{
if (columns == null)
throw new ArgumentNullException(nameof(columns));
var columnList = columns.ToList();
if (columnList.Count == 0)
throw new ArgumentException("At least one column is required to create an index.", nameof(columns));
if (tableid == JET_TABLEID.Nil)
throw new ArgumentException("Invalid table ID.", nameof(tableid));
bool isPrimaryKeyIndex = (columnList.Count == 1 && columnList[0].IsPrimaryKey);
if (isPrimaryKeyIndex && (grbit & CreateIndexGrbit.IndexPrimary) == 0)
throw new ArgumentException("Primary key index must have the CreateIndexGrbit.IndexPrimary flag set.", nameof(grbit));
string indexName = isPrimaryKeyIndex
? _primaryKeyindexName
: _indexNamePrefix + string.Join("_", columnList.Select(c => c.Name));
string key = string.Concat(columnList.Select(c => "+" + c.Name));
string keyDescription = key + "\0\0"; // double null-terminated
int keyDescriptionLength = keyDescription.Length;
Api.JetCreateIndex(
_session,
tableid,
indexName,
grbit,
keyDescription,
keyDescriptionLength,
100
);
}
private void CacheColumns()
{
using (var table = new Table(_session, _dbid, _schema.TableName, OpenTableGrbit.ReadOnly))
{
foreach (var col in _schema.Columns)
{
try
{
JET_COLUMNID colid = Api.GetTableColumnid(_session, table, col.Name);
_columnIds[col.Name] = colid;
}
catch (EsentColumnNotFoundException)
{
_logger.Warn($"Column '{col.Name}' not found.");
}
}
}
}
public bool Insert(Dictionary<string, object> values, out object key)
{
return TrySaveRecord(values, JET_prep.Insert, expectSeek: false, out key);
}
public bool Update(Dictionary<string, object> values)
{
return TrySaveRecord(values, JET_prep.Replace, expectSeek: true, out _);
}
private bool TrySaveRecord(
Dictionary<string, object> values,
JET_prep prepType,
bool expectSeek,
out object primaryKeyValue)
{
primaryKeyValue = null;
if (!TryGetPrimaryKeyValue(values, out var keyValue))
return false;
var keyType = _primaryKey.Type;
using (var table = new Table(_session, _dbid, _schema.TableName, OpenTableGrbit.Updatable))
{
try
{
Api.JetBeginTransaction(_session);
Api.JetSetCurrentIndex(_session, table, _primaryKeyindexName);
MakeKeyByType(keyValue, keyType, _session, table);
bool found = Api.TrySeek(_session, table, SeekGrbit.SeekEQ);
if (expectSeek != found)
{
_logger.Warn($"[ESENT] Operation skipped. Seek result = {found}, expected = {expectSeek}");
Api.JetRollback(_session, RollbackTransactionGrbit.None);
return false;
}
Api.JetPrepareUpdate(_session, table, prepType);
SetAllColumns(values, table);
Api.JetUpdate(_session, table);
Api.JetCommitTransaction(_session, CommitTransactionGrbit.None);
if (prepType == JET_prep.Insert)
primaryKeyValue = keyValue;
return true;
}
catch (Exception ex)
{
Api.JetRollback(_session, RollbackTransactionGrbit.None);
throw new InvalidOperationException($"[ESENT] Operation failed: {ex.Message}");
}
}
}
public Dictionary<string, object> FindById(object keyValue)
{
var result = new Dictionary<string, object>();
var keyType = _primaryKey.Type;
using (var table = new Table(_session, _dbid, _schema.TableName, OpenTableGrbit.ReadOnly))
{
Api.JetSetCurrentIndex(_session, table, _primaryKeyindexName);
MakeKeyByType(keyValue, keyType, _session, table);
if (!Api.TrySeek(_session, table, SeekGrbit.SeekEQ))
return null;
foreach (var col in _schema.Columns)
{
if (!_columnIds.TryGetValue(col.Name, out var colid))
continue;
var value = RetrieveColumnByType(_session, table, colid, col.Type);
result[col.Name] = value;
}
}
return result;
}
public List<Dictionary<string, object>> FindAll()
{
var results = new List<Dictionary<string, object>>();
using (var table = new Table(_session, _dbid, _schema.TableName, OpenTableGrbit.ReadOnly))
{
Api.JetSetCurrentIndex(_session, table, _primaryKeyindexName);
if (!Api.TryMoveFirst(_session, table))
return results;
do
{
var row = new Dictionary<string, object>();
foreach (var col in _schema.Columns)
{
if (!_columnIds.TryGetValue(col.Name, out var colid))
continue;
var value = RetrieveColumnByType(_session, table, colid, col.Type);
row[col.Name] = value;
}
results.Add(row);
}
while (Api.TryMoveNext(_session, table));
}
return results;
}
public bool DeleteById(object keyValue)
{
var keyType = _primaryKey.Type;
using (var table = new Table(_session, _dbid, _schema.TableName, OpenTableGrbit.Updatable))
{
Api.JetSetCurrentIndex(_session, table, _primaryKeyindexName);
MakeKeyByType(keyValue, keyType, _session, table);
if (!Api.TrySeek(_session, table, SeekGrbit.SeekEQ))
return false;
Api.JetDelete(_session, table);
return true;
}
}
private object RetrieveColumnByType(Session session, Table table, JET_COLUMNID columnId, JET_coltyp type)
{
switch (type)
{
case JET_coltyp.Text:
return Api.RetrieveColumnAsString(session, table, columnId, Encoding.Unicode);
case JET_coltyp.Long:
return Api.RetrieveColumnAsInt32(session, table, columnId);
case JET_coltyp.IEEEDouble:
return Api.RetrieveColumnAsDouble(session, table, columnId);
case JET_coltyp.DateTime:
return Api.RetrieveColumnAsDateTime(session, table, columnId);
case JET_coltyp.Binary:
case JET_coltyp.LongBinary:
return Api.RetrieveColumn(session, table, columnId);
default:
_logger.Warn($"[ESENT] Unsupported RetrieveColumn type: {type}");
return null;
}
}
private bool TryGetPrimaryKeyValue(Dictionary<string, object> values, out object keyValue)
{
keyValue = null;
if (!values.TryGetValue(_primaryKey.Name, out keyValue))
{
_logger.Warn($"[ESENT] Missing primary key '{_primaryKey.Name}'.");
return false;
}
if (keyValue == null)
{
_logger.Warn("[ESENT] Primary key value cannot be null.");
return false;
}
return true;
}
private JET_coltyp GetColumnType(string columnName)
{
var column = _schema.Columns.FirstOrDefault(c => c.Name == columnName);
if (column == null)
throw new ArgumentException($"Column '{columnName}' not found in schema.");
return column.Type;
}
private void SetAllColumns(Dictionary<string, object> values, Table table)
{
foreach (var kv in values)
{
if (!_columnIds.TryGetValue(kv.Key, out var colid))
{
_logger.Warn($"[ESENT] Column '{kv.Key}' not found in cache.");
continue;
}
var colType = GetColumnType(kv.Key);
SetColumnByType(_session, table, colid, kv.Value, colType);
}
}
private void SetColumnByType(Session session, Table table, JET_COLUMNID columnId, object value, JET_coltyp type)
{
if (value == null)
return;
switch (type)
{
case JET_coltyp.Text:
Api.SetColumn(session, table, columnId, value.ToString(), Encoding.Unicode);
break;
case JET_coltyp.Long:
Api.SetColumn(session, table, columnId, Convert.ToInt32(value));
break;
case JET_coltyp.IEEEDouble:
Api.SetColumn(session, table, columnId, Convert.ToDouble(value));
break;
case JET_coltyp.DateTime:
Api.SetColumn(session, table, columnId, Convert.ToDateTime(value));
break;
case JET_coltyp.Binary:
case JET_coltyp.LongBinary:
Api.SetColumn(session, table, columnId, (byte[])value);
break;
default:
_logger.Warn($"[ESENT] Unsupported SetColumn type: {type}");
break;
}
}
private void MakeKeyByType(object value, JET_coltyp type, Session session, Table table)
{
switch (type)
{
case JET_coltyp.Text:
Api.MakeKey(session, table, value.ToString(), Encoding.Unicode, MakeKeyGrbit.NewKey);
break;
case JET_coltyp.Long:
Api.MakeKey(session, table, Convert.ToInt32(value), MakeKeyGrbit.NewKey);
break;
case JET_coltyp.IEEEDouble:
Api.MakeKey(session, table, Convert.ToDouble(value), MakeKeyGrbit.NewKey);
break;
case JET_coltyp.DateTime:
Api.MakeKey(session, table, Convert.ToDateTime(value), MakeKeyGrbit.NewKey);
break;
case JET_coltyp.Binary:
case JET_coltyp.LongBinary:
Api.MakeKey(session, table, (byte[])value, MakeKeyGrbit.NewKey);
break;
default:
_logger.Warn($"[ESENT] Unsupported MakeKey type: {type}");
break;
}
}
public void Dispose()
{
_session?.Dispose();
}
}
}
이렇게하면 ESENT (ESE) 데이터베이스에서 어플리케이션 개발 용도에 적합한 칼럼, 스키마 및 CRUD를 위한 메소드를 구현할 수 있습니다.
이렇게 만들어진 구현은 다음과 같이 사용할 수 있습니다.
using WelsonJS.Esent;
// connect the database to manage instances
Schema schema = new Schema("Instances", new List<Column>
{
new Column("InstanceId", typeof(string), 255),
new Column("FirstDeployTime", typeof(DateTime), 1)
});
schema.SetPrimaryKey("InstanceId");
_db = new EsentDatabase(schema, Path.GetTempPath());
// Insert row
try
{
_db.Insert(new Dictionary<string, object>
{
["InstanceId"] = instanceId,
["FirstDeployTime"] = now
}, out _);
}
catch (Exception ex)
{
// Handle exception
}
// find all
var instances = _db.FindAll();
foreach (var instance in instances)
{
try
{
string instanceId = instance["InstanceId"].ToString();
string firstDeployTime = instance.ContainsKey("FirstDeployTime")
? ((DateTime)instance["FirstDeployTime"]).ToString("yyyy-MM-dd HH:mm:ss")
: "Unknown";
Console.WriteLine($"{firstDeployTime}, {instanceId}");
}
catch (Exception ex)
{
// Handle exception
}
}
우리에게 다소 익숙한 어플리케이션 개발에 적합한 메소드를 지원하고 있음을 확인할 수 있습니다.
@paulfoerster@swiss.social
@paulfoerster@swiss.social
@meziantou@hachyderm.io
How to Exclude Your Windows App from Screen Capture and Recall #dotnet #windows https://www.meziantou.net/how-to-exclude-your-windows-app-from-screen-capture-and-recall.htm?utm_medium=social&utm_source=mastodon
@320x200@post.lurk.org
End of 10
If you know someone, friend, family, colleague, etc, stuck on windows 10, and you are nearby Amsterdam, De Versterking can help you switch to Linux at their anarchist repair café!
Tuesday, 24 June, 2025 - 18:00
"Support for Windows 10 is ending in October, and many older computers cannot upgrade to Windows 11. Installing Linux on your old computer can prolong its lifespan and help reduce e-waste. Bring your computer and we'll help you with the installation process."
https://radar.squat.net/en/event/anarchist-repair-cafe/2025-06-24/end-10
#endof10 #windows #linux #squat #amsterdam #permacomputing #mkz
@320x200@post.lurk.org
End of 10
If you know someone, friend, family, colleague, etc, stuck on windows 10, and you are nearby Amsterdam, De Versterking can help you switch to Linux at their anarchist repair café!
Tuesday, 24 June, 2025 - 18:00
"Support for Windows 10 is ending in October, and many older computers cannot upgrade to Windows 11. Installing Linux on your old computer can prolong its lifespan and help reduce e-waste. Bring your computer and we'll help you with the installation process."
https://radar.squat.net/en/event/anarchist-repair-cafe/2025-06-24/end-10
#endof10 #windows #linux #squat #amsterdam #permacomputing #mkz
@hexamanganite@mastodon.social
Courtyard
📍 Zürich | Switzerland
📷 Fujifilm X-T5
📆 2025
Tags:
#monochrome #blackandwhite #blackandwhitephotography #urban #urbanphotography #urbanexploration #minimalism #architecture #windows #sky #switzerland #zurich #fujifilm #fujixseries #xt5 #photography #photo #lightroom #manganite
@hexamanganite@mastodon.social
Courtyard
📍 Zürich | Switzerland
📷 Fujifilm X-T5
📆 2025
Tags:
#monochrome #blackandwhite #blackandwhitephotography #urban #urbanphotography #urbanexploration #minimalism #architecture #windows #sky #switzerland #zurich #fujifilm #fujixseries #xt5 #photography #photo #lightroom #manganite
@bluejay@ohai.social
Windowstravaganza!
I’ve been looking at this for so long that I can’t tell if it’s too much, but I like the dagger-shaped space in the middle. More info in the alt text.
#photography #urbanphotography #architecture #architecturephotography #buildings #windows #WindowFriday #FensterFreitag #reflections #nyc
@jon@vivaldi.net
This is our take on Crypto. It has not changed. There is a reason why we have not included Crypto in Vivaldi.
We are very proud of the features we have added, but we also proud of the "features" we have not added.
#Vivaldi #Browser #Crypto #Scam #Politics #Technology #Windows #Macos #Linux #Android #ios
https://vivaldi.com/blog/why-vivaldi-will-never-create-thinkcoin/
@jon@vivaldi.net
This is our take on Crypto. It has not changed. There is a reason why we have not included Crypto in Vivaldi.
We are very proud of the features we have added, but we also proud of the "features" we have not added.
#Vivaldi #Browser #Crypto #Scam #Politics #Technology #Windows #Macos #Linux #Android #ios
https://vivaldi.com/blog/why-vivaldi-will-never-create-thinkcoin/
@jon@vivaldi.net
This is our take on Crypto. It has not changed. There is a reason why we have not included Crypto in Vivaldi.
We are very proud of the features we have added, but we also proud of the "features" we have not added.
#Vivaldi #Browser #Crypto #Scam #Politics #Technology #Windows #Macos #Linux #Android #ios
https://vivaldi.com/blog/why-vivaldi-will-never-create-thinkcoin/
@bluejay@ohai.social
Windowstravaganza!
I’ve been looking at this for so long that I can’t tell if it’s too much, but I like the dagger-shaped space in the middle. More info in the alt text.
#photography #urbanphotography #architecture #architecturephotography #buildings #windows #WindowFriday #FensterFreitag #reflections #nyc
@ilumium@eupolicy.social · Reply to Jan Penfrat's post
#Linkedin clarifies they do not use Europeans' data for training #LLM/#AI models.
I assume that statement does not apply to other #Microsoft products like #Windows and of course #Copilot.
@ilumium@eupolicy.social
Good morning Fediverse's EU tech policy nerds!
Up today: the @EUCommission's #DMA workshop with #gatekeeper #Microsoft.
(Sorry #NGIForum25 two floors below, no time for you today 😌)
We haven't started yet and the room is still empty, but I'm hoping we'll discuss how #Windows is abused to dominate other markets, by aggressively nudging users to #Edge, #Xbox, #OneDrive, #ChatGPT, etc.
@m3t00@app.wafrn.net
@m3t00@app.wafrn.net
@jon@vivaldi.net
So far this year we have seen nice growth in many European countries. We have doubled our userbase in Norway and Denmark, to name two.
More and more are looking for alternatives to Big Tech and we are happy to provide that alternative when it comes to browsers. We also provide a mail client, calendar and RSS reader on Windows, Mac and Linux.
If you have already switched to @Vivaldi, please invite your friends.
#Norway #Denmark #Greenland #Vivaldi #Browser #Windows #Macos #Linux #Android #iOS #Apple #Google #Microsoft #EU #Europa
@jon@vivaldi.net
@jon@vivaldi.net
@jon@vivaldi.net
@nSonic@troet.cafe · Reply to nSonic's post
- Überprüfen Progressbar läuft erneut und hängt… für Minuten… fängt dann noch mal an und hängt erneut … Minuten …
- schließlich fängt der Updater dann doch an und kopiert wohl Dateien … dauert … dauert …
- "Überprüfen von …" … kein Balken, es dauert … und dauert …
- "Jo sind dann fertig, Windows müsste dann mal neu booten!“ - JA WTF? UND WARUM SOLL ICH VORHER(!) ANWENDUNGEN SCHLIESSEN WENN DU EH NEU BOOTEN WILLST?
#windows… (2/3)
@nSonic@troet.cafe
„hey, aktualisiert mal eure swyxit anwendung“ (Windows)
- starte swyx. nix passiert
- beende swyx und starte es neu -> Update Meldung
- Klicke auf Update -> Browser -> Download. Und nu?
- Klicke auf Download „ausführen“ -> Updater startet -> Ja ich will -> weiter -> weiter
- Progressbar hängt… Minuten … schließlich: „hier laufen Apps die mich stören mach die mal zu“ - u.a. swyx selbst!. Ich schließe -> wiederholen
#windows… (1/3)
@benzogaga33@mamot.fr
Windows en Europe : Edge et Bing ne seront plus imposés, le Store peut être supprimé ! https://www.it-connect.fr/windows-en-europe-changements-edge-bing-microsoft-store/ #Logiciel-OS #Microsoft #Windows
@benzogaga33@mamot.fr
Windows en Europe : Edge et Bing ne seront plus imposés, le Store peut être supprimé ! https://www.it-connect.fr/windows-en-europe-changements-edge-bing-microsoft-store/ #Logiciel-OS #Microsoft #Windows
@jon@vivaldi.net
Brilliant review of Vivaldi in Heise Online. It is in German, but you will see subtitles in English, if you prefer.
For those of you asking why to use Vivaldi, you may well find your answer here.
https://www.youtube.com/watch?v=zdkr23jcF38&t=113s
#Vivaldi @Vivaldi #Browser #Windows #Macos #Linux #Computers #Technology #EU #Europa #Germany
@jon@vivaldi.net
If you think it is time to move away from your Outlook mail account, this is the best way to do so, IMHO:
1. Set up a mail client. By using a mail client, you can work with multiple mail accounts and gradually move your communication from one account to another, while retaining your mail history locally. Personally I use Vivaldi this way, but there are other mail clients as well.
2. Select a new mail service. Good choices include Proton Mail and Fastmail.
3. Enjoy!
@jon@vivaldi.net
Regulation works. You can thank the @EUCommission for some important Windows changes, where Edge will nag you less.
I wish these were worldwide.
Still needs to be easier for users to set their preferred default browser. It used to be that the browser could ask you and if you allowed it, it would be set as default. It seems like you still have to go into the settings to change this.
https://www.theverge.com/news/678350/microsoft-dma-windows-10-11-bing-edge
@jon@vivaldi.net
Regulation works. You can thank the @EUCommission for some important Windows changes, where Edge will nag you less.
I wish these were worldwide.
Still needs to be easier for users to set their preferred default browser. It used to be that the browser could ask you and if you allowed it, it would be set as default. It seems like you still have to go into the settings to change this.
https://www.theverge.com/news/678350/microsoft-dma-windows-10-11-bing-edge
@jon@vivaldi.net
Regulation works. You can thank the @EUCommission for some important Windows changes, where Edge will nag you less.
I wish these were worldwide.
Still needs to be easier for users to set their preferred default browser. It used to be that the browser could ask you and if you allowed it, it would be set as default. It seems like you still have to go into the settings to change this.
https://www.theverge.com/news/678350/microsoft-dma-windows-10-11-bing-edge
@gborn@social.tchncs.de
@gborn@social.tchncs.de
@TeddyTheBest@framapiaf.org
#AnduinOS : une #distribution #Linux aux airs de #Windows 11 créée par un ingénieur de #Microsoft. Envie de tester Linux sans pour autant perdre vos repères sur Windows ? Alors regardez du côté d'AnduinOS.
https://www.clubic.com/actualite-566670-anduinos-une-distribution-linux-aux-airs-de-windows-11-creee-par-un-ingenieur-de-microsoft.html
@hexamanganite@mastodon.social
Courtyard
📍 Zürich | Switzerland
📷 Fujifilm X-T5
📆 2025
Tags:
#monochrome #blackandwhite #blackandwhitephotography #urban #urbanphotography #urbanexploration #architecture #windows #switzerland #zurich #escherwyss #züriwest #fujifilm #fujixseries #xt5 #photography #photo #lightroom #manganite
@hexamanganite@mastodon.social
Courtyard
📍 Zürich | Switzerland
📷 Fujifilm X-T5
📆 2025
Tags:
#monochrome #blackandwhite #blackandwhitephotography #urban #urbanphotography #urbanexploration #architecture #windows #switzerland #zurich #escherwyss #züriwest #fujifilm #fujixseries #xt5 #photography #photo #lightroom #manganite
@eu_os@eupolicy.social · Reply to EU OS's post
Instead the public sector should invest into digital common infrastructure that match the values of democratic societies. https://publiccode.eu/en/
#endof10 #DigitalSovereignty #eurostack #enshittification #DigitalDecade #EDIC #publicmoney #EU_OS #Microsoft #Windows
@eu_os@eupolicy.social
3 days until #EU_OS at Paris #HackDays: How many hours do you use your #Windows office computer per day? For 6h in front of the computer, this makes 6h·20d·11=1320h per year: Time that users spent in an ecosystem entirely controlled by few powerful, rich people in other countries.
And more and more, #Windows wants to increase this control and extract value for its shareholders. Change of license models to extract annual rents, forced upgrades to #Windows11, etc. 1/2
@hexamanganite@mastodon.social
Looking up...
📍 Zürich | Switzerland
📷 Fujifilm X-100VI
📆 2025
Tags:
#monochrome #blackandwhite #blackandwhitephotography #minimalism #architecture #contrast #windows #ethzurich #ethz #switzerland #zurich #höngg #fujifilm #fujixseries #x100vi #photography #photo #lightroom #manganite
@eu_os@eupolicy.social
3 days until #EU_OS at Paris #HackDays: How many hours do you use your #Windows office computer per day? For 6h in front of the computer, this makes 6h·20d·11=1320h per year: Time that users spent in an ecosystem entirely controlled by few powerful, rich people in other countries.
And more and more, #Windows wants to increase this control and extract value for its shareholders. Change of license models to extract annual rents, forced upgrades to #Windows11, etc. 1/2
@eu_os@eupolicy.social · Reply to EU OS's post
Instead the public sector should invest into digital common infrastructure that match the values of democratic societies. https://publiccode.eu/en/
#endof10 #DigitalSovereignty #eurostack #enshittification #DigitalDecade #EDIC #publicmoney #EU_OS #Microsoft #Windows
@forest_watch_impress@rss-mstdn.studiofreesia.com
Microsoftの新しいCLIテキストエディター「Edit」に初めての更新、日本語メニューも完備/[行/列へ移動]ダイアログ追加をはじめとするうれしい新機能と改善多数
https://forest.watch.impress.co.jp/docs/news/2018261.html
#forest_watch_impress #Edit #オフィス_ドキュメント #テキストエディター #Windows #プログラミング #Linux
@forest_watch_impress@rss-mstdn.studiofreesia.com
Microsoftの新しいCLIテキストエディター「Edit」に初めての更新、日本語メニューも完備/[行/列へ移動]ダイアログ追加をはじめとするうれしい新機能と改善多数
https://forest.watch.impress.co.jp/docs/news/2018261.html
#forest_watch_impress #Edit #オフィス_ドキュメント #テキストエディター #Windows #プログラミング #Linux
@hexamanganite@mastodon.social
Looking up...
📍 Zürich | Switzerland
📷 Fujifilm X-100VI
📆 2025
Tags:
#monochrome #blackandwhite #blackandwhitephotography #minimalism #architecture #contrast #windows #ethzurich #ethz #switzerland #zurich #höngg #fujifilm #fujixseries #x100vi #photography #photo #lightroom #manganite
@forest_watch_impress@rss-mstdn.studiofreesia.com
無料メールソフト「Thunderbird」v139.0が公開 ~通知からメールの既読・削除が可能に/カードビューの行数指定やフォルダーペインでフォルダーを手動で並べ替えも
https://forest.watch.impress.co.jp/docs/news/2017873.html
#forest_watch_impress #Thunderbird #インターネット #メール #Windows #Mac #Linux
@forest_watch_impress@rss-mstdn.studiofreesia.com
無料メールソフト「Thunderbird」v139.0が公開 ~通知からメールの既読・削除が可能に/カードビューの行数指定やフォルダーペインでフォルダーを手動で並べ替えも
https://forest.watch.impress.co.jp/docs/news/2017873.html
#forest_watch_impress #Thunderbird #インターネット #メール #Windows #Mac #Linux
@wezm@mastodon.decentralised.social
Why does Microsoft name fonts using antiquated 8.3 format? Even for comparatively new fonts like Segoe UI Emoji (`seguiemj.ttf`), which was introduced in 2013, but rebuilt as COLRv1 since then.
@wezm@mastodon.decentralised.social
Why does Microsoft name fonts using antiquated 8.3 format? Even for comparatively new fonts like Segoe UI Emoji (`seguiemj.ttf`), which was introduced in 2013, but rebuilt as COLRv1 since then.
@eu_os@eupolicy.social
6 days until #EU_OS at Paris #HackDays: EU OS is a so-called atomic operating system that offers interruption free software updates thanks to #bootc (bootable container) technology. While people work, bootc downloads and installs unnoticeable to the user the update. After the next computer restart (trigged by the user), EU OS switches to the new version. If something breaks, the user can roll back. 1/2
#Linux #DigitalSovereignty #Microsoft #Windows #Trump #Khan #Tariffs #sysadmin #endof10
@gabrielesvelto@fosstodon.org · Reply to Gabriele Svelto's post
@gabrielesvelto@fosstodon.org · Reply to Gabriele Svelto's post
@kkarhan@infosec.space · Reply to FediFollows's post
@TeddyTheBest@framapiaf.org
#AnduinOS : une #distribution #Linux aux airs de #Windows 11 créée par un ingénieur de #Microsoft. Envie de tester Linux sans pour autant perdre vos repères sur Windows ? Alors regardez du côté d'AnduinOS.
https://www.clubic.com/actualite-566670-anduinos-une-distribution-linux-aux-airs-de-windows-11-creee-par-un-ingenieur-de-microsoft.html
@jon@vivaldi.net
If you think it is time to move away from your Outlook mail account, this is the best way to do so, IMHO:
1. Set up a mail client. By using a mail client, you can work with multiple mail accounts and gradually move your communication from one account to another, while retaining your mail history locally. Personally I use Vivaldi this way, but there are other mail clients as well.
2. Select a new mail service. Good choices include Proton Mail and Fastmail.
3. Enjoy!
@jon@vivaldi.net
If you think it is time to move away from your Outlook mail account, this is the best way to do so, IMHO:
1. Set up a mail client. By using a mail client, you can work with multiple mail accounts and gradually move your communication from one account to another, while retaining your mail history locally. Personally I use Vivaldi this way, but there are other mail clients as well.
2. Select a new mail service. Good choices include Proton Mail and Fastmail.
3. Enjoy!
@jon@vivaldi.net
Brilliant review of Vivaldi in Heise Online. It is in German, but you will see subtitles in English, if you prefer.
For those of you asking why to use Vivaldi, you may well find your answer here.
https://www.youtube.com/watch?v=zdkr23jcF38&t=113s
#Vivaldi @Vivaldi #Browser #Windows #Macos #Linux #Computers #Technology #EU #Europa #Germany
@forest_watch_impress@rss-mstdn.studiofreesia.com
「Go」言語へ移植したネイティブ「TypeScript」コンパイラー&ツールがプレビュー開始/「Visual Studio Code」用の拡張機能もテスト提供
https://forest.watch.impress.co.jp/docs/news/2016543.html
#forest_watch_impress #Go #TypeScript #プログラミング #Windows #Mac #Linux
@forest_watch_impress@rss-mstdn.studiofreesia.com
「Go」言語へ移植したネイティブ「TypeScript」コンパイラー&ツールがプレビュー開始/「Visual Studio Code」用の拡張機能もテスト提供
https://forest.watch.impress.co.jp/docs/news/2016543.html
#forest_watch_impress #Go #TypeScript #プログラミング #Windows #Mac #Linux
@Dallin@vivaldi.net
Unless Microsoft reverses course and makes operating systems that don't exploit the people who use them for monetary gain, Windows 10 will be the last version of Windows I run natively on any computer I own.
Join me in moving to Linux. It's time.
To anyone who has contributed to the development of Linux distros and free software: thank you. You are making a difference for good.
#windows #windows10 #windows11 #linux #freeSoftware #bigTech #microsoft
@alvinashcraft@hachyderm.io
Securing the Model Context Protocol: Building a safer agentic future on Windows | by David Weston.
#windows #mcp #ai #security #aiagents #agenticwindows #modelcontextprotocol #windows11
@alvinashcraft@hachyderm.io
Securing the Model Context Protocol: Building a safer agentic future on Windows | by David Weston.
#windows #mcp #ai #security #aiagents #agenticwindows #modelcontextprotocol #windows11
@timojyrinki@mastodon.social
#Windows 10:n loppu häämöttää, https://endof10.org/fi/ löytyy nyt alustavasti suomeksikin. Pari suomalaista porukkaa tarjoaa jo #Linux-asennuspalvelua (#Kuopio, #Tampere/verkko), löytyykö palveluntarjoajia lisää, asennustapahtumia tai palvelun tarvitsijoita?
Virallinen launch toukokuun 28.
@gamingonlinux@mastodon.social
Microsoft finally solve the Linux dual-boot issue after 9 months https://www.gamingonlinux.com/2025/05/microsoft-finally-solve-the-linux-dual-boot-issue-after-9-months/
@gamingonlinux@mastodon.social
Microsoft finally solve the Linux dual-boot issue after 9 months https://www.gamingonlinux.com/2025/05/microsoft-finally-solve-the-linux-dual-boot-issue-after-9-months/
@hadsn@mstdn.nere9.help
#Windows 7だとこんな治安の悪い方法でローカルユーザをはやしてアタックしうるんだな
【初心者向け】windows 7 パスワードロックを安全に解除・解析する https://www.passfab.jp/windows-7/how-to-find-windows-7-password.html
【Windows 10/11】「net user」コマンドでユーザーアカウントをコマンドラインから管理する:Tech TIPS(2/2 ページ) - @IT https://atmarkit.itmedia.co.jp/ait/articles/0609/02/news014_2.html
@javalps@mastodon.social · Reply to JavAlps's post
@tokyo_0 @abhijith @fossunleashed @llutz @zenbrowser @jrredho (6/6)
After the setup I configured the settings, browsed the web. #ZenBrowser was working like it used to and the FS didn't go haywire.
Finally, it fixed it.
I think this meme (see the image) suits me. In #windows, you've the troubleshooter but on #linux, you're the troubleshooter.
@waeiski@vis.social
Maybe you or somebody you know has a #Windows10 computer, which works perfectly fine, but will lose support on October 14 because it cannot be updated to Windows 11 for hardware support reasons.
Please, do not turn the computer into unnecessary e-waste but keep using it and give it a new life by installing #Linux on it. There are plenty of advantages in doing so, the biggest one being it's waaaayyy cheaper.
For more, see:
https://endof10.org/
@waeiski@vis.social
Maybe you or somebody you know has a #Windows10 computer, which works perfectly fine, but will lose support on October 14 because it cannot be updated to Windows 11 for hardware support reasons.
Please, do not turn the computer into unnecessary e-waste but keep using it and give it a new life by installing #Linux on it. There are plenty of advantages in doing so, the biggest one being it's waaaayyy cheaper.
For more, see:
https://endof10.org/
@timojyrinki@mastodon.social
#Windows 10:n loppu häämöttää, https://endof10.org/fi/ löytyy nyt alustavasti suomeksikin. Pari suomalaista porukkaa tarjoaa jo #Linux-asennuspalvelua (#Kuopio, #Tampere/verkko), löytyykö palveluntarjoajia lisää, asennustapahtumia tai palvelun tarvitsijoita?
Virallinen launch toukokuun 28.
@majorlinux@toot.majorshouse.com
Time to go update yo shit again!
Microsoft Urges Immediate Action to Address Five Actively Exploited Windows Zero-Days
https://particle.news/share/PPocp
#Microsoft #Windows #ZeroDay #Security #InfoSec #Exploits #Tech
@majorlinux@toot.majorshouse.com
Time to go update yo shit again!
Microsoft Urges Immediate Action to Address Five Actively Exploited Windows Zero-Days
https://particle.news/share/PPocp
#Microsoft #Windows #ZeroDay #Security #InfoSec #Exploits #Tech
@jon@vivaldi.net
Who would have thought that anyone would think it is a good idea to ban regulation of AI and algorithmic content? This is a seriously bad idea.
I continue to believe that we should ban user profiling and the use of user profiles for advertising and content algorithms. Given where we are, I think that is the right thing to do and I think more and more are seeing that as the only way to solve the issues we have today.
#Vivaldi #AI #Regulation #SurveillanceCapitalism #Windows #Macos #Linux #software #Computers #Politics
https://www.theverge.com/news/666288/republican-ai-state-regulation-ban-10-years
@jon@vivaldi.net
Who would have thought that anyone would think it is a good idea to ban regulation of AI and algorithmic content? This is a seriously bad idea.
I continue to believe that we should ban user profiling and the use of user profiles for advertising and content algorithms. Given where we are, I think that is the right thing to do and I think more and more are seeing that as the only way to solve the issues we have today.
#Vivaldi #AI #Regulation #SurveillanceCapitalism #Windows #Macos #Linux #software #Computers #Politics
https://www.theverge.com/news/666288/republican-ai-state-regulation-ban-10-years
@itsfoss@mastodon.social
@itsfoss@mastodon.social
@jon@vivaldi.net
So far this year we have seen nice growth in many European countries. We have doubled our userbase in Norway and Denmark, to name two.
More and more are looking for alternatives to Big Tech and we are happy to provide that alternative when it comes to browsers. We also provide a mail client, calendar and RSS reader on Windows, Mac and Linux.
If you have already switched to @Vivaldi, please invite your friends.
#Norway #Denmark #Greenland #Vivaldi #Browser #Windows #Macos #Linux #Android #iOS #Apple #Google #Microsoft #EU #Europa
@jon@vivaldi.net
So far this year we have seen nice growth in many European countries. We have doubled our userbase in Norway and Denmark, to name two.
More and more are looking for alternatives to Big Tech and we are happy to provide that alternative when it comes to browsers. We also provide a mail client, calendar and RSS reader on Windows, Mac and Linux.
If you have already switched to @Vivaldi, please invite your friends.
#Norway #Denmark #Greenland #Vivaldi #Browser #Windows #Macos #Linux #Android #iOS #Apple #Google #Microsoft #EU #Europa
@applech2@rss-mstdn.studiofreesia.com
@applech2@rss-mstdn.studiofreesia.com
@KazukyAkayashi@social.zarchbox.fr · Reply to Kazuky Akayashi ฅ^•ﻌ•^ฅ's post
Bon trouvé ... putain Adobe de merde incapable de faire des trucs propre, même pour désinstaller leur merde proprement, a tel point qu'Adobe a carrément un soft pour
#Adobe #Windows
@KazukyAkayashi@social.zarchbox.fr
J'en ai un peu marre de ce truc la qui pop sous windows, ça dit quelque chose a quelqu'un ?
#Windows
@itsfoss@mastodon.social
This will happen again in the future as well. 😆
@Vivaldi@vivaldi.net
🚨 New Episode
Gene Burrus, ex-Microsoft antitrust lawyer and now advisor to the Browser Choice Alliance, joins Bruce to unpack how Microsoft’s old browser tactics are making a comeback-and why real browser choice on Windows still matters for everyone.
🎥 https://youtu.be/Y9FLbKYc_v8
#Podcast #Microsoft #BrowserChoiceAlliance #BrowserWars #Windows #Browsers
@dennyhenke@social.coop
I may be getting myself in deep as a newbie to Linux (installed Mint in February) but I'm working with my local library and a non-profit in my fairly poor, rural Missouri county to start a new computer UpCycle program. Will be setting up a workspace at the nonprofit and installing Linux Mint on the first donated computers next week. Spending today and next few days writing a super simple users quick-start guide. I'll be offering mini tutor sessions and small classes too.
@Vivaldi@vivaldi.net
🚨 New Episode
Gene Burrus, ex-Microsoft antitrust lawyer and now advisor to the Browser Choice Alliance, joins Bruce to unpack how Microsoft’s old browser tactics are making a comeback-and why real browser choice on Windows still matters for everyone.
🎥 https://youtu.be/Y9FLbKYc_v8
#Podcast #Microsoft #BrowserChoiceAlliance #BrowserWars #Windows #Browsers
@itsfoss@mastodon.social
This will happen again in the future as well. 😆
@holm@social.saarland
Wir suchen in #Saarlouis #Fachinformatiker:innen und Ähnliche (auch Quereinstieg) für verschiedene Stellen in einem alteingesessenen, stetig wachsenden Unternehmen der Lebensmittelindustrie.
#Hybride #windows #linux Umgebung, starker Fokus auf #onpremise Lösungen, private #cloud #opensource und #Datensouveränität. Mut und Bedarf, eingefahrene Verfahren auf zukunftsfähige Beine zu migrieren.
Interessiert?
https://de.indeed.com/cmp/Theodor-Rietmann-Gmbh/jobs?jk=28dec5e378d19d01
https://de.indeed.com/cmp/Theodor-Rietmann-Gmbh/jobs?jk=44a1408e0a988445
Fragen: PN.
@Larvitz@burningboard.net
There's moments, where I have to use a certain proprietary operating system from Redmond (be it because of customers requirements or loaner hardware etc.)
But this is now a magnitude less painful, since Fedora Linux 42 is now officially available as an official Linux distribution for the Windows Subsystem for Linux (WSL) version 2 🥳
1. Installing WSL:
wsl.exe --install
2. Installing Fedora-42:
wsl.exe --install -d FedoraLinux-42
3. Setting Fedora as the default distribution for WSL:
wsl.exe --set-default FedoraLinux-42
wslconfig.exe /setdefault FedoraLinux-42
4. Running Fedora in Windows:
wsl.exe
Also works perfectly fine in combination with VSCode/VSCodium for Ansible development on Windows.
@Larvitz@burningboard.net
There's moments, where I have to use a certain proprietary operating system from Redmond (be it because of customers requirements or loaner hardware etc.)
But this is now a magnitude less painful, since Fedora Linux 42 is now officially available as an official Linux distribution for the Windows Subsystem for Linux (WSL) version 2 🥳
1. Installing WSL:
wsl.exe --install
2. Installing Fedora-42:
wsl.exe --install -d FedoraLinux-42
3. Setting Fedora as the default distribution for WSL:
wsl.exe --set-default FedoraLinux-42
wslconfig.exe /setdefault FedoraLinux-42
4. Running Fedora in Windows:
wsl.exe
Also works perfectly fine in combination with VSCode/VSCodium for Ansible development on Windows.
@Allyoutoo@mas.to
I feel like these two should just be shipped default with #GNOME, the flow of just hitting `super+.` anywhere, starting to type the #emoji you want and hitting `Enter` to have it pasted regardless of which app you're using is just great 🚀. One of the things #windows did well and I'm so happy I can have it on #Linux too 😄
@eu_os@eupolicy.social
Be quick and become the 2nd follower of #EU_OS on #LinkedIn!
https://linkedin.com/company/eu-os/
I got told everyone on Mastodon uses already #Linux 😉 and the project to migrate from #Windows to Linux on the desktop would find a more relevant audience on LinkedIn.
Help EU OS to get what #Microsoft needs to make it go viral on LinkedIn: subscribe, comment, share widely!
@Allyoutoo@mas.to
I feel like these two should just be shipped default with #GNOME, the flow of just hitting `super+.` anywhere, starting to type the #emoji you want and hitting `Enter` to have it pasted regardless of which app you're using is just great 🚀. One of the things #windows did well and I'm so happy I can have it on #Linux too 😄
@Dallin@vivaldi.net
Unless Microsoft reverses course and makes operating systems that don't exploit the people who use them for monetary gain, Windows 10 will be the last version of Windows I run natively on any computer I own.
Join me in moving to Linux. It's time.
To anyone who has contributed to the development of Linux distros and free software: thank you. You are making a difference for good.
#windows #windows10 #windows11 #linux #freeSoftware #bigTech #microsoft
@panda@freiburg.social
Probably interesting for some #Windows users - during my break here, I also switched to #Linux on my main/every day laptop. I'm everything but a computer expert, but things work absolutely flawless.
Old laptop -> Linux Mint
New laptop -> Pop OS
For the gamers among you: #Civ6 wouldn't run on my laptop on Windows as the OS consumed too many resources, but does so on Linux.
@nemoz@pouet.chapril.org
Salut Mastodon! Mes parents sont d’accord pour essayer Linux plutôt que changer leur ordinateur Windows qui ne pourra plus être mis à jour. Je vais les aider mais je suis loin. J’aimerais leur trouver des personnes sur Annecy pour les dépanner en cas de problème. Vous connaissez des repair cafés ou ateliers Linux à Annecy? Merci pour les réponses et les repouets 😊 #annecy #windows #linux #repaircafe
@nemoz@pouet.chapril.org
Salut Mastodon! Mes parents sont d’accord pour essayer Linux plutôt que changer leur ordinateur Windows qui ne pourra plus être mis à jour. Je vais les aider mais je suis loin. J’aimerais leur trouver des personnes sur Annecy pour les dépanner en cas de problème. Vous connaissez des repair cafés ou ateliers Linux à Annecy? Merci pour les réponses et les repouets 😊 #annecy #windows #linux #repaircafe
@nemoz@pouet.chapril.org
Salut Mastodon! Mes parents sont d’accord pour essayer Linux plutôt que changer leur ordinateur Windows qui ne pourra plus être mis à jour. Je vais les aider mais je suis loin. J’aimerais leur trouver des personnes sur Annecy pour les dépanner en cas de problème. Vous connaissez des repair cafés ou ateliers Linux à Annecy? Merci pour les réponses et les repouets 😊 #annecy #windows #linux #repaircafe
@japan_cnet@rss-mstdn.studiofreesia.com
批判・延期されたWindows「リコール」、ついに「Copilot+ PC」で利用可能に
https://japan.cnet.com/article/35232383/
#japan_cnet #Windows
@japan_cnet@rss-mstdn.studiofreesia.com
批判・延期されたWindows「リコール」、ついに「Copilot+ PC」で利用可能に
https://japan.cnet.com/article/35232383/
#japan_cnet #Windows
@Vivaldi@vivaldi.net
@Vivaldi@vivaldi.net
@jon@vivaldi.net
This is the kind of thing that should be banned. It is time to realize that indiscriminate data collection and profiling is harming our society.
https://techcrunch.com/2025/04/24/perplexity-ceo-says-its-browser-will-track-everything-users-do-online-to-sell-hyper-personalized-ads/
#Vivaldi #Browser #Spyware #surveillance #SurveillanceCapitalism #AI #Windows #Macos #Linux
@jon@vivaldi.net
This is the kind of thing that should be banned. It is time to realize that indiscriminate data collection and profiling is harming our society.
https://techcrunch.com/2025/04/24/perplexity-ceo-says-its-browser-will-track-everything-users-do-online-to-sell-hyper-personalized-ads/
#Vivaldi #Browser #Spyware #surveillance #SurveillanceCapitalism #AI #Windows #Macos #Linux
@ai6yr@m.ai6yr.org
END OF 10
Support for Windows 10 ends on October 14, 2025.
Microsoft wants you to buy a new computer.
But what if you could make your current one fast and secure again?
If you bought your computer after 2010, there's most likely no reason to throw it out. By just installing an up-to-date GNU/Linux operating system you can keep using it for years to come.
Installing an OS may sound difficult, but you don't have to go it alone! With any luck, there are people in your area ready to help!
@ai6yr@m.ai6yr.org
END OF 10
Support for Windows 10 ends on October 14, 2025.
Microsoft wants you to buy a new computer.
But what if you could make your current one fast and secure again?
If you bought your computer after 2010, there's most likely no reason to throw it out. By just installing an up-to-date GNU/Linux operating system you can keep using it for years to come.
Installing an OS may sound difficult, but you don't have to go it alone! With any luck, there are people in your area ready to help!
@ai6yr@m.ai6yr.org
END OF 10
Support for Windows 10 ends on October 14, 2025.
Microsoft wants you to buy a new computer.
But what if you could make your current one fast and secure again?
If you bought your computer after 2010, there's most likely no reason to throw it out. By just installing an up-to-date GNU/Linux operating system you can keep using it for years to come.
Installing an OS may sound difficult, but you don't have to go it alone! With any luck, there are people in your area ready to help!
@box464@mastodon.social
Microsoft Power Toys has changed since I last checked them out on Windows 95. A lot of these are turned on by default after installation, which...no.
@ai6yr@m.ai6yr.org
I know it's a big lift, but if you're running Windows 10, it's a great time to try out a desktop version of Linux... because you're going to have to replace that machine anyway (or risk it being another machine on some hacker's massive DDoS-for-hire farm). Alternately, it's an opportunity for those of us who are not handcuffed by Microsoft to pick up free, highly capable machines for free 😉 (and load them with Linux).
Microsoft still has a massive Windows 10 problem - and there's no easy way out
"...Hundreds of millions of PCs will be running Windows 10 when the end-of-support date rolls around. Yikes...most Windows 10 editions -- Home, Pro, Pro Workstation, Enterprise, and Education -- will reach their end-of-support date on Oct. 14, 2025...."
@philbaker1@fosstodon.org
I've installed Linux via USB thumb drive probably 100 times. #Windows is a dumpster fire in comparison. Apparently the Win11 ISO is *literally* made to burn to DVD ROM. In 2025. It cannot be simply copied to a USB drive and booted.
#WoeUSB purportedly works around this. But it's no longer available in the Fedora repos.
#Ventoy has worked for me in the past, but not today.
Secure Boot is disabled. The Windows 11 .iso boots fine on KVM/QEMU.
@catsalad@infosec.exchange
In a Battle Royale between all versions of #Windows, who would win?
Option | Voters |
---|---|
Windows 1.0x/2.x | 13 (2%) |
Windows for Workgroups 3.11 | 59 (7%) |
Windows 95/98 SE | 81 (10%) |
Windows 2000 | 108 (13%) |
Windows NT 4.0 | 60 (7%) |
Windows XP | 258 (31%) |
Windows Vista | 28 (3%) |
Windows 7 | 186 (23%) |
Windows 8 | 10 (1%) |
Windows 10/11 | 22 (3%) |
@forest_watch_impress@rss-mstdn.studiofreesia.com
トランプ政権による支援打ち切りで存続が危ぶまれていた「CVE」、財団設立で一国依存脱却へ/世界中の脆弱性情報は今後「CVE Foundation」で管理
https://forest.watch.impress.co.jp/docs/news/2007480.html
#forest_watch_impress #セキュリティ #脆弱性 #その他 #Windows #Mac #Linux #Android #iOS
@forest_watch_impress@rss-mstdn.studiofreesia.com
トランプ政権による支援打ち切りで存続が危ぶまれていた「CVE」、財団設立で一国依存脱却へ/世界中の脆弱性情報は今後「CVE Foundation」で管理
https://forest.watch.impress.co.jp/docs/news/2007480.html
#forest_watch_impress #セキュリティ #脆弱性 #その他 #Windows #Mac #Linux #Android #iOS
@catsalad@infosec.exchange
In a Battle Royale between all versions of #Windows, who would win?
Option | Voters |
---|---|
Windows 1.0x/2.x | 13 (2%) |
Windows for Workgroups 3.11 | 59 (7%) |
Windows 95/98 SE | 81 (10%) |
Windows 2000 | 108 (13%) |
Windows NT 4.0 | 60 (7%) |
Windows XP | 258 (31%) |
Windows Vista | 28 (3%) |
Windows 7 | 186 (23%) |
Windows 8 | 10 (1%) |
Windows 10/11 | 22 (3%) |
@jon@vivaldi.net
So why is Microsoft insisting on pushing out a feature it is very clear users just do not want? What is the point of it? It just does not make any sense. Recall makes no sense. It is one of rather many functions that Microsoft wants to force people into using.
Personally I also do not want Copilot on my computer and the idea that there can be a key on my keyboard that I can press that will enable by mistake it is not what I would think most people want.
I believe that there should be a very clear line between what is on your computer and what is in the cloud. Forcing people to log into a Microsoft online account to use their computer is crazy. Having people mistakenly enabling OneDrive is another disaster.
I guess this is all a great opportunity for Linux.
@jon@vivaldi.net
So why is Microsoft insisting on pushing out a feature it is very clear users just do not want? What is the point of it? It just does not make any sense. Recall makes no sense. It is one of rather many functions that Microsoft wants to force people into using.
Personally I also do not want Copilot on my computer and the idea that there can be a key on my keyboard that I can press that will enable by mistake it is not what I would think most people want.
I believe that there should be a very clear line between what is on your computer and what is in the cloud. Forcing people to log into a Microsoft online account to use their computer is crazy. Having people mistakenly enabling OneDrive is another disaster.
I guess this is all a great opportunity for Linux.
@forest_watch_impress@rss-mstdn.studiofreesia.com
Windows 10/11のパッチをあてたら、Webページのフォントが変わった? 戻し方はこれ/「Noto」フォントがOS標準搭載されるようになった影響【やじうまの杜】
https://forest.watch.impress.co.jp/docs/serial/yajiuma/2006058.html
#forest_watch_impress #Firefox #Google_Chrome #Noto #Microsoft_Edge #メイリオ #游ゴシック #インターネット #Webブラウザー #Windows #オフィス_ドキュメント #フォント #日本語_漢字あり
@forest_watch_impress@rss-mstdn.studiofreesia.com
Windows 10/11のパッチをあてたら、Webページのフォントが変わった? 戻し方はこれ/「Noto」フォントがOS標準搭載されるようになった影響【やじうまの杜】
https://forest.watch.impress.co.jp/docs/serial/yajiuma/2006058.html
#forest_watch_impress #Firefox #Google_Chrome #Noto #Microsoft_Edge #メイリオ #游ゴシック #インターネット #Webブラウザー #Windows #オフィス_ドキュメント #フォント #日本語_漢字あり
@forest_watch_impress@rss-mstdn.studiofreesia.com
Windows 10/11のパッチをあてたら、Webページのフォントが変わった? 戻し方はこれ/「Noto」フォントがOS標準搭載されるようになった影響【やじうまの杜】
https://forest.watch.impress.co.jp/docs/serial/yajiuma/2006058.html
#forest_watch_impress #Firefox #Google_Chrome #Noto #Microsoft_Edge #メイリオ #游ゴシック #インターネット #Webブラウザー #Windows #オフィス_ドキュメント #フォント #日本語_漢字あり
@jon@vivaldi.net
In case you forgot about Microsoft Recall, it looks like it will reappear in your Copilot+ computer soon running Windows 11.
I am sure you are all thrilled with the idea of a screenshot being taken of your screen every 3 seconds, right?
#Microsoft #Copilot #Recall #Spyware #Computer #Technology #Privacy #Windows
@jon@vivaldi.net
In case you forgot about Microsoft Recall, it looks like it will reappear in your Copilot+ computer soon running Windows 11.
I am sure you are all thrilled with the idea of a screenshot being taken of your screen every 3 seconds, right?
#Microsoft #Copilot #Recall #Spyware #Computer #Technology #Privacy #Windows
@jonsnow@mastodon.online
Microsoft is about to launch Recall for real this time
The long-delayed feature will begin gradually rolling out to Windows Insiders.
https://www.theverge.com/news/646911/microsoft-recall-windows-insiders-preview
#microsoft #windows #windows11 #copilot #recall #ai #privacy #surveillance #enshittification #tech
@jonsnow@mastodon.online
Microsoft is about to launch Recall for real this time
The long-delayed feature will begin gradually rolling out to Windows Insiders.
https://www.theverge.com/news/646911/microsoft-recall-windows-insiders-preview
#microsoft #windows #windows11 #copilot #recall #ai #privacy #surveillance #enshittification #tech
@itsfoss@mastodon.social
A real glow up. 🤣
@forest_watch_impress@rss-mstdn.studiofreesia.com
「Zoom Workplace」に複数の脆弱性 ~最新版へのアップデートを/
https://forest.watch.impress.co.jp/docs/news/2005405.html
#forest_watch_impress #Zoom #セキュリティ #脆弱性 #Windows #インターネット #画像_映像_音楽
@forest_watch_impress@rss-mstdn.studiofreesia.com
「Zoom Workplace」に複数の脆弱性 ~最新版へのアップデートを/
https://forest.watch.impress.co.jp/docs/news/2005405.html
#forest_watch_impress #Zoom #セキュリティ #脆弱性 #Windows #インターネット #画像_映像_音楽
@jon@vivaldi.net
@jon@vivaldi.net
@jon@vivaldi.net
@jon@vivaldi.net
@gauteweb@mikrobloggen.no
Ja takk. Sånn vil jeg ha start-menyen.
Skjermbilde fra @arstechnica av #Windows 11 Beta-versjon som er ute nå.
@goblingua@sunny.garden
Microsoft thinks you should recycle pcs that can't be upgraded to windows 11...
Please do not do this. Try linux or give them to someone else who will, or donate them to charitable organizations.
Goblins need spare computers everywhere!
#question
Can we have a #hashtag on here for people who wish to discard perfectly good computers, so other people on here who are less fortunate can get them and use linux or something?
Any opinions on a best hashtag for that?
#mastodon #windows #windows10 #recyclewindows10 #policy #terriblepolicy #linux #payitforward #charity #computer #computerrepair #goblinsolutions
@jon@vivaldi.net
31 years ago, Geir Ivarsøy and I started working on the Opera browser. A year later we founded Opera Software.
At Opera we wrote all our own code from scratch.
In 2011 I left Opera due to disagreement with investors about the direction Opera was heading.
Two years later, I co-founded Vivaldi to build a browser for you.
So I have been building browsers for 31 years. I think I know what it takes to build a browser.
Our Vivaldi team is for the most part in Norway and Iceland with a few people distributed around Europe and a couple of business people in the US.
Vivaldi is available for your computer and your phone, unless you have a very specific setup. Vivaldi might even be available for your car as well.
We go out of our way to provide you with a browser that matches your needs. I hope you like it.
#Vivaldi #Windows #Macos #Linux #Android #ios #Computer #Mobile
@jon@vivaldi.net
31 years ago, Geir Ivarsøy and I started working on the Opera browser. A year later we founded Opera Software.
At Opera we wrote all our own code from scratch.
In 2011 I left Opera due to disagreement with investors about the direction Opera was heading.
Two years later, I co-founded Vivaldi to build a browser for you.
So I have been building browsers for 31 years. I think I know what it takes to build a browser.
Our Vivaldi team is for the most part in Norway and Iceland with a few people distributed around Europe and a couple of business people in the US.
Vivaldi is available for your computer and your phone, unless you have a very specific setup. Vivaldi might even be available for your car as well.
We go out of our way to provide you with a browser that matches your needs. I hope you like it.
#Vivaldi #Windows #Macos #Linux #Android #ios #Computer #Mobile
@jon@vivaldi.net
31 years ago, Geir Ivarsøy and I started working on the Opera browser. A year later we founded Opera Software.
At Opera we wrote all our own code from scratch.
In 2011 I left Opera due to disagreement with investors about the direction Opera was heading.
Two years later, I co-founded Vivaldi to build a browser for you.
So I have been building browsers for 31 years. I think I know what it takes to build a browser.
Our Vivaldi team is for the most part in Norway and Iceland with a few people distributed around Europe and a couple of business people in the US.
Vivaldi is available for your computer and your phone, unless you have a very specific setup. Vivaldi might even be available for your car as well.
We go out of our way to provide you with a browser that matches your needs. I hope you like it.
#Vivaldi #Windows #Macos #Linux #Android #ios #Computer #Mobile
@jon@vivaldi.net
31 years ago, Geir Ivarsøy and I started working on the Opera browser. A year later we founded Opera Software.
At Opera we wrote all our own code from scratch.
In 2011 I left Opera due to disagreement with investors about the direction Opera was heading.
Two years later, I co-founded Vivaldi to build a browser for you.
So I have been building browsers for 31 years. I think I know what it takes to build a browser.
Our Vivaldi team is for the most part in Norway and Iceland with a few people distributed around Europe and a couple of business people in the US.
Vivaldi is available for your computer and your phone, unless you have a very specific setup. Vivaldi might even be available for your car as well.
We go out of our way to provide you with a browser that matches your needs. I hope you like it.
#Vivaldi #Windows #Macos #Linux #Android #ios #Computer #Mobile
@jon@vivaldi.net
@jon@vivaldi.net
@tomminieminen@mastodontti.fi · Reply to Tivi-lehti's post
@tivilehti Hmm… #Microsoft'in suunnitelmissa siis on, että #Windows'in #BlueScreenOfDeath on jatkossa tasan samannäköinen kuin #päivitysruutu? Kriittiset #bugi't ovat tästedes siis virallisestikin osa #Wintendo'n normaalia ja odotuksenmukaista toimintaa? #sarkasmi #atkjuttuja
@governorkeagan@infosec.exchange
@zadjii@mastodon.social
It's finally here. Start anything, with the Command Palette, now in #PowerToys 0.90.
@zadjii@mastodon.social
It's finally here. Start anything, with the Command Palette, now in #PowerToys 0.90.
@angedestenebres@mastodon.tedomum.net
Ca y est sur #Windows 11 au boulot ! Ca me fait bizarre, même si ça donne un coup de jeune niveau interface par rapport à W10.
@nixCraft@mastodon.social
Interest in LibreOffice, the open-source alternative to Microsoft Office, is on the rise, with weekly downloads of its software package close to 1 million a week as users look to avoid subscription costs. That’s the highest download number since 2023. It works on Linux, macOS, Windows and Unix like systems. https://www.computerworld.com/article/3840480/libreoffice-downloads-on-the-rise-as-users-look-to-avoid-subscription-costs.html
@nixCraft@mastodon.social
Interest in LibreOffice, the open-source alternative to Microsoft Office, is on the rise, with weekly downloads of its software package close to 1 million a week as users look to avoid subscription costs. That’s the highest download number since 2023. It works on Linux, macOS, Windows and Unix like systems. https://www.computerworld.com/article/3840480/libreoffice-downloads-on-the-rise-as-users-look-to-avoid-subscription-costs.html
@cascading@misskey.io
Windows 11 计划移除 BypassNRO,强制用户在 OOBE 中联网并关联微软帐户;微软称是为提高安全性和用户体验。
theverge.com/~
#Windows
Telegram 原文
@helenecookphoto@mastodon.social
'It's a square world' - Berlin
'Innenhöfe' #FotoVorschlag
#Berlin #photography #photographers #MastoArt #mastodonart #urbanphotography #architecture #architecturephotography #Fensterfreitag #WindowFriday #windows
📸©helene-cook.eu
@helenecookphoto@mastodon.social
'It's a square world' - Berlin
'Innenhöfe' #FotoVorschlag
#Berlin #photography #photographers #MastoArt #mastodonart #urbanphotography #architecture #architecturephotography #Fensterfreitag #WindowFriday #windows
📸©helene-cook.eu
@KazukyAkayashi@social.zarchbox.fr
Problème Résolu ✅
Merci pour vos réponses même ceux•celles qui ont quand même dit installe Linux
---------------------------------
Y a moyen de récup la clef windows 10 pro depuis une installation Windows (installation faite avec cette même clef), parce que ça fait 5 ans et j'ai pas la moindre idée d'ou j'ai foutu la dite clef ? c'est pour refaire un ordi portable
Merci de garder vos : "met Linux" , hein je vous vois venir avec vos gros sabot bande de geek•ette
#Windows #Aide
@forest_watch_impress@rss-mstdn.studiofreesia.com
「Windows 10サポートは2025年10月14日に終了します」 ~Microsoftが耳タコの注意喚起/「Office 2016」「Office 2019」も同時終了だよ!【やじうまの杜】
https://forest.watch.impress.co.jp/docs/serial/yajiuma/2002212.html
#forest_watch_impress #EOS #Office_2016 #Windows_10 #Office_2019 #システム_ファイル #システム #Windows
@forest_watch_impress@rss-mstdn.studiofreesia.com
「Windows 10サポートは2025年10月14日に終了します」 ~Microsoftが耳タコの注意喚起/「Office 2016」「Office 2019」も同時終了だよ!【やじうまの杜】
https://forest.watch.impress.co.jp/docs/serial/yajiuma/2002212.html
#forest_watch_impress #EOS #Office_2016 #Windows_10 #Office_2019 #システム_ファイル #システム #Windows
@jon@vivaldi.net
@jon@vivaldi.net
@ma1@todon.eu
Just released, emergency @torproject 14.0.8 update for #Windows users only, with a critical and urgent Firefox security fix:
@reallylazybear@mastodon.social
This is a pretty cool yet somewhat creepy website lol.
#chrome #firefox #brave #duckduckgo #microsoft #microsoftedge #edge #opera #operagx #safari #vivaldi #chromium #ungoogle #torbrowser #mullvad #mullvadbrowser #librewolf #cromite #firefoxfocus #yandex #privacy #security #ungoogledchromium #linux #windows #ios #android #mac #macos
@reallylazybear@mastodon.social
This is a pretty cool yet somewhat creepy website lol.
#chrome #firefox #brave #duckduckgo #microsoft #microsoftedge #edge #opera #operagx #safari #vivaldi #chromium #ungoogle #torbrowser #mullvad #mullvadbrowser #librewolf #cromite #firefoxfocus #yandex #privacy #security #ungoogledchromium #linux #windows #ios #android #mac #macos
@gyptazy@gyptazy.com
What could possibly go wrong with #Windows VMs in #Proxmox when using native CPU type? Why could this have impacts to the VMs' performance? Let's do #virtualization the right way.
https://gyptazy.com/proxmox-and-windows-vms-why-the-native-cpu-type-might-be-a-bad-idea/
@gyptazy@gyptazy.com
What could possibly go wrong with #Windows VMs in #Proxmox when using native CPU type? Why could this have impacts to the VMs' performance? Let's do #virtualization the right way.
https://gyptazy.com/proxmox-and-windows-vms-why-the-native-cpu-type-might-be-a-bad-idea/
@eu_os@eupolicy.social
Reboost ♻️ plz: In light of increased uncertainty on the reliability on the US, European democracies should strengthen their strategic autonomy: this also includes autonomy from #Microsoft #Windows in the public and private sector.
https://eu-os.gitlab.io proposes to develop together a Community-led Proof-of-Concept for a free/libre replacement of Windows. Follow us on Mastodon and join the Matrix chat at https://matrix.to/#/#eu-os:kde.org to receive updates and help.
@coldkennels@mastodon.social
My dad is in his early 70s.
He’s always been into computers, but he’s used nothing but MS-DOS and #Windows since the 90s, and resisted change at every turn.
Last month he called me up to ask me about #Linux, package managers, and “the terminal”. He’s now installing Linux Mint on his friends’ computers so they don’t have to throw out perfectly good computers because Windows 11 won’t support them.
I’ve never been more proud.
@coldkennels@mastodon.social
My dad is in his early 70s.
He’s always been into computers, but he’s used nothing but MS-DOS and #Windows since the 90s, and resisted change at every turn.
Last month he called me up to ask me about #Linux, package managers, and “the terminal”. He’s now installing Linux Mint on his friends’ computers so they don’t have to throw out perfectly good computers because Windows 11 won’t support them.
I’ve never been more proud.
@virtualbri@mastodon.online
Yeah, what fucking madness Microsoft. No thank you.
@disu1950@vivaldi.net
IN BROWSERS WAR, VIVALDI TAKES WINS ✔️
**Conclusion**
In this test comparison, the clear choice is Vivaldi. With a super flexible user interface, crazy cool tab management features, secure & reliable built-in apps, and the best privacy online, it's easy to see why Vivaldi is the new gold standard for web browsers.
Regardless of which browser you choose, you should update it regularly and periodically check it for viruses to prevent any security gaps from being exploited by hackers or malware. In addition, you should keep your operating system up to date, to maintain your PC's overall security.
@jon@vivaldi.net
@jon@vivaldi.net
@jon@vivaldi.net
@forest_watch_impress@rss-mstdn.studiofreesia.com
「Excel」で2つ目のファイルを開くのが遅くなる問題 ~「バージョン 2402」以降で発生中/日本マイクロソフトが暫定的な対策を案内中
https://forest.watch.impress.co.jp/docs/news/1670649.html
#forest_watch_impress #Excel #Microsoft_Excel #Microsoft_365 #オフィス_ドキュメント #オフィス #Windows #ドキュメント
@forest_watch_impress@rss-mstdn.studiofreesia.com
「Excel」で2つ目のファイルを開くのが遅くなる問題 ~「バージョン 2402」以降で発生中/日本マイクロソフトが暫定的な対策を案内中
https://forest.watch.impress.co.jp/docs/news/1670649.html
#forest_watch_impress #Excel #Microsoft_Excel #Microsoft_365 #オフィス_ドキュメント #オフィス #Windows #ドキュメント
@forest_watch_impress@rss-mstdn.studiofreesia.com
「Excel」で2つ目のファイルを開くのが遅くなる問題 ~「バージョン 2402」以降で発生中/日本マイクロソフトが暫定的な対策を案内中
https://forest.watch.impress.co.jp/docs/news/1670649.html
#forest_watch_impress #Excel #Microsoft_Excel #Microsoft_365 #オフィス_ドキュメント #オフィス #Windows #ドキュメント
@disu1950@vivaldi.net
IN BROWSERS WAR, VIVALDI TAKES WINS ✔️
**Conclusion**
In this test comparison, the clear choice is Vivaldi. With a super flexible user interface, crazy cool tab management features, secure & reliable built-in apps, and the best privacy online, it's easy to see why Vivaldi is the new gold standard for web browsers.
Regardless of which browser you choose, you should update it regularly and periodically check it for viruses to prevent any security gaps from being exploited by hackers or malware. In addition, you should keep your operating system up to date, to maintain your PC's overall security.
@Linux@mk.absturztau.be
For 4 months now (since November 2024), I have been using, Windows. 🤯
Fedora v41 was released in October 2024, and normally, Ultramarine Linux (UM, for short) is quick to release their spin of Fedora.
I like UM because I don't have to configure anything. Usually, I have the time to do so, but around the holidays and other things that kept coming up, I just didn't want to do it. I also had plans to convert some family members to Linux too, so the idea of configuring a bunch of computers, independent of their own, just didn't appeal to me.
But Ultramarine Linux would never end up releasing v41. Turns out, the development took on too much too soon, and the development likely burned out. An unfortunate common theme for many user-friendly Linux distros.
They'll argue there is an "upgrade path", but there is no official release, and they'll try to argue that not having an image you can freshly install, still counts as a release (no, it does not). I kept waiting because I and others kept being told, "soon". Well, "soon" turned out to be, never, and I wish they had just been honest about that.
Meanwhile, Fedora v42 is soon to be a beta. We're less than a month away from April, and if you've taken a look at the development build, it's running stable (at least for me). But the problem about Fedora is, like Debian, you need to build it up. I can do that, but I'd rather just install something with an "out of box" experience for the other 12 computers. Mostly, because with those other people, they were expecting a Windows-like experience, which is what Ultramarine Linux offered.
And that is where I am today. Not knowing of a use-friendly distro, for everyone else. I know to avoid, DEB base system. If that statement confuses or upsets you, stop using a DEB base system. Trust me, I didn't notice how much DEB sucks as a desktop, until I stop using it as a desktop. I don't expect you to see that difference either until you stop using DEB as a desktop.
I feel defeated, because ultimately, I think Windows is going to win this. And right now, I am angry at the Linux ecosystem. Every time, there is finally a Linux distro that knows what they're doing, they seem to geek out, and drop the ball.
1) Fairly current
2) Stable
3) Must include 1 and 2.
4) Must work with older hardware.
5) Must work with new-ish hardware.
6) Must include non-free drivers
7) Must include non-free firmware
8) Must include non-free media codecs.
9) Fairly solid road map for the future
10) Point and click updates (similar to Microsoft Update)
11) KDE (helps with point and click, configuration)
12) Double-click installs (rpm packages, for example)
13) Graphical interface for Flatpak
14) Not immutable.
#Linux #Windows #OpenSource #Foss
@Linux@mk.absturztau.be
For 4 months now (since November 2024), I have been using, Windows. 🤯
Fedora v41 was released in October 2024, and normally, Ultramarine Linux (UM, for short) is quick to release their spin of Fedora.
I like UM because I don't have to configure anything. Usually, I have the time to do so, but around the holidays and other things that kept coming up, I just didn't want to do it. I also had plans to convert some family members to Linux too, so the idea of configuring a bunch of computers, independent of their own, just didn't appeal to me.
But Ultramarine Linux would never end up releasing v41. Turns out, the development took on too much too soon, and the development likely burned out. An unfortunate common theme for many user-friendly Linux distros.
They'll argue there is an "upgrade path", but there is no official release, and they'll try to argue that not having an image you can freshly install, still counts as a release (no, it does not). I kept waiting because I and others kept being told, "soon". Well, "soon" turned out to be, never, and I wish they had just been honest about that.
Meanwhile, Fedora v42 is soon to be a beta. We're less than a month away from April, and if you've taken a look at the development build, it's running stable (at least for me). But the problem about Fedora is, like Debian, you need to build it up. I can do that, but I'd rather just install something with an "out of box" experience for the other 12 computers. Mostly, because with those other people, they were expecting a Windows-like experience, which is what Ultramarine Linux offered.
And that is where I am today. Not knowing of a use-friendly distro, for everyone else. I know to avoid, DEB base system. If that statement confuses or upsets you, stop using a DEB base system. Trust me, I didn't notice how much DEB sucks as a desktop, until I stop using it as a desktop. I don't expect you to see that difference either until you stop using DEB as a desktop.
I feel defeated, because ultimately, I think Windows is going to win this. And right now, I am angry at the Linux ecosystem. Every time, there is finally a Linux distro that knows what they're doing, they seem to geek out, and drop the ball.
1) Fairly current
2) Stable
3) Must include 1 and 2.
4) Must work with older hardware.
5) Must work with new-ish hardware.
6) Must include non-free drivers
7) Must include non-free firmware
8) Must include non-free media codecs.
9) Fairly solid road map for the future
10) Point and click updates (similar to Microsoft Update)
11) KDE (helps with point and click, configuration)
12) Double-click installs (rpm packages, for example)
13) Graphical interface for Flatpak
14) Not immutable.
#Linux #Windows #OpenSource #Foss
@BasementDweller3000@mas.to
Wow. I upgraded Windows and now Microsoft is shoving ads on my desktop.
Fuck this, I'm switching to BeOS.
#windows #windows95 #win95 #win9x #retrocomputing #microsoft #enshittification
@travisj@indieweb.social
Sharing some cursors. I modified the Hackneyed cursors to be high contrast and disable the animation, available as monochrome or multicolour. They use the Windows 10 and 11 default cursor colours. You can also pick any colours you want if you build from source (Codeberg).
You can download directly from my website or OpenDesktop.org.
https://futurehorizondesign.net.au/portfolio/hackneyedhighcontraststaticcursors.html
#cursor #linux #foss #opensource #windows #accessibility #a11y #accessible #ui #uidesign #retrocomputing #retro #xfce #kde #freesoftware
@jon@vivaldi.net
To all of you that are joining us at @Vivaldi , I would like to welcome you.
We know that many are looking for options away from Big Tech and we are happy many of you are choosing us.
We have been building browsers for a long time now. Many of us were at Opera. I co-founded Opera in 1995.
As Opera drifted in a bad direction, I co-founded Vivaldi to provide a real alternative to Big Tech and I believe we can play a very important role moving forward. Thanks for your support!
#Vivaldi #BigTech #browser #Windows #Macos #Linux #Android #ioS
@Pixelix@mastodon.social
@v_raton@fosstodon.org
I spend a much of time in #XFCE #debian to realise what i need is a #linuxmint #cinamon
And yes, more one notebook what will go to trash because of #windows TPM bulshit
@jon@vivaldi.net
To all of you that are joining us at @Vivaldi , I would like to welcome you.
We know that many are looking for options away from Big Tech and we are happy many of you are choosing us.
We have been building browsers for a long time now. Many of us were at Opera. I co-founded Opera in 1995.
As Opera drifted in a bad direction, I co-founded Vivaldi to provide a real alternative to Big Tech and I believe we can play a very important role moving forward. Thanks for your support!
#Vivaldi #BigTech #browser #Windows #Macos #Linux #Android #ioS
@eu_os@eupolicy.social
Reboost ♻️ plz: In light of increased uncertainty on the reliability on the US, European democracies should strengthen their strategic autonomy: this also includes autonomy from #Microsoft #Windows in the public and private sector.
https://eu-os.gitlab.io proposes to develop together a Community-led Proof-of-Concept for a free/libre replacement of Windows. Follow us on Mastodon and join the Matrix chat at https://matrix.to/#/#eu-os:kde.org to receive updates and help.
@jon@vivaldi.net
To all of you that are joining us at @Vivaldi , I would like to welcome you.
We know that many are looking for options away from Big Tech and we are happy many of you are choosing us.
We have been building browsers for a long time now. Many of us were at Opera. I co-founded Opera in 1995.
As Opera drifted in a bad direction, I co-founded Vivaldi to provide a real alternative to Big Tech and I believe we can play a very important role moving forward. Thanks for your support!
#Vivaldi #BigTech #browser #Windows #Macos #Linux #Android #ioS
@grutzifix@fedifreu.de · Reply to Ulrich Kelber's post
@ulrichkelber
Erweitern wir doch die Aussage,
wenn sie das mit Waffensystemen machen, warum nicht auch mit #windows , #m365 , #whatsapp , #teams ....
@eu_os@eupolicy.social
Reboost ♻️ plz: In light of increased uncertainty on the reliability on the US, European democracies should strengthen their strategic autonomy: this also includes autonomy from #Microsoft #Windows in the public and private sector.
https://eu-os.gitlab.io proposes to develop together a Community-led Proof-of-Concept for a free/libre replacement of Windows. Follow us on Mastodon and join the Matrix chat at https://matrix.to/#/#eu-os:kde.org to receive updates and help.
@eu_os@eupolicy.social
Reboost ♻️ plz: In light of increased uncertainty on the reliability on the US, European democracies should strengthen their strategic autonomy: this also includes autonomy from #Microsoft #Windows in the public and private sector.
https://eu-os.gitlab.io proposes to develop together a Community-led Proof-of-Concept for a free/libre replacement of Windows. Follow us on Mastodon and join the Matrix chat at https://matrix.to/#/#eu-os:kde.org to receive updates and help.
@eu_os@eupolicy.social
Reboost ♻️ plz: In light of increased uncertainty on the reliability on the US, European democracies should strengthen their strategic autonomy: this also includes autonomy from #Microsoft #Windows in the public and private sector.
https://eu-os.gitlab.io proposes to develop together a Community-led Proof-of-Concept for a free/libre replacement of Windows. Follow us on Mastodon and join the Matrix chat at https://matrix.to/#/#eu-os:kde.org to receive updates and help.
@eu_os@eupolicy.social
Reboost ♻️ plz: In light of increased uncertainty on the reliability on the US, European democracies should strengthen their strategic autonomy: this also includes autonomy from #Microsoft #Windows in the public and private sector.
https://eu-os.gitlab.io proposes to develop together a Community-led Proof-of-Concept for a free/libre replacement of Windows. Follow us on Mastodon and join the Matrix chat at https://matrix.to/#/#eu-os:kde.org to receive updates and help.
@eu_os@eupolicy.social
Reboost ♻️ plz: In light of increased uncertainty on the reliability on the US, European democracies should strengthen their strategic autonomy: this also includes autonomy from #Microsoft #Windows in the public and private sector.
https://eu-os.gitlab.io proposes to develop together a Community-led Proof-of-Concept for a free/libre replacement of Windows. Follow us on Mastodon and join the Matrix chat at https://matrix.to/#/#eu-os:kde.org to receive updates and help.
@eu_os@eupolicy.social
Reboost ♻️ plz: In light of increased uncertainty on the reliability on the US, European democracies should strengthen their strategic autonomy: this also includes autonomy from #Microsoft #Windows in the public and private sector.
https://eu-os.gitlab.io proposes to develop together a Community-led Proof-of-Concept for a free/libre replacement of Windows. Follow us on Mastodon and join the Matrix chat at https://matrix.to/#/#eu-os:kde.org to receive updates and help.
@jon@vivaldi.net
To all of you that are joining us at @Vivaldi , I would like to welcome you.
We know that many are looking for options away from Big Tech and we are happy many of you are choosing us.
We have been building browsers for a long time now. Many of us were at Opera. I co-founded Opera in 1995.
As Opera drifted in a bad direction, I co-founded Vivaldi to provide a real alternative to Big Tech and I believe we can play a very important role moving forward. Thanks for your support!
#Vivaldi #BigTech #browser #Windows #Macos #Linux #Android #ioS
@eu_os@eupolicy.social
Reboost ♻️ plz: In light of increased uncertainty on the reliability on the US, European democracies should strengthen their strategic autonomy: this also includes autonomy from #Microsoft #Windows in the public and private sector.
https://eu-os.gitlab.io proposes to develop together a Community-led Proof-of-Concept for a free/libre replacement of Windows. Follow us on Mastodon and join the Matrix chat at https://matrix.to/#/#eu-os:kde.org to receive updates and help.
@jon@vivaldi.net
To all of you that are joining us at @Vivaldi , I would like to welcome you.
We know that many are looking for options away from Big Tech and we are happy many of you are choosing us.
We have been building browsers for a long time now. Many of us were at Opera. I co-founded Opera in 1995.
As Opera drifted in a bad direction, I co-founded Vivaldi to provide a real alternative to Big Tech and I believe we can play a very important role moving forward. Thanks for your support!
#Vivaldi #BigTech #browser #Windows #Macos #Linux #Android #ioS
@jon@vivaldi.net
To all of you that are joining us at @Vivaldi , I would like to welcome you.
We know that many are looking for options away from Big Tech and we are happy many of you are choosing us.
We have been building browsers for a long time now. Many of us were at Opera. I co-founded Opera in 1995.
As Opera drifted in a bad direction, I co-founded Vivaldi to provide a real alternative to Big Tech and I believe we can play a very important role moving forward. Thanks for your support!
#Vivaldi #BigTech #browser #Windows #Macos #Linux #Android #ioS
@eu_os@eupolicy.social
Reboost ♻️ plz: In light of increased uncertainty on the reliability on the US, European democracies should strengthen their strategic autonomy: this also includes autonomy from #Microsoft #Windows in the public and private sector.
https://eu-os.gitlab.io proposes to develop together a Community-led Proof-of-Concept for a free/libre replacement of Windows. Follow us on Mastodon and join the Matrix chat at https://matrix.to/#/#eu-os:kde.org to receive updates and help.
@mapache@hachyderm.io · Reply to Maho Pacheco 🦝🍻's post
This brought back memories of those days spent downloading dlls from the internet, praying they'd not be malware.
But this time, I simply snagged one from a local Windows.old folder and replaced the faulty one in the new install.
Ah, the good-old times returned for a moment.
@forest_watch_impress@rss-mstdn.studiofreesia.com
垂直タブ、AI統合の新しいサイドバーを搭載した「Firefox 136」が正式リリース/Linux向けARM64版も追加。セキュリティ関連の修正は15件
https://forest.watch.impress.co.jp/docs/news/1667651.html
#forest_watch_impress #Firefox #インターネット #Webブラウザー #Windows #Mac #Linux #セキュリティ #脆弱性
@forest_watch_impress@rss-mstdn.studiofreesia.com
垂直タブ、AI統合の新しいサイドバーを搭載した「Firefox 136」が正式リリース/Linux向けARM64版も追加。セキュリティ関連の修正は15件
https://forest.watch.impress.co.jp/docs/news/1667651.html
#forest_watch_impress #Firefox #インターネット #Webブラウザー #Windows #Mac #Linux #セキュリティ #脆弱性
@DiazCarrete@hachyderm.io
An #autohotkey script to switch between multiple instances of the same app in #Windows, in the spirit of ⌘ ` in #macos
@jon@vivaldi.net
To Recall or not to Recall?
I asked you whether you would like to use Microsoft Recall and 96% said no. 4% said yes, but a couple of you said you did that by mistake.
When Microsoft first introduced Recall, it was on by default. Then they turned it off, because people were appalled. Not sure what they do now.
#Windows #Macos #Linux #Microsoft #Computers #Technology #AI
@Flaky@furry.engineer
Giving Directory Opus a go on my Windows install. I used Directory Opus years ago when I was at university (yes I'm aware it was an Amiga tool as well) but I wasn't really worried about that until recently.
I don't wanna lose the split view I was using from KDE's Dolphin and from first impressions, this does the job and then some.
@jon@vivaldi.net
So Microsoft introduced Recall some time ago. Seemingly most people have never heard of it. It takes a picture of your screen every 5s, so you are able to search for what you did on your computer. Personally I can not think of many uses for this functionality and none that outweigh the privacy and security implications.
Would you care to enable such functionality on your computer?
#Windows #Macos #Linux #Spyware #BigTech #Vivaldi #Computer #software #surveillance #Microsoft
Option | Voters |
---|---|
Yes | 10 (3%) |
No | 327 (97%) |
@jon@vivaldi.net
So Microsoft introduced Recall some time ago. Seemingly most people have never heard of it. It takes a picture of your screen every 5s, so you are able to search for what you did on your computer. Personally I can not think of many uses for this functionality and none that outweigh the privacy and security implications.
Would you care to enable such functionality on your computer?
#Windows #Macos #Linux #Spyware #BigTech #Vivaldi #Computer #software #surveillance #Microsoft
Option | Voters |
---|---|
Yes | 10 (3%) |
No | 327 (97%) |
@jon@vivaldi.net
Switching from Big Tech is not always easy. You get used to their ways and they make it hard to switch.
Are you ready to make the switch?
Are you ready to help your friends make the switch?
There are alternatives. One of them is @Vivaldi, the browser company I co-founded in 2012. I invite you to join us.
#Vivaldi #BigTech #browser #Mastodon #fediverse #Windows #macos #Linux #Android #ios
@jon@vivaldi.net
Switching from Big Tech is not always easy. You get used to their ways and they make it hard to switch.
Are you ready to make the switch?
Are you ready to help your friends make the switch?
There are alternatives. One of them is @Vivaldi, the browser company I co-founded in 2012. I invite you to join us.
#Vivaldi #BigTech #browser #Mastodon #fediverse #Windows #macos #Linux #Android #ios
@jon@vivaldi.net
Switching from Big Tech is not always easy. You get used to their ways and they make it hard to switch.
Are you ready to make the switch?
Are you ready to help your friends make the switch?
There are alternatives. One of them is @Vivaldi, the browser company I co-founded in 2012. I invite you to join us.
#Vivaldi #BigTech #browser #Mastodon #fediverse #Windows #macos #Linux #Android #ios
@forest_watch_impress@rss-mstdn.studiofreesia.com
GitHubの次世代開コーディングフォント「monaspace」がアップデート/フローズンフォントの追加と「Nerd Fonts」のサポート、収録グリフも大幅拡充
https://forest.watch.impress.co.jp/docs/news/1664002.html
#forest_watch_impress #Monaspace #Nerd_Fonts #オフィス_ドキュメント #フォント #英語など #プログラミング #Windows
@fedify@hollo.social
Excited to share that Fedify CLI is now available on Scoop for #Windows users! You can easily install it with scoop install fedify
. One more way to get started with #ActivityPub development!
@fedify@hollo.social
Excited to share that Fedify CLI is now available on Scoop for #Windows users! You can easily install it with scoop install fedify
. One more way to get started with #ActivityPub development!
@Rairii@labyrinth.zone
@Rairii@labyrinth.zone
@dandylover1@friendica.world
First, they shut down the Basic HTML site, forcing many of us to switch to clients such as Thunderbird. Now, they're using qr codes which are not only inaccessible to the blind but also to those who don't use smartphones! This is ridiculous! Yes, they do still have the option to click whether it's you trying to sign in or not (which still requires a smartphone and a carrier, which they claim to be concerned about), but how long before they remove that, too?
pcmag.com/news/google-is-repla…
#accessibility #Android #authentication #blind #Google #GMail #IOS #Narrator #NVDA #sms #Talkback #technology #Voiceover #Windows
@dandylover1@friendica.world
First, they shut down the Basic HTML site, forcing many of us to switch to clients such as Thunderbird. Now, they're using qr codes which are not only inaccessible to the blind but also to those who don't use smartphones! This is ridiculous! Yes, they do still have the option to click whether it's you trying to sign in or not (which still requires a smartphone and a carrier, which they claim to be concerned about), but how long before they remove that, too?
pcmag.com/news/google-is-repla…
#accessibility #Android #authentication #blind #Google #GMail #IOS #Narrator #NVDA #sms #Talkback #technology #Voiceover #Windows
@AwattoAnalog@mastodon.social
Concerned about Microsoft Windows 11 Recall? You should be.
Recall allows Microsoft’s Windows 11 Copilot+ devices to screenshot every action a person takes on their PC.
What can you do? Switching to Linux is the clear answer, but some don't know what distro to try.
DistroSea.com is a website that lets you run and test 60+ Linux distributions straight from your web browser.
Have fun!
Source: https://distrosea.com/
#Linux #Computer #Windows #DOS #OPSEC #InfoSec #Privacy #Surveillance
@AwattoAnalog@mastodon.social
Concerned about Microsoft Windows 11 Recall? You should be.
Recall allows Microsoft’s Windows 11 Copilot+ devices to screenshot every action a person takes on their PC.
What can you do? Switching to Linux is the clear answer, but some don't know what distro to try.
DistroSea.com is a website that lets you run and test 60+ Linux distributions straight from your web browser.
Have fun!
Source: https://distrosea.com/
#Linux #Computer #Windows #DOS #OPSEC #InfoSec #Privacy #Surveillance
@ianonymous3000@mastodon.social
@cx7@mastodon.social
Linux: Built different
@jon@vivaldi.net
I asked you whether it mattered to you where your browser company is located and where your browser is made.
83% said it mattered. 17% said it did not.
@jon@vivaldi.net
I asked you whether it mattered to you where your browser company is located and where your browser is made.
83% said it mattered. 17% said it did not.
@forest_watch_impress@rss-mstdn.studiofreesia.com
人気のMarkdownノートアプリ「Obsidian」が商用でも無償に/今後もアカウントなし、広告なし、トラッキングなし、ロックインの心配なしで利用可能
https://forest.watch.impress.co.jp/docs/news/1664692.html
#forest_watch_impress #Obsidian #オフィス_ドキュメント #ドキュメント #Windows #Mac #Linux #iOS #Android
@forest_watch_impress@rss-mstdn.studiofreesia.com
人気のMarkdownノートアプリ「Obsidian」が商用でも無償に/今後もアカウントなし、広告なし、トラッキングなし、ロックインの心配なしで利用可能
https://forest.watch.impress.co.jp/docs/news/1664692.html
#forest_watch_impress #Obsidian #オフィス_ドキュメント #ドキュメント #Windows #Mac #Linux #iOS #Android
@forest_watch_impress@rss-mstdn.studiofreesia.com
人気のMarkdownノートアプリ「Obsidian」が商用でも無償に/今後もアカウントなし、広告なし、トラッキングなし、ロックインの心配なしで利用可能
https://forest.watch.impress.co.jp/docs/news/1664692.html
#forest_watch_impress #Obsidian #オフィス_ドキュメント #ドキュメント #Windows #Mac #Linux #iOS #Android
@Tealk@rollenspiel.social
So gerade mal mein #Arch zerschossen weil ich nicht aufgepasst habe beim Update und icu irgendwie nicht mitgenommen hab. Aber dank Bootstick und arch-chroot und pacman-static war das recht schnell wieder geregelt.
Dafür liebe ich #Linux, #Windows hätte man sicher neu installieren müssen...
https://man.archlinux.org/man/arch-chroot.8
https://aur.archlinux.org/packages/pacman-static
@bsinni@twit.social
love @shanselman latest video on file explorer alternatives! Can’t wait to try them out #youtube #windows
@forest_watch_impress@rss-mstdn.studiofreesia.com
Microsoft、LPR/LPDを非推奨に ~古いUNIXクライアントの印刷に影響する可能性/代替はIPP
https://forest.watch.impress.co.jp/docs/news/1664700.html
#forest_watch_impress #印刷 #Windows_Server_2012 #LPR #LPD #システム_ファイル #システム #Windows
@forest_watch_impress@rss-mstdn.studiofreesia.com
Microsoft、LPR/LPDを非推奨に ~古いUNIXクライアントの印刷に影響する可能性/代替はIPP
https://forest.watch.impress.co.jp/docs/news/1664700.html
#forest_watch_impress #印刷 #Windows_Server_2012 #LPR #LPD #システム_ファイル #システム #Windows
@bsinni@twit.social
love @shanselman latest video on file explorer alternatives! Can’t wait to try them out #youtube #windows
@forest_watch_impress@rss-mstdn.studiofreesia.com
人気のMarkdownノートアプリ「Obsidian」が商用でも無償に/今後もアカウントなし、広告なし、トラッキングなし、ロックインの心配なしで利用可能
https://forest.watch.impress.co.jp/docs/news/1664692.html
#forest_watch_impress #Obsidian #オフィス_ドキュメント #ドキュメント #Windows #Mac #Linux #iOS #Android
@jon@vivaldi.net
One of the many features we have in @Vivaldi is the Calendar.
We had some important requirements when we made it:
1. Flexibility in display. So many calendars cut a lot of information. We want everything you want to be visible to be visible.
2. Inline editing option. Means you can see everything else while adding or editing an event.
3. Easy to use with the keyboard.
4. Both offline and online accounts. Means you can choose whether events are stored in the cloud or just locally on your computer.
If you have not tried it, give it a try. Available on Windows, Mac and Linux.
Bonus : Makes it easier to move away from Big Tech.
@jon@vivaldi.net
One of the many features we have in @Vivaldi is the Calendar.
We had some important requirements when we made it:
1. Flexibility in display. So many calendars cut a lot of information. We want everything you want to be visible to be visible.
2. Inline editing option. Means you can see everything else while adding or editing an event.
3. Easy to use with the keyboard.
4. Both offline and online accounts. Means you can choose whether events are stored in the cloud or just locally on your computer.
If you have not tried it, give it a try. Available on Windows, Mac and Linux.
Bonus : Makes it easier to move away from Big Tech.
@jon@vivaldi.net
One of the many features we have in @Vivaldi is the Calendar.
We had some important requirements when we made it:
1. Flexibility in display. So many calendars cut a lot of information. We want everything you want to be visible to be visible.
2. Inline editing option. Means you can see everything else while adding or editing an event.
3. Easy to use with the keyboard.
4. Both offline and online accounts. Means you can choose whether events are stored in the cloud or just locally on your computer.
If you have not tried it, give it a try. Available on Windows, Mac and Linux.
Bonus : Makes it easier to move away from Big Tech.
@forest_watch_impress@rss-mstdn.studiofreesia.com
GitHubの次世代開コーディングフォント「monaspace」がアップデート/フローズンフォントの追加と「Nerd Fonts」のサポート、収録グリフも大幅拡充
https://forest.watch.impress.co.jp/docs/news/1664002.html
#forest_watch_impress #Monaspace #Nerd_Fonts #オフィス_ドキュメント #フォント #英語など #プログラミング #Windows
@forest_watch_impress@rss-mstdn.studiofreesia.com
「Google Chrome」にヒープバッファオーバーフローなどの脆弱性、修正版が公開/Windows環境にはv133.0.6943.126/.127が展開中
https://forest.watch.impress.co.jp/docs/news/1663938.html
#forest_watch_impress #Google_Chrome #セキュリティ #脆弱性 #Windows #インターネット #Webブラウザー #Mac #Linux
@forest_watch_impress@rss-mstdn.studiofreesia.com
「Google Chrome」にヒープバッファオーバーフローなどの脆弱性、修正版が公開/Windows環境にはv133.0.6943.126/.127が展開中
https://forest.watch.impress.co.jp/docs/news/1663938.html
#forest_watch_impress #Google_Chrome #セキュリティ #脆弱性 #Windows #インターネット #Webブラウザー #Mac #Linux
@andrewlock@hachyderm.io
Blogged: Setting application environment variables in IIS without restarts
https://andrewlock.net/setting-environment-variables-in-iis-and-avoiding-app-pool-restarts/
In this post I outline how IIS works, describe how to add environment variables to app pools, and show how to prevent automatic app pool recycling on changes
@jon@vivaldi.net
Does it matter to you where your browser company is located and where your browser is made?
@Vivaldi is a Norwegian & Icelandic company. Team is in Norway and Iceland for the most part with some team members working from home as well across Europe.
Option | Voters |
---|---|
Yes | 135 (88%) |
No | 18 (12%) |
@jon@vivaldi.net
Does it matter to you where your browser company is located and where your browser is made?
@Vivaldi is a Norwegian & Icelandic company. Team is in Norway and Iceland for the most part with some team members working from home as well across Europe.
Option | Voters |
---|---|
Yes | 135 (88%) |
No | 18 (12%) |
@itsfoss@mastodon.social
@itsfoss@mastodon.social
@Linux_Is_Best@misskey.de
You're a newbie and as a newbie, you want a system that "just works".
You are OK with learning if you must, but the truth is, you would rather a system that is already familiar, and out of the box, the only thing you want to set up is your Wi-Fi (maybe printer). To be perfectly honest, you simply want point and click easy, just like Windows or Apple.
Ultramarine Linux (Kde Plasma) is what you seek.
https://distrowatch.com/table.php?distribution=ultramarine
#Ultramarine #UltramarineLinux #Linux #Foss #OpenSource #Windows #Windows11 #Windows10 #Windows8 #Windows7
@fedify@hollo.social
Excited to share that Fedify CLI is now available on Scoop for #Windows users! You can easily install it with scoop install fedify
. One more way to get started with #ActivityPub development!
@fedify@hollo.social
Excited to share that Fedify CLI is now available on Scoop for #Windows users! You can easily install it with scoop install fedify
. One more way to get started with #ActivityPub development!
@fedify@hollo.social
Excited to share that Fedify CLI is now available on Scoop for #Windows users! You can easily install it with scoop install fedify
. One more way to get started with #ActivityPub development!
@fedify@hollo.social
Excited to share that Fedify CLI is now available on Scoop for #Windows users! You can easily install it with scoop install fedify
. One more way to get started with #ActivityPub development!
@fedify@hollo.social
Excited to share that Fedify CLI is now available on Scoop for #Windows users! You can easily install it with scoop install fedify
. One more way to get started with #ActivityPub development!
@fedify@hollo.social
Excited to share that Fedify CLI is now available on Scoop for #Windows users! You can easily install it with scoop install fedify
. One more way to get started with #ActivityPub development!
@forest_watch_impress@rss-mstdn.studiofreesia.com
老舗の圧縮・解凍ツール「WinZip」にリモートコード実行の脆弱性/「WinZip 29.0」へのアップデートを
https://forest.watch.impress.co.jp/docs/news/1662936.html
@forest_watch_impress@rss-mstdn.studiofreesia.com
老舗の圧縮・解凍ツール「WinZip」にリモートコード実行の脆弱性/「WinZip 29.0」へのアップデートを
https://forest.watch.impress.co.jp/docs/news/1662936.html
@thegeeknews@mastodon.social
Um Jogo Por Dia 38 Fez #UmJogoPorDia #TGN
Fez #AGameADay #OneGameADay #OneGamePerDay #JogoDiário #JogoDoDia #TheGeekNews Plataforma #Windows #Steam #GOG #HumbleStore #PlayStation3 #PlayStation4 #PlayStationVita #Xbox360 #NintendoSwitch #iOS #Linux #macOS #PolytronCorporation
@thegeeknews@mastodon.social
Um Jogo Por Dia 38 Fez #UmJogoPorDia #TGN
Fez #AGameADay #OneGameADay #OneGamePerDay #JogoDiário #JogoDoDia #TheGeekNews Plataforma #Windows #Steam #GOG #HumbleStore #PlayStation3 #PlayStation4 #PlayStationVita #Xbox360 #NintendoSwitch #iOS #Linux #macOS #PolytronCorporation
@dandylover1@friendica.world
I have looked everywhere, but I can't find this post from 11 February! It isn't showing up in my Sent timeline. So if it is on my profile, and/or if you have seen it, I apologise.
I am not closing my account here, but I need to try something other than Friendica, due to accessibility issues. I am considering Akkoma, but am open to other networks if they are compatible with Mastodon.
I am seeking an instance with the following specifications.
Accessible interface (I use a screen reader called NVDA). If it uses Semantic html and isn't cluttered, that's a great start. I would prefer it to be compatible with Mastodon so that I could also use TweeseCake as a client. I need to easily be able to access things such as notifications, follow requests, my own posts, to be able to search for tags, people, my posts etc.
Posting limit of 5,000 characters or more (more preferred.
Ability to pin, unpin, edit, and delete posts.
Ability to filter content, so that I don't see certain words or phrases. (This doesn't work with TweeseCake, so it's not as important as the rest, unless the site is so accessible that I can use it often.)
Ability to select between seeing all posts of someone or only some, and to choose whether to let someone follow me without my seeing his posts or to follow him completely. (Friend versus Subscriber on Friendica).
Extensive profile with keywords. (Keywords may be a Friendica feature, so can be skipped.)
Most people write in English and are not politically, technologically, or gaming obsessed. No radicals of any pursuasion. (the English bit is just to help me find friends on my particular instance.)
Free speech (nothing illegal or homophobic). I personally avoid obscenities.)
If such an instance exists, please tell me. I found https://akkoma.fediverse.observer/list[7] but that's just a list with no real information about each instance. I would have to go through over 400 of them, choose the ones from the UK, Canada, and America (they're the most likely to have English instances), then go through those to see if they meet my requirements, but that's ridiculous.
I am not a programmer, so please don't suggest I start my own instance or join a network that is not set up with a webpage and/or to accept a client, as I know nothing about these things other than that they run on Linux and I'm a Windows user. I just want something that works. Also, if there are any demonstration instances, please let me know. I heard of one where accounts only lasted five days, but it seems to be gone.
#accessibility #Akkoma #blind #Fediverse #Friendica #Glitchsoc #html #instances #NVDA #Mastodon #screenreaders #TweeseCake #Windows
@dandylover1@friendica.world
I have looked everywhere, but I can't find this post from 11 February! It isn't showing up in my Sent timeline. So if it is on my profile, and/or if you have seen it, I apologise.
I am not closing my account here, but I need to try something other than Friendica, due to accessibility issues. I am considering Akkoma, but am open to other networks if they are compatible with Mastodon.
I am seeking an instance with the following specifications.
Accessible interface (I use a screen reader called NVDA). If it uses Semantic html and isn't cluttered, that's a great start. I would prefer it to be compatible with Mastodon so that I could also use TweeseCake as a client. I need to easily be able to access things such as notifications, follow requests, my own posts, to be able to search for tags, people, my posts etc.
Posting limit of 5,000 characters or more (more preferred.
Ability to pin, unpin, edit, and delete posts.
Ability to filter content, so that I don't see certain words or phrases. (This doesn't work with TweeseCake, so it's not as important as the rest, unless the site is so accessible that I can use it often.)
Ability to select between seeing all posts of someone or only some, and to choose whether to let someone follow me without my seeing his posts or to follow him completely. (Friend versus Subscriber on Friendica).
Extensive profile with keywords. (Keywords may be a Friendica feature, so can be skipped.)
Most people write in English and are not politically, technologically, or gaming obsessed. No radicals of any pursuasion. (the English bit is just to help me find friends on my particular instance.)
Free speech (nothing illegal or homophobic). I personally avoid obscenities.)
If such an instance exists, please tell me. I found https://akkoma.fediverse.observer/list[7] but that's just a list with no real information about each instance. I would have to go through over 400 of them, choose the ones from the UK, Canada, and America (they're the most likely to have English instances), then go through those to see if they meet my requirements, but that's ridiculous.
I am not a programmer, so please don't suggest I start my own instance or join a network that is not set up with a webpage and/or to accept a client, as I know nothing about these things other than that they run on Linux and I'm a Windows user. I just want something that works. Also, if there are any demonstration instances, please let me know. I heard of one where accounts only lasted five days, but it seems to be gone.
#accessibility #Akkoma #blind #Fediverse #Friendica #Glitchsoc #html #instances #NVDA #Mastodon #screenreaders #TweeseCake #Windows
@ianonymous3000@mastodon.social
@gabrielesvelto@fosstodon.org
#TIL about the #Windows PnPUtil command. It allows you to list and manipulate the drivers recorded in the driver store.
If you've got an old Windows installation chances are that there's a lot of old cruft in there and it might prevent some recent security features from working (such as memory integrity and virtualization based security). pnputil is the right tool to find those old drivers and get rid of them.
https://learn.microsoft.com/en-us/windows-hardware/drivers/devtest/pnputil
@gabrielesvelto@fosstodon.org
#TIL about the #Windows PnPUtil command. It allows you to list and manipulate the drivers recorded in the driver store.
If you've got an old Windows installation chances are that there's a lot of old cruft in there and it might prevent some recent security features from working (such as memory integrity and virtualization based security). pnputil is the right tool to find those old drivers and get rid of them.
https://learn.microsoft.com/en-us/windows-hardware/drivers/devtest/pnputil
@TheZeldaZone@mastodon.social
Is there some alternative to remote desktop on #windows 11 non-workplace edition? Doesn't seem like I'm getting past my problems with it
@dirk@gts.0x7be.net
I wonder if it is an issue with @elk or with @gotosocial that I cannot turn on push notification. Latest #GtS RC announced push notifications support and according to the documentation, #Elk also supports it.
Tried in latest #Firefox on #Linux and #Android and at work in #Chrome on #Windows.
Anyone any ideas?
@jon@vivaldi.net
If you are looking to move away from your Big Tech browser, maybe it is time to give Vivaldi a try?
A few things worth mentioning:
1. Workspaces and tab stacks.
2. Tab tiles.
3. Vivaldi Social, Mastodon server.
4. Encrypted sync.
5. Built in tracker and ad blocker.
6. No crypto built in.
7. No AI built in.
Vivaldi is made in Norway and Iceland and our servers are hosted in Iceland.
#Vivaldi #Browser #Windows #Macos #Linux #Android #iOS @Vivaldi
@weltraumpoet@nerdculture.de
Hallo,
ich suche zur Zeit einen #Job als #Softwareentwickler im Raum #Potsdam oder #Remote
Ich bin Diplom- #Informatik-er mit 12 Jahren Berufserfahrung.
Bisher arbeitete ich mit
#Cpp
#Csharp
#Javascript
#Typescript
#CSS
#HTML
#Java
#Python
#Angular & #Ionic
#MFC, #WindowsForms & #WPF
…
Auch #Docker, Gitlab-#Pipelines oder Azure DevOps sind mir nicht fremd. Ich bewegte mich bisher auf #Windows, #Linux, und auch ein wenig auf MacOS.
Irgendwo anzukommen und mich in einem konstruktiven Umfeld einzubringen, fände ich sehr schön.
Ich arbeite mich gerne in neue Felder ein, so würde mich unter Anderem die Embedded-Entwicklung interessieren, aber auch Sprachen wie Rust.
Ich spreche mich gern im Team ab oder lasse mich durch Kollegen in meiner Arbeit inspirieren, und bringe gerne meine Erfahrungen ein.
Auf Anfrage mit ein paar Informationen schicke ich gerne eine Bewerbung oder Ähnliches.
Vielleicht findet sich ja etwas über diese Plattform.
Vielen Dank.
@weltraumpoet@nerdculture.de
Hallo,
ich suche zur Zeit einen #Job als #Softwareentwickler im Raum #Potsdam oder #Remote
Ich bin Diplom- #Informatik-er mit 12 Jahren Berufserfahrung.
Bisher arbeitete ich mit
#Cpp
#Csharp
#Javascript
#Typescript
#CSS
#HTML
#Java
#Python
#Angular & #Ionic
#MFC, #WindowsForms & #WPF
…
Auch #Docker, Gitlab-#Pipelines oder Azure DevOps sind mir nicht fremd. Ich bewegte mich bisher auf #Windows, #Linux, und auch ein wenig auf MacOS.
Irgendwo anzukommen und mich in einem konstruktiven Umfeld einzubringen, fände ich sehr schön.
Ich arbeite mich gerne in neue Felder ein, so würde mich unter Anderem die Embedded-Entwicklung interessieren, aber auch Sprachen wie Rust.
Ich spreche mich gern im Team ab oder lasse mich durch Kollegen in meiner Arbeit inspirieren, und bringe gerne meine Erfahrungen ein.
Auf Anfrage mit ein paar Informationen schicke ich gerne eine Bewerbung oder Ähnliches.
Vielleicht findet sich ja etwas über diese Plattform.
Vielen Dank.
@jon@vivaldi.net
If you are looking to move away from your Big Tech browser, maybe it is time to give Vivaldi a try?
A few things worth mentioning:
1. Workspaces and tab stacks.
2. Tab tiles.
3. Vivaldi Social, Mastodon server.
4. Encrypted sync.
5. Built in tracker and ad blocker.
6. No crypto built in.
7. No AI built in.
Vivaldi is made in Norway and Iceland and our servers are hosted in Iceland.
#Vivaldi #Browser #Windows #Macos #Linux #Android #iOS @Vivaldi
@jon@vivaldi.net
If you are looking to move away from your Big Tech browser, maybe it is time to give Vivaldi a try?
A few things worth mentioning:
1. Workspaces and tab stacks.
2. Tab tiles.
3. Vivaldi Social, Mastodon server.
4. Encrypted sync.
5. Built in tracker and ad blocker.
6. No crypto built in.
7. No AI built in.
Vivaldi is made in Norway and Iceland and our servers are hosted in Iceland.
#Vivaldi #Browser #Windows #Macos #Linux #Android #iOS @Vivaldi
@jon@vivaldi.net
The Fediverse is unique.
I asked you whether you had switched from Big Tech. This is what you answered.
69% Switched a long time ago.
13% Just switched.
15% Are about to switch.
3% Do not want to switch and love Big Tech.
I guess this makes sense. You are here.
Now, please help you friends and family switch. For their sake, but also for all of us. The world is better with them joining us.
Have a wonderful day!
#fediverse #Mastodon #Windows #macos #Linux #Android #ios #Twitter #X #Facebook #BigTech #Politics
@jon@vivaldi.net
The Fediverse is unique.
I asked you whether you had switched from Big Tech. This is what you answered.
69% Switched a long time ago.
13% Just switched.
15% Are about to switch.
3% Do not want to switch and love Big Tech.
I guess this makes sense. You are here.
Now, please help you friends and family switch. For their sake, but also for all of us. The world is better with them joining us.
Have a wonderful day!
#fediverse #Mastodon #Windows #macos #Linux #Android #ios #Twitter #X #Facebook #BigTech #Politics
@kushal@toots.dgplug.org
@morphy76@mastodon.social
@jon@vivaldi.net
Ready to move away from Big Tech?
There are options. Choosing those options will require you to learn something new, but that is a small cost to pay to get away from Big Tech, IMHO
Here are my suggestions. Feel free to add your own:
1. Browser : Vivaldi. That one is a given for me, obviously.
2. Mail client : Vivaldi. You may wonder why you need a mail client, but besides the technical benefits, it makes it a lot easier to move between mail services or even use more than one.
3. Mail service : Fastmail. They have been around for a long time.
4. Office software : Libre Office.
5. Video conference : Whereby.
6. Desktop OS : Linux.
7. Social : Mastodon and the Fediverse in general.
As said, I am eager to hear what you are using to help me move away from Big Tech as well. Always looking for new things to try.
#Mastodon #fediverse #Linux #Windows #BigTech #Politics #Technology #Computers
@jon@vivaldi.net
Ready to move away from Big Tech?
There are options. Choosing those options will require you to learn something new, but that is a small cost to pay to get away from Big Tech, IMHO
Here are my suggestions. Feel free to add your own:
1. Browser : Vivaldi. That one is a given for me, obviously.
2. Mail client : Vivaldi. You may wonder why you need a mail client, but besides the technical benefits, it makes it a lot easier to move between mail services or even use more than one.
3. Mail service : Fastmail. They have been around for a long time.
4. Office software : Libre Office.
5. Video conference : Whereby.
6. Desktop OS : Linux.
7. Social : Mastodon and the Fediverse in general.
As said, I am eager to hear what you are using to help me move away from Big Tech as well. Always looking for new things to try.
#Mastodon #fediverse #Linux #Windows #BigTech #Politics #Technology #Computers
@jon@vivaldi.net
Big Tech is using the nationalism card. When the EU wants to regulate American companies and fines them when they break the rules, then they want to see that as attacking American companies.
What does it then mean when the DOJ in the US wants to regulate Big Tech and fines them for breaking the rules?
The reality is that we need regulation. Big Tech has gotten away with too much. They have grown too powerful. They are doing too much damage.
Choose smaller companies, when you can. Take a stand.
#Windows #Macos #Linux #fediverse #Mastodon #Regulation #Politics #Vivaldi
@Linux_Is_Best@misskey.de
You are going to have to trust me when I say, use Linux.
If you need 2nd PC for gaming. Fine.
But use your Linux PC for everything else. Banking, shopping, ect. If it important and can identify you, use Linux.
It does not matter what Linux distro. Newbies, I would suggest Ultramarine. But ultimately, anything is better than nothing. Do not make any excuses. Find away to use Linux.
#Linux #Windows #Twitter #X #Project2025 #ElonMusk #MarkZuckerberg #Musk #Zuckerberg #Trump #Facism #Nazi
@vermaden@bsd.cafe
New 𝗙𝗿𝗲𝗲𝗕𝗦𝗗 𝗔𝗹𝗼𝗻𝗴𝘀𝗶𝗱𝗲 𝗪𝗶𝗻𝗱𝗼𝘄𝘀 (FreeBSD Alongside Windows) article on https://vermaden.wordpress.com/ blog.
https://vermaden.wordpress.com/2025/02/02/freebsd-alongside-windows/
#verblog #boot #bootloader #desktop #dual #freebsd #install #laptop #windows #zfs
@Linux_Is_Best@misskey.de
You are going to have to trust me when I say, use Linux.
If you need 2nd PC for gaming. Fine.
But use your Linux PC for everything else. Banking, shopping, ect. If it important and can identify you, use Linux.
It does not matter what Linux distro. Newbies, I would suggest Ultramarine. But ultimately, anything is better than nothing. Do not make any excuses. Find away to use Linux.
#Linux #Windows #Twitter #X #Project2025 #ElonMusk #MarkZuckerberg #Musk #Zuckerberg #Trump #Facism #Nazi
@Linux_Is_Best@misskey.de
You are going to have to trust me when I say, use Linux.
If you need 2nd PC for gaming. Fine.
But use your Linux PC for everything else. Banking, shopping, ect. If it important and can identify you, use Linux.
It does not matter what Linux distro. Newbies, I would suggest Ultramarine. But ultimately, anything is better than nothing. Do not make any excuses. Find away to use Linux.
#Linux #Windows #Twitter #X #Project2025 #ElonMusk #MarkZuckerberg #Musk #Zuckerberg #Trump #Facism #Nazi
@qiita@rss-mstdn.studiofreesia.com
@qiita@rss-mstdn.studiofreesia.com
PowerShell 1行でフォルダ内のすべてのファイル名の先頭に更新日時を入れる
https://qiita.com/skomeda/items/92c324cb6a08de256deb?utm_campaign=popular_items&utm_medium=feed&utm_source=popular_items
@morphy76@mastodon.social
@forest_watch_impress@rss-mstdn.studiofreesia.com
Sysinternalsの拡大鏡・プレゼン支援ツール「ZoomIt」がオープンソースに/「PowerToys」への仲間入りに合わせて
https://forest.watch.impress.co.jp/docs/news/1659274.html
#forest_watch_impress #ZoomIt #システム_ファイル #デスクトップ #Windows #オフィス_ドキュメント #オフィス
@forest_watch_impress@rss-mstdn.studiofreesia.com
Sysinternalsの拡大鏡・プレゼン支援ツール「ZoomIt」がオープンソースに/「PowerToys」への仲間入りに合わせて
https://forest.watch.impress.co.jp/docs/news/1659274.html
#forest_watch_impress #ZoomIt #システム_ファイル #デスクトップ #Windows #オフィス_ドキュメント #オフィス
@forest_watch_impress@rss-mstdn.studiofreesia.com
「BitLocker」に情報漏えいの脆弱性 ~物理的アクセスで悪用可能に、盗難時のリスクに警戒を/修正パッチは1月のパッチチューズデーで提供済み
https://forest.watch.impress.co.jp/docs/news/1658748.html
@forest_watch_impress@rss-mstdn.studiofreesia.com
「BitLocker」に情報漏えいの脆弱性 ~物理的アクセスで悪用可能に、盗難時のリスクに警戒を/修正パッチは1月のパッチチューズデーで提供済み
https://forest.watch.impress.co.jp/docs/news/1658748.html
@marzlberger@mastodon.online
Edit: Ich habe Kontakt zu 4 wunderbaren Menschen, die mir helfen können. Danke an alle!
Ich suche eine helfende Hand für meine #IT Firma @feinste_netzwerke in #Erkrath #Dusseldorf als #Nebenjob für die Abendstunden. Aufgaben sind Updates per #SSH #VPN und #Ansible (im Aufbau) und Pflege der Dokumentation mit #GIT #Markdown . Syteme sind #OPNsense #Windows #FreeBSD #TrueNAS #Linux . Erweiterung des #Monitoring per #Zabbix
@adingbatponder@fosstodon.org
Install #Reticulum #Meshchat on #Windows and start browsing and #messaging on the #Nomadnetwork
https://www.youtube.com/watch?v=fmfKQ7aGx34
Related to using #rnodes (#lora nodes like used in #meshtastic ) as part of the nomad network
@sjvn@mastodon.social
Windows 10's demise nears, but Linux is forever https://www.theregister.com/2025/01/28/windows_10_demise_linux/ by @sjvn
Want to keep your old computer running? Can't stand #Windows 11? Then, it's time to give serious thought to switching to desktop #Linux.
@dandylover1@friendica.world
I tried to post this to the Friendica support forum, but it kept timing out when I entered my information. I am now attempting to subscribe to their e-mail list. However, I thought I would write this here so that those who know coding, etc. might be able to offer a solution, or at least, to pass this on to the developers.
I joined Friendica in October of 2024, when Facebook decided to shut down their Basic Mobile site (not app). I am totally blind, and their main page is a nightmare to use with a screen readre (NVDA in my case). I chose Friendica because of the huge character limit, the ability to edit and delete posts, local posting, extensive profiles with keywords, and the ability to connect with all sorts of accounts in the Fediverse. For the most part, I am enjoying my time here. However, I am noticing a lot of inaccessibility on the Friendica page. I am not a programmer, but I'm guessing this is at the core of the software and is not due to the instance I'm using (friendica.world). I am also guessing that the page is not written in HTML5 and does not follow WCAG guidelines, though I may be wrong about that. If not, I strongly urge the developers to review them and implement them if possible. If so, perhaps, some changes can still be made that would make this a more screen reader-friendly site. Note that I tried this with Firefox and Supermium (a direct fork of Chrome).
Mostly, I use TweeseCake to access the site, but there are some things I can't do with that client. All of the following refer to the site itself.
1A. I can't stress how frustrating editing posts is. It sometimes takes over ten minutes. The "edit" option is a link/menu, and it can only be found via another menu. Once I finally find and activate it, I hear the sound indicating that I have entered focus Mode. Usually, this means that I am in an edit box and can type. However, in this case, I am taken back to the main page, as if I never entered the option to edit my post. Using e to try to find an edit box doesn't help, as it just sends me to the replies to different comments. So I am forced to find the post, and start all over again. The only way I can do this successfully is to try to tab through the links/menu at the top of the page (when it works), then through other posts, until, finally, I am placed in an edit box where I can type.
1B. When I go to the Notifications" link, I have to tab to "Mark all System Notifications as Seen". This isn't even a regular link, as I can't copy and paste the text from it. Once I tab to and out of that, I can then read my notifications. But here is what I have to do if I want to see follow requests.
1. Try to get the notifications link to work, then click on it.
2. Tab to marking notifications.
3. Perform a search for the word follow.
4. Click on the link of the notification that someone wants to follow me. I open this in a new window, to try to keep the original one available.
5. Make my choice as to whether to approve that notification, then close that window.
6. Return to the main window. Only now, I am not where I left off. Instead, I am placed back at the beginning of the page and the Notifications menu is not open.
7. Repeat steps 1 through 3.
Ideally, I should be able to go to a normal notifications link, perform steps 3 through 5, then return back to the link, and perform steps 3 through 5 again, as many times as necessary, without having to repeat 1 through 3.
If you want to see a truly accessible site, try this link. I don't work for them, though I do have an account there.
Please, if any changes can be made, I urge you to do so. The site is otherwise a pleasure to use, but my frustration at not being able to easily perform such basic tasks is increasing.
#accessibility #blind #coding #Chrome #Developers #Dreamwidth #Facebook #fediverse #Firefox #Friendica #HTML #HTML5 #NVDA #ScreenReaders #TweeseCake #WCAG #Windows
@dandylover1@friendica.world
I tried to post this to the Friendica support forum, but it kept timing out when I entered my information. I am now attempting to subscribe to their e-mail list. However, I thought I would write this here so that those who know coding, etc. might be able to offer a solution, or at least, to pass this on to the developers.
I joined Friendica in October of 2024, when Facebook decided to shut down their Basic Mobile site (not app). I am totally blind, and their main page is a nightmare to use with a screen readre (NVDA in my case). I chose Friendica because of the huge character limit, the ability to edit and delete posts, local posting, extensive profiles with keywords, and the ability to connect with all sorts of accounts in the Fediverse. For the most part, I am enjoying my time here. However, I am noticing a lot of inaccessibility on the Friendica page. I am not a programmer, but I'm guessing this is at the core of the software and is not due to the instance I'm using (friendica.world). I am also guessing that the page is not written in HTML5 and does not follow WCAG guidelines, though I may be wrong about that. If not, I strongly urge the developers to review them and implement them if possible. If so, perhaps, some changes can still be made that would make this a more screen reader-friendly site. Note that I tried this with Firefox and Supermium (a direct fork of Chrome).
Mostly, I use TweeseCake to access the site, but there are some things I can't do with that client. All of the following refer to the site itself.
1A. I can't stress how frustrating editing posts is. It sometimes takes over ten minutes. The "edit" option is a link/menu, and it can only be found via another menu. Once I finally find and activate it, I hear the sound indicating that I have entered focus Mode. Usually, this means that I am in an edit box and can type. However, in this case, I am taken back to the main page, as if I never entered the option to edit my post. Using e to try to find an edit box doesn't help, as it just sends me to the replies to different comments. So I am forced to find the post, and start all over again. The only way I can do this successfully is to try to tab through the links/menu at the top of the page (when it works), then through other posts, until, finally, I am placed in an edit box where I can type.
1B. When I go to the Notifications" link, I have to tab to "Mark all System Notifications as Seen". This isn't even a regular link, as I can't copy and paste the text from it. Once I tab to and out of that, I can then read my notifications. But here is what I have to do if I want to see follow requests.
1. Try to get the notifications link to work, then click on it.
2. Tab to marking notifications.
3. Perform a search for the word follow.
4. Click on the link of the notification that someone wants to follow me. I open this in a new window, to try to keep the original one available.
5. Make my choice as to whether to approve that notification, then close that window.
6. Return to the main window. Only now, I am not where I left off. Instead, I am placed back at the beginning of the page and the Notifications menu is not open.
7. Repeat steps 1 through 3.
Ideally, I should be able to go to a normal notifications link, perform steps 3 through 5, then return back to the link, and perform steps 3 through 5 again, as many times as necessary, without having to repeat 1 through 3.
If you want to see a truly accessible site, try this link. I don't work for them, though I do have an account there.
Please, if any changes can be made, I urge you to do so. The site is otherwise a pleasure to use, but my frustration at not being able to easily perform such basic tasks is increasing.
#accessibility #blind #coding #Chrome #Developers #Dreamwidth #Facebook #fediverse #Firefox #Friendica #HTML #HTML5 #NVDA #ScreenReaders #TweeseCake #WCAG #Windows
@jon@vivaldi.net
@jon@vivaldi.net
@jon@vivaldi.net
@adingbatponder@fosstodon.org
This video shows how to host pages (text pages) via #Reticulum
https://www.youtube.com/watch?v=EU1NR19Bf-w
on the #nomadnet by installing the app on #ubuntu #linux (can be done for #windows and #macos presumably)
The pages thus made and made available in the #nomadnet could be accessed even by a #mesh of #lora #radio nodes #rnodes (simliar to #meshtastic )
The video shows use of the #micron markup language, to make the pages,
see the parser here https://rfnexus.github.io/micron-parser-js
@adingbatponder@fosstodon.org
#Nomadnet using #Reticulum #Meshchat
demo video on how to access the nomad net, in this case using internet, but applies for radio #rnodes also
uses #ubuntu #linux but applies for #windows #macos
https://youtu.be/ISYE6wcgCzw?si=Z_Ph57MPrVJQfUHl
#LXMF
@planetdnews@icosahedron.website
In 2025 let's (re)discover the #demoscene with us! 🤩
Follow! 🤝
Favorite! ⭐
Boost! 🔁
#creative #programming #creativecoding #realtime #3d #graphics #music #chiptune #synth #visuals #pixels #shaders #c64 #zxspectrum #atari #amiga #windows #linux #javascript #computerart #digitalart #pixelart #visualart #art
@BrahmaBelarusian@todon.eu
Am I missing anything or are all the existing operating systems for #smartphones in the #USA really limited to
1. #graphene
2. #calyx
3. #Lineage
4. #Pine/Fairphone
(Which are all open source & privacy respecting but are/work with phones that aren't anywhere near rugged standards.)
5. #windows
6. #android with google
7. #chrome
8. #ios /apple
9. #Mac
(Which are all virtual monopoly parts, government partners & thusly fascist entities, who love spying on their users, that have rugged smartphone options.)
?
As in my tech updates I'm still looking for an open source operating system that can work on a #rugged smartphone (cases available for the flimsily designed hardware don't count as the device itself being rugged).
#OperatingSystems #OpenSource #DisabilityAccessibility #Privacy
@dandylover1@friendica.world
Accessible Youtube Downloader Pro stopped working properly a few days ago. Can anyone recommend anything that works with NVDA? I would prefer a client, but I have also used various youtube to mp3 sites in the past. I would prefer something that lets me set the bitrate to 128kbps or that defaults to it.
#accessibility #blind #NVDA #programs #screenreaders #technology #Windows #Youtube
@jon@vivaldi.net
Big Tech is using the nationalism card. When the EU wants to regulate American companies and fines them when they break the rules, then they want to see that as attacking American companies.
What does it then mean when the DOJ in the US wants to regulate Big Tech and fines them for breaking the rules?
The reality is that we need regulation. Big Tech has gotten away with too much. They have grown too powerful. They are doing too much damage.
Choose smaller companies, when you can. Take a stand.
#Windows #Macos #Linux #fediverse #Mastodon #Regulation #Politics #Vivaldi
@jon@vivaldi.net
Big Tech is using the nationalism card. When the EU wants to regulate American companies and fines them when they break the rules, then they want to see that as attacking American companies.
What does it then mean when the DOJ in the US wants to regulate Big Tech and fines them for breaking the rules?
The reality is that we need regulation. Big Tech has gotten away with too much. They have grown too powerful. They are doing too much damage.
Choose smaller companies, when you can. Take a stand.
#Windows #Macos #Linux #fediverse #Mastodon #Regulation #Politics #Vivaldi
@jon@vivaldi.net
You are here. That makes you unique. You have made a good choice to take a step away from Big Tech. Now, get more people to join us. Help them with the initial process of setting things up.
If you have not done so already, download an alternative browser, such as Vivaldi as well. Consider whether you can move away from other Big Tech services. At Vivaldi, for example, we use Whereby for video conferences. Many of us have moved to Linux. Many of us use LibreOffice, instead of Microsoft office. There are options if you look for them. It is easy to go with Big Tech, but if you think the world would be better without them or if they had less power, know that you can make a difference.
#Vivaldi #fediverse #Mastodon #Windows #Microsoft #BigTech #Apple #Linux #Macos #Software #Regulation
@jon@vivaldi.net
Big Tech is using the nationalism card. When the EU wants to regulate American companies and fines them when they break the rules, then they want to see that as attacking American companies.
What does it then mean when the DOJ in the US wants to regulate Big Tech and fines them for breaking the rules?
The reality is that we need regulation. Big Tech has gotten away with too much. They have grown too powerful. They are doing too much damage.
Choose smaller companies, when you can. Take a stand.
#Windows #Macos #Linux #fediverse #Mastodon #Regulation #Politics #Vivaldi
@jon@vivaldi.net
You are here. That makes you unique. You have made a good choice to take a step away from Big Tech. Now, get more people to join us. Help them with the initial process of setting things up.
If you have not done so already, download an alternative browser, such as Vivaldi as well. Consider whether you can move away from other Big Tech services. At Vivaldi, for example, we use Whereby for video conferences. Many of us have moved to Linux. Many of us use LibreOffice, instead of Microsoft office. There are options if you look for them. It is easy to go with Big Tech, but if you think the world would be better without them or if they had less power, know that you can make a difference.
#Vivaldi #fediverse #Mastodon #Windows #Microsoft #BigTech #Apple #Linux #Macos #Software #Regulation
@marzlberger@mastodon.online
Edit: Ich habe Kontakt zu 4 wunderbaren Menschen, die mir helfen können. Danke an alle!
Ich suche eine helfende Hand für meine #IT Firma @feinste_netzwerke in #Erkrath #Dusseldorf als #Nebenjob für die Abendstunden. Aufgaben sind Updates per #SSH #VPN und #Ansible (im Aufbau) und Pflege der Dokumentation mit #GIT #Markdown . Syteme sind #OPNsense #Windows #FreeBSD #TrueNAS #Linux . Erweiterung des #Monitoring per #Zabbix
@forest_watch_impress@rss-mstdn.studiofreesia.com
Mozilla、WebExtensions ML APIを発表 ~AIタスクをオフライン実行するアドオンを手軽に開発/「Firefox」内蔵のAIランタイムを拡張機能開発者へ実験的に開放
https://forest.watch.impress.co.jp/docs/news/1657055.html
#forest_watch_impress #Firefox #インターネット #Webブラウザー #Windows #Mac #Linux
@forest_watch_impress@rss-mstdn.studiofreesia.com
Mozilla、WebExtensions ML APIを発表 ~AIタスクをオフライン実行するアドオンを手軽に開発/「Firefox」内蔵のAIランタイムを拡張機能開発者へ実験的に開放
https://forest.watch.impress.co.jp/docs/news/1657055.html
#forest_watch_impress #Firefox #インターネット #Webブラウザー #Windows #Mac #Linux
@forest_watch_impress@rss-mstdn.studiofreesia.com
「Windows 11 24H2」への更新でライセンスが外れるとの報告……問い合わせてみました/もし遭遇したときはサポートに問合せを【やじうまの杜】
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1656843.html
#forest_watch_impress #ライセンス #Windows_11 #バージョン_24H2 #システム_ファイル #システム #Windows
@forest_watch_impress@rss-mstdn.studiofreesia.com
「Windows 11 24H2」への更新でライセンスが外れるとの報告……問い合わせてみました/もし遭遇したときはサポートに問合せを【やじうまの杜】
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1656843.html
#forest_watch_impress #ライセンス #Windows_11 #バージョン_24H2 #システム_ファイル #システム #Windows
@marzlberger@mastodon.online
Edit: Ich habe Kontakt zu 4 wunderbaren Menschen, die mir helfen können. Danke an alle!
Ich suche eine helfende Hand für meine #IT Firma @feinste_netzwerke in #Erkrath #Dusseldorf als #Nebenjob für die Abendstunden. Aufgaben sind Updates per #SSH #VPN und #Ansible (im Aufbau) und Pflege der Dokumentation mit #GIT #Markdown . Syteme sind #OPNsense #Windows #FreeBSD #TrueNAS #Linux . Erweiterung des #Monitoring per #Zabbix
@fedora@fosstodon.org
As Windows 10 gets closer to no longer being supported, you may want to consider switching to Fedora to keep your computer running with regular security updates. Here's an easy guide on how to do that for yourself or someone else!
➡️ https://fedoramagazine.org/migration-guide-from-windows-to-fedora-linux/
@jon@vivaldi.net
We have a new release for you. Vivaldi 7.1 on Windows, Mac and Linux.
My favorite new feature is the weather widget. I have added 4 of them. Allows me to see weather and time in 4 different places.
Enjoy!
https://vivaldi.com/press/releases/vivaldi-7-1-a-sleek-start-to-2025/
#Windows #macos #Linux #Computer #Technology #browser #Vivaldi @Vivaldi
@jon@vivaldi.net
We have a new release for you. Vivaldi 7.1 on Windows, Mac and Linux.
My favorite new feature is the weather widget. I have added 4 of them. Allows me to see weather and time in 4 different places.
Enjoy!
https://vivaldi.com/press/releases/vivaldi-7-1-a-sleek-start-to-2025/
#Windows #macos #Linux #Computer #Technology #browser #Vivaldi @Vivaldi
@forest_watch_impress@rss-mstdn.studiofreesia.com
Microsoft、Windows 10への「Windows 11 バージョン 24H2」展開も本格化/ハードウェア要件を満たし、かつセーフガードが適用されていないデバイスが対象
https://forest.watch.impress.co.jp/docs/news/1656675.html
#forest_watch_impress #Windows_10 #Windows_11 #バージョン_24H2 #システム_ファイル #システム #Windows
@forest_watch_impress@rss-mstdn.studiofreesia.com
Microsoft、Windows 10への「Windows 11 バージョン 24H2」展開も本格化/ハードウェア要件を満たし、かつセーフガードが適用されていないデバイスが対象
https://forest.watch.impress.co.jp/docs/news/1656675.html
#forest_watch_impress #Windows_10 #Windows_11 #バージョン_24H2 #システム_ファイル #システム #Windows
@jon@vivaldi.net
Are you ready to start moving away from Big Tech?
First natural step is to download Vivaldi.
Head to https://vivaldi.com
#Vivaldi #Facebook #Meta #Microsoft #Google #Twitter #Mastodon #fediverse #Windows #macos #Linux #Android #iOS #Computer #Technology #software #browser #BigTech
@cliffwade@infosec.exchange
What operating systems do you use?
This includes on your PC/computer and mobile devices, or anywhere else for that matter. Select all that apply!
Please BOOST for maximum exposure to the #Fediverse
If your choice isn't listed, simply comment and let's discuss things!
#Poll #Polls #POTD #Question #Questions #QOTD #Windows #MacOS #Linux #Unix #ChromeOS #iOS #Android #Tech #Technology #AllThingsTech
Option | Voters |
---|---|
Windows | 83 (15%) |
Linux | 165 (29%) |
MacOS | 78 (14%) |
Unix | 14 (2%) |
ChromeOS | 13 (2%) |
iOS | 74 (13%) |
Android | 128 (23%) |
Other -> Comment below! | 12 (2%) |
@cliffwade@infosec.exchange
What operating systems do you use?
This includes on your PC/computer and mobile devices, or anywhere else for that matter. Select all that apply!
Please BOOST for maximum exposure to the #Fediverse
If your choice isn't listed, simply comment and let's discuss things!
#Poll #Polls #POTD #Question #Questions #QOTD #Windows #MacOS #Linux #Unix #ChromeOS #iOS #Android #Tech #Technology #AllThingsTech
Option | Voters |
---|---|
Windows | 83 (15%) |
Linux | 165 (29%) |
MacOS | 78 (14%) |
Unix | 14 (2%) |
ChromeOS | 13 (2%) |
iOS | 74 (13%) |
Android | 128 (23%) |
Other -> Comment below! | 12 (2%) |
@cliffwade@infosec.exchange
What operating systems do you use?
This includes on your PC/computer and mobile devices, or anywhere else for that matter. Select all that apply!
Please BOOST for maximum exposure to the #Fediverse
If your choice isn't listed, simply comment and let's discuss things!
#Poll #Polls #POTD #Question #Questions #QOTD #Windows #MacOS #Linux #Unix #ChromeOS #iOS #Android #Tech #Technology #AllThingsTech
Option | Voters |
---|---|
Windows | 83 (15%) |
Linux | 165 (29%) |
MacOS | 78 (14%) |
Unix | 14 (2%) |
ChromeOS | 13 (2%) |
iOS | 74 (13%) |
Android | 128 (23%) |
Other -> Comment below! | 12 (2%) |
@cliffwade@infosec.exchange
What operating systems do you use?
This includes on your PC/computer and mobile devices, or anywhere else for that matter. Select all that apply!
Please BOOST for maximum exposure to the #Fediverse
If your choice isn't listed, simply comment and let's discuss things!
#Poll #Polls #POTD #Question #Questions #QOTD #Windows #MacOS #Linux #Unix #ChromeOS #iOS #Android #Tech #Technology #AllThingsTech
Option | Voters |
---|---|
Windows | 83 (15%) |
Linux | 165 (29%) |
MacOS | 78 (14%) |
Unix | 14 (2%) |
ChromeOS | 13 (2%) |
iOS | 74 (13%) |
Android | 128 (23%) |
Other -> Comment below! | 12 (2%) |
@cliffwade@infosec.exchange
What operating systems do you use?
This includes on your PC/computer and mobile devices, or anywhere else for that matter. Select all that apply!
Please BOOST for maximum exposure to the #Fediverse
If your choice isn't listed, simply comment and let's discuss things!
#Poll #Polls #POTD #Question #Questions #QOTD #Windows #MacOS #Linux #Unix #ChromeOS #iOS #Android #Tech #Technology #AllThingsTech
Option | Voters |
---|---|
Windows | 83 (15%) |
Linux | 165 (29%) |
MacOS | 78 (14%) |
Unix | 14 (2%) |
ChromeOS | 13 (2%) |
iOS | 74 (13%) |
Android | 128 (23%) |
Other -> Comment below! | 12 (2%) |
@modulux@node.isonomia.net
Spent the last 6 hours trying to get a hello world equivalent gui window with a button on rust under windows.
This task which one might think is simple ended up taking literal hours and still hasn't been achieved because: the tutorials for gtk on windows and rust suggest putting msys2 bin directory on the path. This causes rust to fail to build correctly because it uses the wrong gcc and linkers.
Afterwards I managed it by using the appropriate environment variables.
But then I found out the dynamically linked libarries weren't found. I tried getting a way to copy them but it turned out to be too much work so I just moved the executable to the same dir.
Only to find out that gtk4 has no accessibility on Windows. Not bad accessibility, not accessibility that needs to be turned on. No. Accessibility. At all.
So then I decided to try Qt, which wants me to create an account to get an installer. Absolute no.
Got the 1.5gb sources and trying now to get an off-line installer out of it.
To get a fucking window with a button in it.
I don't think it's unreasonable for me to say this state of affairs is complete bullshit, and that most people with a normal level of motivation would have found plenty of opportunities to have given up. I still might.
(Not using NWG because tying the data to the GUI elements is non-trivial, it seems to require copying a lot and using twice the memory.)
@veronica@mastodon.online
Windows C++ devs:
My main project is a Python + Qt GUI application. Distributing that as-is on Linux is easy. On Windows, a little trickier.
What I do now is distribute it with Python embeddable and pure Python code. That's fine, but it makes the launching a little tricky.
I'm currently trying to create a trivial C++ exec that just launches the correct files via CreateProcess().
Does this sound like a good idea? Code linked below.
https://github.com/vkbo/novelWriter/tree/windows_launcher/launcher/windows
@veronica@mastodon.online
Windows C++ devs:
My main project is a Python + Qt GUI application. Distributing that as-is on Linux is easy. On Windows, a little trickier.
What I do now is distribute it with Python embeddable and pure Python code. That's fine, but it makes the launching a little tricky.
I'm currently trying to create a trivial C++ exec that just launches the correct files via CreateProcess().
Does this sound like a good idea? Code linked below.
https://github.com/vkbo/novelWriter/tree/windows_launcher/launcher/windows
@xoron@infosec.exchange
Selhosted P2P File Transfer & Messaging PWA
App: https://chat.positive-intentions.com
A p2p encrypted file transfer and messaging app. Here are some features below:
* #OpenSource
* #CrossPlatform
* #PWA
* #iOS, #Android, #Desktop (self compile)
* App store, Play store (coming soon)
* Desktop
* #Windows, #MacOS, #Linux (self compile)
* run `index.html` on any modern #browser
* #Decentralized
* #Secure
* #NoCookies
* #P2P #encrypted
* No registration
* No installing
* #Messaging
* Group Messaging (coming soon)
* Text Messaging
* #Multimedia Messaging
* #Screensharing (on desktop browsers)
* Offline Messaging (in #research phase)
* #FileTransfer
* #VideoCalls
* #DataOwnership
* #SelfHosted
* GitHub pages Hosting
* Local-Only storage
Check it out!
- App: https://chat.positive-intentions.com
- More info: https://positive-intentions.com/blog/introducing-decentralized-chat
- GitHub: https://github.com/positive-intentions/chat
@jon@vivaldi.net
During my time at Opera and now at Vivaldi, we have made a lot of browsers. I asked you which ones you had tried and you really had tried a lot of them:
There are likely quite a few you have not tried, though. Some of the others we made include:
- Opera on a Fax machine (really!).
- Opera on a fridge.
- Opera for airplane infotainment systems.
- Opera on Tivo (for menus).
- Opera on various TVs and DVD players (for menus mostly).
Now my focus is on Vivaldi and we will continue to add stuff you like. Enjoy!
@jon@vivaldi.net
During my time at Opera and now at Vivaldi, we have made a lot of browsers. I asked you which ones you had tried and you really had tried a lot of them:
There are likely quite a few you have not tried, though. Some of the others we made include:
- Opera on a Fax machine (really!).
- Opera on a fridge.
- Opera for airplane infotainment systems.
- Opera on Tivo (for menus).
- Opera on various TVs and DVD players (for menus mostly).
Now my focus is on Vivaldi and we will continue to add stuff you like. Enjoy!
@fell@ma.fellr.net
Has anyone ever had this issue with NVMe SSDs?
"A device which does not exist was specified."
Is this a hardware defect? The drive (PNY CS3140 1TB) is only about 5 weeks old. It seems to fix itself after a couple of reboots, but it's very annoying. Linux doesn't seem to have any issues with it yet.
#AskFedi #TechSupport #Windows #Windows10 #SSD #NVMe #Linux #Hardware
@jetsoft@hachyderm.io
Whats wrong with this picture!
I had to check this multiple times as I couldnt believe it first time.
This is Microsoft Windows 10 Calculator.
@sebsauvage@framapiaf.org
#Microsoft #Windows
Microsoft s'en fout de vos choix épisode 35724 : Il vous installera d'office la nouvelle version d'Outlook (celle qui collecte tous vos mots de passe de boîtes mail et qui tourne en réalité sur les serveurs de Microsoft, leur permettant de lire tous vos mails et de les partager avec 772 "partenaires" : https://sebsauvage.net/links/?ispozw).
Microsoft précise que vous ne pourrez pas vous opposer à l'installation.
Sympa, comme toujours.
@jetsoft@hachyderm.io
Whats wrong with this picture!
I had to check this multiple times as I couldnt believe it first time.
This is Microsoft Windows 10 Calculator.
@qiita@rss-mstdn.studiofreesia.com
@jon@vivaldi.net
Over the years, my teams have made a lot of different browsers on a lot of different devices. Which of the browsers below have you tried?
Which one is your favorite?
#Vivaldi #browser #Windows #Macos #Linux #Android #automotive #ios #Nintendo #WII #DS
Option | Voters |
---|---|
Vivaldi on computers | 55 (28%) |
Vivaldi Mobile | 40 (21%) |
Vivaldi Automotive | 1 (1%) |
Opera | 43 (22%) |
Opera Mini | 27 (14%) |
Wii browser | 20 (10%) |
DS browser | 9 (5%) |
@jon@vivaldi.net
Over the years, my teams have made a lot of different browsers on a lot of different devices. Which of the browsers below have you tried?
Which one is your favorite?
#Vivaldi #browser #Windows #Macos #Linux #Android #automotive #ios #Nintendo #WII #DS
Option | Voters |
---|---|
Vivaldi on computers | 55 (28%) |
Vivaldi Mobile | 40 (21%) |
Vivaldi Automotive | 1 (1%) |
Opera | 43 (22%) |
Opera Mini | 27 (14%) |
Wii browser | 20 (10%) |
DS browser | 9 (5%) |
@sebsauvage@framapiaf.org
#Microsoft #Windows
Microsoft s'en fout de vos choix épisode 35724 : Il vous installera d'office la nouvelle version d'Outlook (celle qui collecte tous vos mots de passe de boîtes mail et qui tourne en réalité sur les serveurs de Microsoft, leur permettant de lire tous vos mails et de les partager avec 772 "partenaires" : https://sebsauvage.net/links/?ispozw).
Microsoft précise que vous ne pourrez pas vous opposer à l'installation.
Sympa, comme toujours.
@solicitor@mastodon.social
@dansup #windowsxp computing era did not include modern day shenanigans such as forcing customers to log in using an online account, injecting advertisements to the start menu and other places with the #operatingsystem, #windows #recall and #copilot support out of the box which invade users' #privacy. Just switch to #linux to get your sanity back.
@stefano@bsd.cafe
UPDATE: I haven't seen Recall in action there. I was just asking the doctor how they'll deal with it.
This morning, I went to the doctor for a scheduled appointment. While she was looking at the results of blood tests from two years ago on the screen (and suggested repeating them for a follow-up), I realized she was using Windows 11. A detail came to mind. The doctor is extremely polite and friendly, so I asked her, "How do you handle the feature called Recall?" The doctor was taken aback and had no idea what I was talking about. I was about to drop the conversation, but she, being a serious professional, immediately called the technicians who manage their PCs to ask for clarification. They downplayed it, saying it's not an issue and that it's a feature "on all PCs, so we can't do anything about it." She started to express that she didn’t like it and wanted it deactivated. No luck: they won’t proceed because, according to them, even deactivating it is "a hack that could compromise future updates." She’s furious and will talk to her colleagues and the decision-makers. She wants secure systems because "there’s patient data involved."
In reality, patient data is stored on servers (which I haven't investigated), but everything that appears on the screen is, in my opinion, at risk.
I’ve offered to help them find a solution—because, if I'm right, all they need is LibreOffice and a browser. In that case, I’ll suggest one of the *BSD or Linux systems and do it for free.
I don’t want to make money off my doctor. I just want patient data to be (sufficiently) secure.
#IT #Recall #Windows #OwnYourData #Security #Privacy #RunBSD #Linux
@ml@mitexleo.one
Vivaldi rocks!
@c_th1@digitalcourage.social
Ich erinnere daran, der support für #Windows 10 endet im Oktober 2025.
anstatt das alle Menschen sich neue PCs kaufen,
macht Werbung für #Linux als #Betriebssystem.
zu Hause, auf der Arbeit, in der Nachbarschaft.
2025 wird ein #LinuxJahr
🤩🤩
UND AUF YOUTUBE
@metin@graphics.social · Reply to Metin Seven 🎨's post
In 1997, the Moon Child Windows game was released.
I co-designed the game, made all graphics, and wrote the cinematic animation scripts.
These are my pencil-drawn storyboards for the 3D intro animation.
Moon Child free downloads:
https://archive.org/details/MoonChildGame
#TeamHoi #game #gaming #GameDev #RetroGaming #RetroComputing #retro #windows #gamer #moon #drawing #design #artwork #illustration #DigitalArt #art #arts #artist #artists #GraphicDesign #CreativeToots #FediArt #MastoArt #ArtistsOnMastodon
@metin@graphics.social · Reply to Metin Seven 🎨's post
In 1997, the Moon Child Windows game was released.
I co-designed the game, made all graphics, and wrote the cinematic animation scripts.
These are my pencil-drawn storyboards for the 3D intro animation.
Moon Child free downloads:
https://archive.org/details/MoonChildGame
#TeamHoi #game #gaming #GameDev #RetroGaming #RetroComputing #retro #windows #gamer #moon #drawing #design #artwork #illustration #DigitalArt #art #arts #artist #artists #GraphicDesign #CreativeToots #FediArt #MastoArt #ArtistsOnMastodon
@ml@mitexleo.one
Vivaldi rocks!
@ml@mitexleo.one
Vivaldi rocks!
@fell@ma.fellr.net
This may be old news, but I just heard that there will be paid extended support of Windows 10 once it goes end of life this October, even for private customers.
Do you think people will do that or will they blindly switch to Windows 11?
Or even... switch to Linux? 🥺
@emanuelduss@infosec.exchange
Cool #38c3 talk about bypassing #BitLocker in TPM only mode. A downgrade attack allows you to exploit "bitpixie" again.
https://media.ccc.de/v/38c3-windows-bitlocker-screwed-without-a-screwdriver
PXE Boot → boot downgraded/vulnerable #Windows boot loader → decrypt disk using TPM → reboot → key stays in memory → boot Linux → read key
@Freemind@mastodon.online
@Freemind@mastodon.online
@usebottles@mastodon.online
Today is the day. Rust and libcosmic meets Bottles!
https://usebottles.com/posts/2024-12-27-rust-libcosmic-next/
@forest_watch_impress@rss-mstdn.studiofreesia.com
「Windows メール」のサポートがまもなく終了 ~12月31日まで、それ以降は送受信も不能に/いまから新しい「Outlook」アプリへの移行準備を
https://forest.watch.impress.co.jp/docs/news/1650690.html
#forest_watch_impress #メール #Outlook #People #Windows_メール #予定表 #インターネット #Windows #システム_ファイル #システム
@forest_watch_impress@rss-mstdn.studiofreesia.com
「Windows メール」のサポートがまもなく終了 ~12月31日まで、それ以降は送受信も不能に/いまから新しい「Outlook」アプリへの移行準備を
https://forest.watch.impress.co.jp/docs/news/1650690.html
#forest_watch_impress #メール #Outlook #People #Windows_メール #予定表 #インターネット #Windows #システム_ファイル #システム
@dekuve@mastodon.online
@bazkie@beige.party
Option | Voters |
---|---|
Windows | 0 (0%) |
Linux | 0 (0%) |
MacOS | 0 (0%) |
@teleclimber@social.tchncs.de
Nice. A video explaining how to use an old PC to create a basic home server... using #Windows instead of going down the prickly path of getting Linux on it first.
This is the way. Go to where the people are. And they are on Mac and Win.
@forest_watch_impress@rss-mstdn.studiofreesia.com
ゲーム配信は違法? ガイドラインの確認が唯一の解決方法 配信する方に筆者からお願いしたいたった1つのこと【石田賀津男の『酒の肴にPCゲーム』】
https://forest.watch.impress.co.jp/docs/serial/sspcgame/1648441.html
@andy47@aus.social
New job, locked down #Windows laptop. I have a new mission to track down useful software that can be installed without administrator access. Any suggestions welcome.
@forest_watch_impress@rss-mstdn.studiofreesia.com
「ChatGPT search」が無償ユーザーにも開放 ~「ChatGPT」がWeb検索エンジンに/「Google Chrome」用の拡張機能もあり
https://forest.watch.impress.co.jp/docs/news/1648111.html
#forest_watch_impress #OpenAI #ChatGPT #ChatGPT_search #genai #文章生成 #プログラミング #Windows
@jon@vivaldi.net
The Fediverse is unique.
My survey asked what your favorite search engine is.
51% said DuckDuckGo, 12% Startpage, 9% Ecosia and 4% Qwant. Only 6% said Google and 1% Bing. 17% said they preferred another search engine, with many mentioning Kagi and Mojeek.
This is quite different from what the market share out there is, which shows how unique you all are here in the Fediverse. You make your own choices and do not follow everyone else. Be proud.
#fediverse #Windows #Macos #Linux #Android #iOS #Computer #mobile #search #BigTech #Vivaldi @Vivaldi #Mastodon #Google #Microsoft #DuckDuckGo #StartPage #Ecosia #Bing #Qwant
@zacstraub@social.lol
New instance means a new #Introductions post. Here we go!
My day job is being a #Windows #Sysadmin. I do a lot of work in #PowerShell. I don't post about work stuff very much though so let's get into the fun stuff.
I play a TON of #DiscGolf.
I don't play enough #VideoGames for how much I enjoy them.
I live in the state of #Wisconsin.
I have opinions about flags #vexililology
I try to give everything #StarWars at least a fair shot
@impress@rss-mstdn.studiofreesia.com
Windows 11とiPhoneとの間でファイル共有が可能に
https://pc.watch.impress.co.jp/docs/news/1646976.html
@GerryT@mastodon.social · Reply to Mailtemi's post
Hi @MailtemiApp do you develop #GTK4 UI for Mailtemi, for #Linux or also #Windows? Is it already working or plans?
@forest_watch_impress@rss-mstdn.studiofreesia.com
注意! 国産Webブラウザー「Lunascape」の配信サイトがオンラインカジノへ誘導する詐欺サイトに/正しい配信サイトは現在「lunascape.org」【やじうまの杜】
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1646391.html
#forest_watch_impress #Lunascape #インターネット #Webブラウザー #Windows #セキュリティ #Webサービス #その他の話題 #トピック
@JakobFel@retro-gaiden.com
http://199x.chat/invite/A1Tqbzyv
(Image credit @Oregon_Pacifist)
@newstik@social.heise.de
Wow, Chicago has a 9% tax for using software as a service, #cloud services, etc. Now the Mayor wants to raise it to 11%.
I wonder how many residents report their #tax owing correctly? Do all the #Windows and #MSOffice subscribers in #Chicago pay their "Personal Property Lease Transaction Tax" properly?
@itsfoss@mastodon.social
@mihamarkic@mastodon.social
@knightlie@vivaldi.net
Anyone thinking of switching to #Linux as #Windows continues to circle the drain, I can't recommend @kde enough. I switched to #Kubuntu a few months ago and #Plasma is the most professional, consistent and stable Linux environment I've used. I've set up a monthly donation, despite not having bought software for over a decade, because it's actually worth paying for. 🙂
@jon@vivaldi.net
Mouse Gestures
One the many popular features in Vivaldi is mouse gestures. Have you tried them?
You need to enable mouse gestures in settings. They work using the mouse and through another setting, you make them work on the trackpad as well (using ALT).
Our goal is to adapt to your needs as a user of Vivaldi and this is part of it.
#Vivaldi @Vivaldi #browser #Windows #macos #Linux #Computer #Mouse
@jon@vivaldi.net
I have been competing with Microsoft for 30 years and one thing they have never done is to play fair. There is a reason why we are joining with others to get this right.
This is an article I wrote 3 years ago:
https://vivaldi.com/blog/microsoft-back-to-its-old-tricks-to-get-an-edge-on-the-competition/
#Microsoft #Edge #Windows #Competition #Computer #Linux #Vivaldi
@Stealthy@dragonscave.space
Okay, so um, opeend Widnows update and I see this under my driver updates:
UkrNIIRA - Sample - 2/2/2018 12:00:00 AM - 1.0.3 1 of 1.
Is it just me or does that look rather dodgey?
keep in mind that there is no brand, nor any hardware device with that name, according to google anyways....
Does anyone know waht this is?
#windows
@jon@vivaldi.net
More and more are running computers that have OS that are no longer being updated. Unfortunately some OS vendors are leaving some of us behind. There is an option, however. Install Linux! When you have done that, feel free to install Vivaldi as well!
@Vivaldi@vivaldi.net
Launching today, Vivaldi is a proud participant in the Browser Choice Alliance!
BCA is an informal alliance of browser makers who are all prevented from competing fairly on Windows PCs, because Microsoft self-preferences its own Edge browser.
From @jon:
“For a long time, Vivaldi has publicly called out Microsoft for its dirty tricks to undermine consumer choice. Independent browsers like us simply cannot compete fairly with Edge when it is so heavily preferenced in Windows. Regulators need to intervene urgently.”
https://vivaldi.com/blog/browser-choice-alliance-launch/
#Vivaldi #VivaldiBrowser #BrowserChoiceAlliance #Browser #Microsoft #Edge #Windows
@Sempf@infosec.exchange
Whoda thunk. The Bing wallpaper app is adware.
@forest_watch_impress@rss-mstdn.studiofreesia.com
「Bing Wallpaper」の動きがどうも怪しい ~海外のオンラインソフト作家が注意喚起/Microsoft公式の日替わりデスクトップ壁紙ツール【やじうまの杜】
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1642305.html
#forest_watch_impress #Windows_スポットライト #Bing_Wallpaper #システム_ファイル #デスクトップ #Windows #セキュリティ
@applech2@rss-mstdn.studiofreesia.com
Serif、Affinity V2ユニバーサルを含むDesigner、Photo、Publisher 2 for Mac&Win/iPadの全ライセンスとアドオンをを50%OFFで提供するブラックフライデーセール2024を開催。
https://applech2.com/archives/20241121-affinity-for-mac-win-ipad-black-friday.html
#applech2 #Affinityシリーズ #Affinity #Affinity_Designer #Affinity_Photo #Affinity_Publisher #iPad #Mac #Windows #アプリ #ブラックフライデーセール
@jon@vivaldi.net
My survey showed that most users are not happy with the browser that comes with their computers. If you are using one of those browsers, how about trying something new?
Does your browser have workspaces? Tab stacks? Tab tiles? Windows panel? Page capture? Sync? Custom themes with custom buttons? Web panels? Mouse gestures? Editable keyboard shortcuts?
Want to try a browser that has all of the above and more?
#Vivaldi #Browser #Windows #Macos #Linux #Chrome #Edge #Safari #Computers #Geek
@jon@vivaldi.net
Here are the results of my "What is your favorite browser?" survey, here on Mastodon. These are some very interesting results.
It is clear that the incumbents are not getting a lot of love. Edge gets 2% and Chrome gets 5%. These browsers are widely used, but not very popular, based on this survey.
Safari does a lot better at 16%, the same as Vivaldi. The enthusiasm level from those that use Vivaldi is high and plenty of people also mention Vivaldi as a secondary option.
Opera gets just 1%.
Firefox gets 60%, so clearly a strong showing here in the Fediverse, although many say they use Firefox only because they do not want to use a Chromium based browser.
The cool part is then that 13% say they prefer another browser. Plenty of smaller browsers getting a mention, which is nice.
If you notice that the total is higher than 100%, then that is because I allowed people to select more than one browser, although most did not.
If you are still using Chrome or Edge, maybe it is time to try something new? You have a choice!
#Vivaldi #browser #Firefox #Edge #Chrome #Safari #Opera #Windows #Linux #macos #iOS #Android
@hadsn@mstdn.nere9.help
#Windows 11って大丈夫なんですか?(真顔) #Windows11
"24H2問題、色々調べてるんですが複雑化しすぎてて難儀している状態です。ひとまずUAC関連とOBS関連を先に終わらせてどこかでtipsに出すのですいません、もう少しお待ちください..."
https://x.com/AVerMediaJapan/status/1858369733722288570
"ひとまず現段階では23H2に戻す、が正直なところです。デバイス由来のクラッシュ問題が解決していないので..."
https://x.com/AVerMediaJapan/status/1858370146857079012
【11月15日更新】「Windows 11 バージョン 24H2」の既知の問題まとめ - やじうまの杜 - 窓の杜 https://forest.watch.impress.co.jp/docs/serial/yajiuma/1628102.html
@hadsn@mstdn.nere9.help
#Windows XPのアクティベーションがフルクラックされたと聞いて笑っています。執念深いぞお前ら #WindowsXP
Windows XPの認証システムは完全に突破されていてオフラインでアクティベート可能 - GIGAZINE https://gigazine.net/news/20230519-windows-xp-activation/
@jon@vivaldi.net
What is your favorite browser? Feel free to share why.
#Vivaldi #browser #Firefox #Edge #Chrome #Safari #Opera #Windows #Linux #macos #iOS #Android
Option | Voters |
---|---|
Vivaldi | 37 (27%) |
Chrome | 2 (1%) |
Edge | 2 (1%) |
Safari | 6 (4%) |
Firefox | 66 (49%) |
Opera | 3 (2%) |
Other | 20 (15%) |
@astian@mastodon.social
Good things come to those who wait, that's why we announce the new update of Midori Browser for Android with many improvements, more stability and more speed.
https://astian.org/midori-en/releases/announcement-midori-for-android-is-updated/
#browser #privacy #android #midoribrowser #tech #technology #linux #windows
@Javangel@mastodon.social
#ru #russia #windows #kaspersky #canon Интересно, а эти старые диски касперского, 7 винды и драйвера для принтера Canon считаются раритетом? + документация.
@jon@vivaldi.net
Hello. This is my #Introduction.
I have been working with Web technologies since 1992. I have co-founded two browser companies, Opera Software and Vivaldi Technologies. I was CEO at Opera and I am CEO at Vivaldi.
I am a strong proponent of open standards. I believe in building feature rich products that can be adapted to the needs of users without collecting information about usage. I believe no company has the right to profile their users.
#Vivaldi #browser #Web #surveillance #SurveillanceCapitalism #Windows #macos #Linux #Android #ios
@jon@vivaldi.net
If you want to contribute to Vivaldi, you can do that in a number of ways:
1. Share with your friends. Help us grow.
2. Utilize the included search partners, with which we have deals. Startpage, DuckDuckGo, Qwant, Ecosia and Yahoo. We do not have deals with Microsoft and Google, unlike our competitors.
3. Use our included bookmarks and direct match partners.
4. Donate.
We are fighting with Big Tech and they want us gone. You can make a difference.
@jon@vivaldi.net
I am sad to see the layoffs at the Mozilla Foundation. Mozilla plays an important role on the Internet. I may not always agree with the choices they make, but they still play an important role.
#Mozilla #Firefox #Vivaldi #browser #Windows #Macos #Linux #Computer
https://techcrunch.com/2024/11/05/mozilla-foundation-lays-off-30-staff-drops-advocacy-division/
@hadsn@mstdn.nere9.help
これだから #Windows11 は! #Windows
"どうも Windows 11 の特定タイミングでサイレントに仕様が変わって、NAS からのファイルコピーが「Web から DL した」扱いのメタ属性が付与されるせいで更新日時とかがコピーされなくなっちゃってるらしい
確認したら確かにこんなん出てた、カス!!!!!
https://superuser.com/questions/1852"
https://x.com/izutorishima/status/1853655871257293035
@jon@vivaldi.net
Based on my little survey, 81% believe search has become worse with the introduction of AI.
Do the search engine makers care or will they continue in the same direction?
IMHO, if you want to show something as the definite answer to a question, it better be right and not some AI generated stuff.
The goal for search should be to have the best possible search results. Typically AI generated stuff is not that. You would like the original information and not a rehash.
@yazilim@mastodon.social
Freedom is priceless
#linux #ios #windows #ubuntu #debian #linuxmint #kalilinux #pardus #archlinux #technology #Monday #software #MondayMotivation #MondayMood
@happyborg@fosstodon.org
How do you feel about Windows #Recall when you realise how many computers and devices run Windows?
Your personal data captured when viewed on medical devices and PCs by Banks, Doctors, Hospitals, lawyers, Insurers, your Govt Representatives...
Everywhere, screens captured every few seconds and stored, and we all know the reason: to train AI and send your data back to anyone who will pay for it because #AI models reveal the data they are trained on.
😱
@unclemez@vivaldi.net · Reply to GENKI's post
@nibushibu I just regret why pixelmator isn't available on #Windows but no worries we have the excellent @affinitybyserif and @coreldraw
@leofebey@aus.social
I had to use Windows 11 recently but if you have to I recommend this tool - Windows 11 Debloat, it includes many privacy features including removing the creepy Recall feature #windows #windows11 https://github.com/Raphire/Win11Debloat
@jon@vivaldi.net
Microsoft really does not want you to try another browser. I wonder why?
Time to defy Microsoft and install Vivaldi!
@jon@vivaldi.net
@jon@vivaldi.net
@ciaranmak@mastodon.ie
Microsoft enabled the notorious "Recall" with the last update (for Windows 11 only). It's part of the OS and can't be uninstalled. This software stores metadata about EVERYTHING that appears on your screen, including passwords/urls/images/videos/any messages you send or emails etc
To disable this gross spyware, run the following as admin on the command line:
Dism /Online /Disable-Feature
/Featurename:Recall
@forest_watch_impress@rss-mstdn.studiofreesia.com
Arm版「DaVinci Resolve Studio」のAI処理をNPUで ~「Magic Mask」が最大4.7倍高速化!/高機能な動画編集ツールがCopilot+ PCで快適動作【使ってわかるCopilot+ PC】
https://forest.watch.impress.co.jp/docs/serial/usecopilotpc/1631495.html
#forest_watch_impress #Copilot_PC #エンタメ #Windows #その他の話題 #コラム
@tom@tomkahe.com
Ah, yes. thank you Windows
@jkntech@mastodon.social
Thanks to artificial barriers by Microsoft, companies and consumers are expected to dump millions of perfectly usable computers.
Its time to step away from the Microsoft monopoly and take back ownership of your property! Any #Windows computer/laptop up to 12 years old is supported by modern #Linux operating systems and applications. Enjoy the latest features and security updates by the global Linux community for many years to come.
#ewaste #opensource #reuse #forcedobsolescence
@jon@vivaldi.net
@governa@fosstodon.org
How to encrypt a file on #Linux, #macOS, and #Windows - and why
https://www.zdnet.com/article/how-to-encrypt-a-file-on-linux-macos-and-windows-and-why/
@natejung@im-in.space
New Instance, New #Introduction post. Been awhile since I wrote one of these and the last one I had posted on this instance was pretty outdated, so here we go.
My name is Nathan. I (what feels like) recently became a dad (she is already 2 years old! 🤯). I enjoy playing games, whether they be video, tabletop, virtual, or otherwise. Some of my favorite genres include RPGs, 3rd person action games, deck builders, strategy, and more. As for the video games, I have been playing on #PC / #Steam Deck, #PS5, some titles on #Switch.
I work in IT, but also help out with graphic design work for the company (trying to get out of this part of the job and get back to more of the IT part of it).
I like tech. I use #Android #iOS #Windows #Linux and #MacOS.
I am a #T1D, that is I have #Type1Diabetes. It sucks and I do not recommend it. Luckily there is a bunch of tech out there that helps me manage it nowadays.
So yeah, a combination of all that stuff and more is what you can expect from my posts.
@jon@vivaldi.net
I asked you what OS you are using on a daily basis. The survey allowed you to select more than one OS. These are the results:
There really are a lot of Linux users here. Happy to see that. Windows and Mac are similar in size. Android is larger than iOS, but not by a much in this survey.
A few are using ChromeOS, but there is an impressive 3% using other OS on a daily basis!
@jon@vivaldi.net
At @Vivaldi , we make browsers. Powerful browsers, with more functionality than others, but still browsers.
What we are not is:
1. An OS company.
2. A search company.
3. An ad company.
4. An AI company.
None of our major competitors can really say the same. We focus on doing one thing really well.
If you like that, give us a try! If you are already with us, please share with your friends!
@jon@vivaldi.net
I know a lot of you use @Vivaldi and would like to help us grow. Here are a few things you can do to help us. Thank you for your support!
1. Recommend @Vivaldi to your friends. Help them install and setup. Show them the features you think they would most like.
2. Follow @Vivaldi here and on other social networks you frequent.
3. Boost articles by @Vivaldi which have a broader appeal here and on other social networks.
4. Invite your friends to join Vivaldi Social. Support the Fediverse.
5. Donate. Many of you asked for it and now you can.
Have a great day!
#Vivaldi #Windows #Mac #Linux #Android #iOS #fediverse #Mastodon
@LGUG2Z@hachyderm.io
@Shadowstreik@fe.disroot.org
@astian@mastodon.social
Pedimos ayuda a la comunidad para seguir apoyando los principales proyectos Midori Browser, AstianGO, Cloud y la implementación de nuestro servicio VPN, pedimos el apoyo de donaciones, siendo esta la primera vez que solicitamos directamente esta ayuda.
Puedes ayudar con una donación en este enlace
https://astian.org/es/navegador-midori/contribuye-al-navegador-midori/
Por favor, su ayuda es importante.
@astian@mastodon.social
We ask the community for help to continue supporting the main projects Midori Browser, AstianGO, Cloud and the implementation of our VPN service, we ask for the support of donations, this being the first time we have directly asked for this help.
You can help with a donation at this link
https://astian.org/midori-browser/donate-to-midori/
Please your help is important.
@antijingoist@hackers.town
Desktop Kittens have come leaping into Windows, running rampant on your computer, distracting you from all the UI stuff in Windows you've come to hate.
Advertisements got you down? Start menu annoyingly in the middle of the screen? CoPilot creepily tracking everything you do? Who cares!? There's kitties on your desktop, playing and having fun.
Use the extra performance features of your AI enhanced Windows ARM laptops for kitties instead of glorified random word generators. They are much more adorable than suggestions to eat poison mushrooms or mismanaging your private data.
Let me know if there's some show stopping bugs or weirdness.
https://antijingoist.itch.io/desktop-kittens/devlog/798854/desktop-kitties-pouncing-onto-windows
@kravietz@agora.echelon.pl
No, this is no a new CAPTCHA, this is a new malware vector which tricks users to open #Windows command line and paste a command to download some harmful stuff.
Just reported by Mohamed Aruham on Twitter.
@jon@vivaldi.net
Most of our competitors are all in on AI. We are not.
https://www.theregister.com/2024/09/10/web_browsers_ai_holdout_vivaldi/
#AI #Vivaldi #browser #Windows #Mac #Linux #SurveillanceCapitalism
@overanalytcl@hachyderm.io
Hello! I am not new to Fedi, I used to be on emacs.ch under @stalecu.
My name is Stefan, 22, he/him.
My main interests are: #math, #linguistics (I am not a prescriptivist), #embedded_systems, #linux and #windows, anything related to Niklaus Wirth (mostly #pascal #delphi and #oberon), #tcltk, #cplusplus, #csharp, #perl, #lisp and functional languages, #powershell and #bash, among others, programming language design and compilers and many other things.
Nice to see you here!
@aaronk6@mastodon.social
@derSammler@oldbytes.space · Reply to derSammler's post
And now for the last item and the highlight of the whole lot:
#Microsoft #Windows/286 v2.11 Retail
Box is in very nice condition, contents are like new (the 5.25" disk set e.g. is still sealed).
Funny thing - this is the ONLY boxed retail copy of any version of Windows I own so far. All others I own are either OEM or newer versions in a DVD keep case. 😅
@derSammler@oldbytes.space · Reply to derSammler's post
Second last one:
Another OEM copy for #Zenith data systems, this time #Microsoft #Windows 2.11
Sadly, that ons is in poor condition, but at least it's complete.
@mjf_pro@hachyderm.io
#Introductions I’m a Cloud Solutions Architect for a US top-50 #law firm, 25+ years experience in all things #windows, #Microsoft365, #azure, and #powershell. I’m a #space, #science - #technology, & #weather nerd. #Audiophile with a taste in genres ranging from #classicrock to punk to #acoustic #folk and sea shanties. Occasional #political ramblings (center-left Democrat). Arrived here in the Nov 2022 TwExodus. Living in #Dallas TX, married, a daughter in high school. Glad to meet y’all!
@sassdawe@infosec.exchange
You use #Microsoft #Intune to disable #Windows #Copilot.
You feel smart 😎
But than Microsoft decided to DEPRECATE the policy.
What the...?!
@emilyyoung@tech.lgbt
Greetings, Fediverse! Let me make an #introduction - I'm Emily, a recently out #trans girl, #lgbtq advocate, and giant #tech nerd.
This is a personal account, but since 2017 I've been working at #linustechtips as a writer and occasional host. I'm most well-known for #Linux and #retrogaming / #retrocomputing content, but my interests can be very broad - Especially with stuff I know nothing about!
Tech can be fun and tech can be a tool, and to that end, I advocate using (and breaking) every platform and learning about the days of computers past. Between work and home, I currently daily drive #Linux and #Windows in roughly equal measure.
I was a #sega kid, so that probably had something to do with that philosophy... And my fondness for FM synth.
@forest_watch_impress@rss-mstdn.studiofreesia.com
「Copilot+ PC」でも快適 ~Windows on Armに対応した「Vivaldi 6.9」がリリース/タブ操作やダウンロードファイルの扱いも改善
https://forest.watch.impress.co.jp/docs/news/1619842.html
#forest_watch_impress #Vivaldi #インターネット #Webブラウザー #Windows #Mac #Linux
@forest_watch_impress@rss-mstdn.studiofreesia.com
Rust製コードエディター「Zed」にもAI、Anthropic社「Claude 3.5」とタッグを組む/初期リリースの間は無償提供
https://forest.watch.impress.co.jp/docs/news/1617758.html
#forest_watch_impress #Zed #オフィス_ドキュメント #テキストエディター #Windows #Mac #Linux #プログラミング
@dalstroka@snabelen.no
@vitex@f.cz
#Juchů! Bude čerstvý maso pro tučňáka a čtverzubce :)
#Windows 11 dává sbohem starším sestavám, #Microsoft zablokoval obezličky
https://diit.cz/clanek/windows-11-dava-sbohem-starsim-sestavam-microsoft-zablokoval-obezlicky
@genebean@fosstodon.org
Updated #introduction time! I'm a geek dev'ing on the ops at LTN Global and used to do the same at @puppet. I'm a #Christian & an #EagleScout. I support the 2nd Amendment here in the US and #BlackLivesMatter.
I have been using #Linux since I leaned #Gentoo in 2004. I've done end user desktop support, #Windows & Active Directory administration, Linux administration, networking, firewalling, a touch of programming, and a boat load of scripting in bash, #PowerShell, and #Python.
@thelinuxEXP@mastodon.social
I initially wanted to try and find various, even convoluted, ways of running the most used #Windows apps on #linux
Since none of them cooperated, no matter the technique, app, or version of Wine I tried, I decided instead to make a video highlighting how Wine definitely isn't a solution for anything other than games:
@Hopfi@social.tchncs.de
Ich habe heute das erste mal Linux installiert.Habe mich lange nicht getraut, warum auch immer.🤷♂️
Ich fasse es mal kurz zusammen:
-USB stick vorbereiten,kann jeder der Windows bedienen kann
-Installation durchlaufen lassen,kann jeder der Windo....
-fertig, der Rechner ist einsatzbereit
-Linux Mint kann jeder bedienen der win...
-jetzt nur noch diverse Programme einrichten
#wiegeilistdasdenn
#linuxmint
Es ist kein #hexenwerk
Weg von #windows
Anleitung z.B. hier: https://www.youtube.com/watch?v=fIqbo1fGV-E
@krosylight@fosstodon.org · Reply to Kagami is they/them 🏳️⚧️'s post
@skinnylatte@hachyderm.io
Does anyone have any experience making a bootable win10 installer on a usb stick? I used Ventoy (on Linux) to load a win10 iso (I have a license), but on a Thinkpad t510 with a 500GB SSD, the installer keeps saying ‘cannot install on the hard drive’. I used diskpart to partition my ssd as MBR, NTFS in a single volume. Windows setup can see it, but won’t let me install on it
@Judeau@mas.to
[1/6]
At the beginning of this year I set out with a goal to restore FULL #PocketPC compatibility on a current #Windows 10 #PC.
We outlined how to both establish a connection AND Sync here… https://mas.to/@Judeau/112678025590638375
We looked at different keyboards and how to transfer Word files while preserving formatting here… https://mas.to/@Judeau/112689361744308651
The last piece of the puzzle was restoring wireless #IrDA connectivity.
Spoiler alert: I got it!
@majorlinux@toot.majorshouse.com
@ellane@pkm.social
My notes are #PlainText first, #Markdown second. They're highly portable between platforms, apps, and devices. #macos and #ios are my weapons of choice, but they'd look and work the same on #android and #Windows.
They aren't #Obsidian notes, or #Logseq / #iaWriter / #tangent / #TextEdit / #Nota / #AnyType / #Taio / #TaskPaper / #vsCode notes, though I can use any of those apps as a lens to view and work with them.
They're wild, and free. This is their theme song:
https://www.youtube.com/watch?v=iYFk_EsZ_D8
@holm@social.saarland
hat jemand hier skill und bock, #computerkram in der mehlfabrik zu machen?
#windows clients, #linux server,
linux clients, #webserver, netzwerkkram, viel #mikrotik, ein wenig anderes zeug, ganz viel #proxmox und #zfs, ein wenig #docker (-compose), swarm, opnsense und anderer kram. manches 20 jahre alt, anderes #zukunftstechnologie von übermorgen.
details entstehen gerade, aber prinzipielles interesse gerne per an mich bekunden. Danke.
@madeindex@mastodon.social
As a thank you to #Microsoft for #Recall¹ & the circulating blue screen of death² - some #Opensource alternatives:
✔ #Windows > #Linux https://en.wikipedia.org/wiki/List_of_Linux_distributions
✔ #Bing > #searxng https://mastodon.social/@madeindex/112491540467087217
✔ #Edge > #Tor / #Mullvadbrowser
✔ #MicrosoftGaming #Activision #Blizzard > https://en.wikipedia.org/wiki/List_of_open-source_video_games
✔ #Chatgpt 🤖 > https://itsfoss.com/open-source-chatgpt-alternatives/
⏬
Let's hope MS has to RECALL their 🗑️ products & let's #CROWDSTRIKE them 😋
#Design CC0 https://madeindex.org
1/2
@jfmblinux@mastodon.jfmblinux.fr
Who loves a global outage? Phishers, fraudsters and all manner of creeps 🤔
Criminals didn't waste any time taking advantage of the CrowdStrike-Microsoft chaos 🤣
#Crowdstrike #Microsoft #Windows
https://www.theregister.com/2024/07/19/cyber_criminals_quickly_exploit_crowdstrike/
@tugatech@masto.pt
CrowdStrike já tinha causado problemas em Debian e Rocky Linux
🔗 https://tugatech.com.pt/t61445-crowdstrike-ja-tinha-causado-problemas-em-debian-e-rocky-linux
...
#linux #partido #segurança #software #windows #noticias #tech #tugatech
@thelinuxEXP@mastodon.social
New video: your usual #Linux and #OpenSource News recap, where we've seen #Windows collapse all around the world, and crash to a blue screen of death due to a third party app, we have #SUSE asking #OpenSUSE to rebrand and change their logo, and a lot more:
@timbray@cosocial.ca
This demonstrates a thing that I’m sure serious security pros (and their adversaries) have long known: These Windows security products are a highly attractive attack surface for serious professional Bad Guys. They run in God mode and are typically purchased by IT-management types via the “enterprise software sales” process. (Think: golf.)
I wonder how many of them are already deeply compromised? I am certain that the number is not zero.
#Crowdstrike #Windows #infosec
@bbbbbr@mastodon.gamedev.place
A quick little joke #GameBoy color rom showing a few #Windows BSODs in honor of our worldwide bubble-gum-and-duct-tape computing infrastructure.
@inkican@mastodon.social · Reply to Inkican's post
Wildest Window Friday ever. #WindowFriday #crowdstrike #bsod #CloudStrike #outage #hugops #microsoft #windows
@inkican@mastodon.social
Dang it, you're supposed to cosplay Y2K on Throwback Thursday!
#crowdstrike #bsod #CloudStrike #outage #hugops #microsoft #windows
@ainmosni@berlin.social
Hey fellow #Linux users, despite the #CrowdStrike problem only affecting #Windows, this is not a windows problem.
This is an "automatic update that got forced onto everyone with insufficient testing while also having way too many permissions" problem.
If you think big corps wouldn't run something similar on Linux, I have a an NFT of a bridge to sell you.
@welrbraga@mastodon.social
Se não me engano, até o #Windows ME, que foi o último que tive contato de fato, o termo de uso constava a informação de que este sistema não deveria ser usado para missões críticas.
A #Microsoft tirou este aviso, ou o pessoal parou de ler ?
Como eu digo. Windows é sistema operacional de videogame 🕹️ 🎮 não para trabalho sério.
@welrbraga@mastodon.social
Depois de mais de vinte anos usando 🐧 #Linux integralmente em casa e no trabalho, me deparo comigo mesmo procurando soluções de #antivírus para instalar no meu 🖥️ #Windows. 😩
@Linuxkumpel@social.tchncs.de
@ajn142@infosec.exchange
So, on that note, #introduction / #introductions time. Repurposing the one I wrote for mastodon.social with some minor edits. I’m not usually a hashtag type of person, but I’m told that they make it easier to connect with folks on other instances with common interests.
Hi, I’m Andrew, and I’m *bad* at #smalltalk. I like #dadjokes #badjokes and #puns. Fortunate enough to be from #Texas but not terribly happy with where my state is headed. #Parent to two difficult but wonderful toddlers.
#Computers and #tech are a both a hobby and a career, I work in #IT doing desktop support but am working towards #sysadmin / #infosec . Passably fluent with #windows #macos and #ubuntu, and a little bit of a lot of things running in my #homelab . I do a good bit of #3dprinting either toys for my kids or toys for me. Back burner hobbies include #hamradio (Amateur Extra that I need to retest for soon), #fishing #hunting and other #outdoors activities.
@andersgo@oslo.town
Calling the Microsoft activation phone line was like having a conversation with Officer Crabtree albeit with an artificial voice in Norwegian. If this is what they manage to squeeze out of their precious AI models, I'm out. I really had to struggle to understand what this stoopid tin can said. #Microsoft #AI #CustomerSupport #Windows #AlloAllo
@Riduidel@framapiaf.org
Une interface alternative à Git, écrite en javaFX http://gitgui.org/ #git #java #javafx #opensource #application #windows #macosx #linux
@nielsk@mastodon.social
@SleepyCatten@cultofshiv.wtf
Okay. We're gonna poke the bear.
We're currently on Windows 10 on all our machines. All our family members use it too. We're not going to upgrade to Windows 11.
We're sure there will be a Windows 12 at some point, with built-in stuff that we don't want and can't easily remove until someone hacks it out.
So, if we were to attempt to make a move to a Linux distro where:
... where the heck would we even start?
#Windows #Windows10 #Windows11 #linux #LinuxDistros
Edit: Thank you so far for all the helpful suggestions and replies! We seriously do appreciate this, as it gives us somewhere to start gradually researching over time!
@heisec@social.heise.de
Ab sofort gibt es Desinfec’t 2024 auf einem USB-Stick zum Kauf
Mit dem c’t-Sicherheitstool entfernen Sie Windows-Trojaner und greifen auf nicht mehr startenden PCs auf Ihre Daten zu.
@paul@notnull.space
PSA: I may disagree with you on one thing, but that does not mean I won't agree with you on another
Please calm down, we can still be friends.
xx
#Rust #Wayland #Docker #Ubuntu #JavaScript #Windows #MacOS #footTerminal #KDE #Gnome #Sway #XFS #NotPuttingAltTextOnImages #ExcessiveUseOfHashTags #CallingHashtagsHashtags
@Stealthy@dragonscave.space
So, you probably know that I like the idea of Linux, but is it just me being a fanboy?
No, not at all.
As time progresses, I am constantly seeing Microsoft doing things that have never been and never will be user focused.
So, I'll shut up and explain the latest dilemmas, first and foremost, devices with unsupported hardware won't be able to install 11 anymore, even through unconventional methods.
Secondly, Microsoft is now using aggressive tactics to block customisation software, fancy that old start menu or task manager? tough! Not only will ms block the app and currently you'll get smacked with a black screen. This is all in the latest Windows insider, which will come out as 24h2.
So no, I am not a #Linux fanboy, the accessibility cannot be compared to #windows I am left with a hard question.
Do I compromise control for less accessibility or more accessibility for no control.
I invite everyone who reads this to consider that question. The other question I have, how much will it take before people get tired of ms? Where do people actually draw the line and stop putting it down to Microsoft being corporates?
@openandroidinstaller@fosstodon.org
🐣📱 This Easter, hatch something new with your device! 🐰✨ Dive into the beta release of #OpenAndroidInstaller v0.5.3-beta and give your phone a fresh start.
Now supporting a wider range of devices including #Xiaomi Mi A2, Redmi Note 10 Pro, and #Samsung Galaxy S5 mini. 🌼🔧
🚀 Experience the latest with #Python 3.11 and #Android Platform Tools 35.0.1. Available for #Linux, #MacOS, and #Windows! 🐣
https://github.com/openandroidinstaller-dev/openandroidinstaller/releases/tag/v0.5.3-beta
@jlsksr@mastodon.online
I really love late-90s productivity software aesthetics and usability. This is a screenshot of XFCE on Debian, using themes and tweaks from the Chicago95 package - "a rendition of everyone's favorite 1995 Microsoft operating system for Linux." Here's how it's done: https://jlsksr.de/docs/linux-chicago-style/
#linux #debian #xfce #win9x #windows9x #windows #retrocomputing #ScreenshotSaturday
@pasimako@mastodon.social
Microsoft Windows 95 Video Guide with Jennifer Aniston & Matthew Perry
@77nn@livellosegreto.it
10 applicazioni #FOSS che non potete perdere per la vostra produttività su #windows
https://www.77nn.it/2023/09/17/applicazioni-alternative-opensource.html
Ringrazio @ErPatata
per avermi dato lo stimolo a scrivere questo post, che "copierò" anche sui LinkedIn, giusto per fare un dispetto! 🤣
@MarSolRivas@mastodon.online
@cxiao@infosec.exchange
In the new Rust Windows kernel GDI code, there is a new global allocator registered named gdi_alloc::Win32Allocator
. It calls Win32AllocPool
with a fun new pool tag name, "Rust"!
#rust #rustlang #windows #microsoft #reversing #reverseengineering
@cxiao@infosec.exchange
For the new Windows kernel Rust GDI stuff that is all the rage now (win32kbase_rs.sys, win32kfull_rs.sys): here are the links to download copies of those binaries, from the Microsoft Symbol Server:
https://msdl.microsoft.com/download/symbols/win32kbase_rs.sys/272C4A031b000/win32kbase_rs.sys
https://msdl.microsoft.com/download/symbols/win32kfull_rs.sys/8264C482a000/win32kfull_rs.sys
These should be the versions that are in Windows 11 Insider Preview 25357.1 (zn_release) amd64 . The SHA-256 hashes are:
87ee0235caf2c97384581e74e525756794fa91b666eaacc955fc7859f540430d win32kbase_rs.sys
2efb9ea4032b3dfe7bf7698bd35e3ea3817d52f4d9a063b966f408e196957208 win32kfull_rs.sys
(I first extracted these files myself from the update package for build 25357.1, then generated the symbol server download URLs from the PE metadata in the files)
Of course, in addition to the actual executables, symbols are available from the symbol server as well (see screenshot).
@analog_feelings already did some reversing of win32kbase_rs.sys several weeks ago, here: https://tech.lgbt/@analog_feelings/110232321999960466 🤘
Now, time for me to go figure out how to actually reverse Rust 🦀
#rust #rustlang #windows #reversing #reverseengineering #microsoft
@Bluedepth@mastodon.social
I thought that I could put in hashtags all the things that I do professionally in case anyone had questions about any of this stuff. so here goes...
#infotech #helpdesk #windows #macosx #linux #velocloud #meraki
#cisco #HP #Lenovo #Office365 #Azure #microsoft #ucaas
I suppose this will be the kind of Toot that I end up adding to, so I'll pin it.
@bluszcz@mastodon.art
How to stream your #bitwig or other #daw while using #windows - get #opensource #jack :) https://www.youtube.com/watch?v=iVmhRVCs1DI
@xtof@shelter.moe
I wrote a detailed article about the inner side and the engineering of Windows 3.x.
Most people affirm it is only a subpar GUI on top of DOS, but it is much more than that! Win3.11 on a 386 is not as far from #Win95 as we could imagine.
@log4jmc@infosec.exchange
I've been enjoying infosec.exchange for the last month or so but have been putting off an #Introduction because I'm awkward and anxious (#privacy am I right?). I feel more comfortable talking about my cat than myself or my work on social media, so you'll probably mostly see him amongst my boosts and replies. He's a little hacker who tricks me into FaceID unlocking my iPad for him or hides my pouch of physical security keys to remind me not to be careless with them.
See how I just went on about the cat? Yeah... I feel imposter syndrome about belonging in #InfoSec. I'm an IT #security and #operations focused #SysAdmin (#BlueTeam) whose been fascinated/working with computers since I was 3, and have been doing it professionally for over 10 years now. Does that make me #SecOps? I honestly don't know. I love this community though and want to make an effort to share what I do know more often besides the cat pics or conversations or boosting #ThreatIntel and news I think to share.
If I had to sum up in a few hashtags and such, I know securing #Windows and #ActiveDirectory best but I use/protect #Linux and #macOS if you'll forgive me for using #PowerShell there too. I love #scripting and #automation, the #OSINT and #ThreatIntel and #IOCs we share, #infrastructure and #firewall stuff, #logging and #DFIR, and reading/writing reports just as much as code. I'm not super passionate about the #cloud but that's not a hill I'd die on and #Azure is pretty cool.
Did I mention I have one of the best #CatsOfInfoSec ever?
Anyway, "it's me, hi!"
@uffeb@mastodon.social
#introduction
Hej alle.
Jeg er #computer og #IT entusiast.
Yder ofte #itsupport
Går op i IT sikkerhed og at undgå dem der samler og sælger dine personlige data.
Jeg ville ønske at alle brugte Mastodon eller lign. istedet for FB/twitter, så vidt muligt altså.
#bakmandit.
Jeg roder med netværk, #pfsense #router #firewall hardware, server-apps, #docker #raspberrypi #línux #worldoftanks #windows
Du er velkommen til at følge mig.
@simonoid@aus.social
#introduction hello non-bird app.
I am a IT engineer with interests in #powershell for #windows #sysadmin and have been doing this for over ten years 🤔
I am a father of two boys, and when I'm not doing that I tend to be a pc #gamer or using my #fountainpens.
My game interests are #fallout #cyberpunk2077 #FallGuysgame #CultoftheLamb #eastward.
My music tastes are diverse. Anything from #alternativerock to #jazz #electroswing or #jpop.
https://www.last.fm/user/simmo_02
Interested in seeing what this place has to offer ❤️
@yesfreenet@mastodon.ml
@timur
Так, дружище, держи годный канал с чистыми сборками Windows.
https://t.me/download_original_windows
Не стоит использовать говносборки, просто ради своей же безопасности.
#tg #рекомендации #windows #сборки