847 karma · joined March 20, 2016
GitHub: https://github.com/piotrkubisa
Email: [ my nickname ] at kodiga.pl
Frankly, there are 3 things that I find annoying / frustrating:
- Pronunciation: Sometimes the recorded audio is in so bad quality or spoken in robotic way, that is very hard to repeat it.
- Gamification: After reaching 1st place in the Diamond League, I found the constant nagging about my ranking annoying. However, some users I follow have found it fun and have been in the Diamond League for over 70 weeks. I have also noticed that some players like to compete with others, it sometimes leads to visible competition for the top 3 places (especially in the Obsidian League), which is really fun.
- Catchy answers: It is not a problem to spend a whole day with Duolingo, but after 15 minutes you need to take a short break. Otherwise you lose your focus and may find that the answer you have entered is not one that Duolingo would accept. This is because many answers look good enough, but in reality the other one is correct. Personally, I have had to click on the icon several times to open a forum to find an explanation of the error.
Disclaimer: I am paying Duolingo user with 340+ day streak trying to learn French. I have never had a French classes, but recently I had no problem to chat with other real person in French.
I would not oversimplify it as just "repo added on top". For many years we could say the same about Ubuntu and Debian, but I don't agree with this generalisation.
It may walk like a duck, but if it doesn't quack like a duck, it might not be a duck.
[0]: https://pop.system76.com/
[1]: https://blog.system76.com/post/more-on-cosmic-de-to-kick-off...
Personally, I have "Sentry but serverless" on my idea list, but I think it will never be realised. And now I have another reason not to start it, because it will definitely be uglier than your really nice dashboard. :)
Also Flarum [1] looks good in terms of being lightweight. It is based on Laravel Framework, so it has own pros and cons, but thanks to wise implementation of mithril.js, it feels very fast from a user perspective.
On a different spectrum, I would list Discourse [2], followed by Invision Power Board (IPB) [3]. Both require 2GB+ of RAM and a good CPU to run the server.
[0]: https://punbb.informer.com/forums/
[1]: https://flarum.org/
[2]: https://github.com/discourse/discourse/blob/main/docs/INSTAL...
However, I love the concept of a scrollable window manager like PaperWM [3]. When I had a smaller screen (24" 16:9) I complained a lot about the unused space on my screen. With PaperWM I was finally happy with its dimensions, because I could have a huge IDE on the left and a small part of terminal on the right. This way I could see if something was being printed to the terminal, while my editor took up 80% of the screen.
[0]: https://i3wm.org/
[1]: https://swaywm.org/
Initially, I had used the `gopass`. It is probably the most convenient way to start using the password-store. It is cross-platform, 100% compatible with pass & pass-otp. To copy the password, you basically type the part of the file you are looking for. If you type "gopass show github", it will display a TUI, where you can select the file you are looking for (let's say you have two files "personal/github.com.gpg" and "work/github.com.gpg"). Unfortunately, the search function was far from perfect, and it had a problem with typos like "gtihbu" at the time, when I was using it.
To get rid of this issue, I decided to adapt pass/gopass to use `fzf` [2]. In the same time, my .password-store/ dir was rapidly growing that made me think about implementing pass from scratch. I improved the implementation to have better caching, synchronization between machines/mobile, but more importantly - a simple `secret [arg]` command that will execute `fzf` to list all known creds and simplify selection of the password. Of course, it accepted an argument that was limiting the results, which is great when you need to get back to the previous credential to retype something.
The introduction of `fzf` made it really convenient, and I decided to add more commands with fuzzy search, such as:
- `otp` - limits results files containing TOTP/HOTP token, calculates and copies it to the clipboard.
- `secret-edit`, `secret-remove`, `secret-show`... aliases to sub-commands that open `fzf` command in multi-selection mode, so by utilizing space key I could select what files are meant to be modified, removed, displayed etc. Quite handy for mass-edit.
- `secret-qr` - similar to the gopass' feature, but it made a simplified way to create and display QR codes dedicated to share contacts, WiFI SSID+password combination (etc.) to someone who was asking for creds from me.
Awesome, but alt-tabbing to the terminal got me annoyed after a few years of using it that way. I started pursuing for more sophisticated interface. I decided to give `rofi` [3] a try. I managed to fork that repo and also adapt to my convention of using password-store, but I left i3 for a macOS.
Currently, I have started working on a browser extension that takes care of suggesting password-store creds (based on the path, input parameters, location on the website etc.) similarly to what uBlock Origin does. That configuration is passed to my pass implementation, so on the github.com, my browser have only "work" and "personal" auto-suggestion, when I am focusing the text input.
I plan to create a similar app to Shortcat [4], but it will preserve the information what credential has been asked for the focused app. I think, with VoiceOver assistance, it is more than possible to mitigate the need for alt-tabbing to the terminal for electron/native apps.
[0]: It is a private repository, maybe when it will be polished enough I will open-source it.
[1]: https://github.com/gopasspw/gopass
[2]: https://github.com/junegunn/fzf
[3]: https://github.com/alecdwm/pass-rofi-gui
Edit: About the AWS login form. I strongly recommend giving `aws-vault` (https://github.com/99designs/aws-vault) a try. It helps you skip the login form with a simple command e.g.: "aws-vault login acme-corp --duration 2h". I find it better than `aws-mfa` on my dev machine.
Worth noting, each recipe can have its very own SHELL[0] (e.g., ruby recipe, that uses ruby command with -e flag):
ruby: .SHELLFLAGS := -e
ruby: SHELL := ruby
ruby:
greeting = "labas"
puts "#{greeting}, ruby!"
[0]: http://agdr.org/2020/05/14/Polyglot-Makefiles.htmlAs a person living in Poland, where state-sponsored media fights with opposition using a cheap propaganda, I know the RT is doing journalist job wrong, because the scheme is exactly the same. Real news mixed with fake ones or hugely skewed. The reader/watcher starts believing he gets the truth, while he got a pulp of a nonsense. I compare it to a typical slot machine algorithm (i.e. "you always win") [1]. News there looks attractive for any person with conservative way of thinking. They gets you hooked into the spiral to follow their viewpoint.
The worst, many prominent politicians and other popular figures use RT/Sputnik as their source for manipulations. Sadly (thanks to RU invasion), the emperor is naked and it turns out many of them played a role of megaphone producing fear and doubts.
[1]: https://www.theguardian.com/australia-news/datablog/ng-inter...
Edit: If they would decide leaving their country my very early tip is to download Google Translate with the all locales they know + country where they are. While you can find many people who speak Ukrainian/Russian in central EU countries, it is a priceless help for any foreigner. I had occasion to be a participant of a talk between people, who were writing the phrases on the screen to communicate. Since that moment, I have downloaded Ukrainian locale pack for offline use in Google Translate.
First, he is a politician. My rational explanation for his words is to cooldown the emotions. Back in last week, you could see news about many oligarchs departing the country, while others trying to cash out every asset they have. Standing enemies at the borders is economically tragic for the whole country. Trying to sell other, non-catastrophic vision is his duty.
Secondly, there were many variants of the invasion. The full-scale operation often means the Russia forces will attack the entire Ukraine - eastern, central and the western. Many experts say this scenario is highly unlikely, because there will be too many casualties on both sides.
> Why would Putin want to annex a country full of people who hate him?
Please change your optics. People never matter in Russia/Soviet Union. Even, if there will be 70-80% of people who are dreadful opponents to "new goverment" then what they would do? Take it to the street? Strike? Please remind yourself how it looked in the Kazakhstan in early January 2022 (you will get shot, just because you left your home to buy some food) and in Belarus 2021 (mass protests, thousands of people being thrown in jail for no reason, very often beaten, many found dead there). Coup d'état? Poor joke, especially if we look at the latest events in Africa (for example Mali), where armed Russia's Wagner forces helped to take over the whole country.
Edit: As a person who lives in Central Europe, your question made me sad, because it means western mass-media is crap these days - they cannot explain a very silly thing why this ongoing conflict for 8+ years takes place.
I love it! I wish more SaaS will provide such abstraction for users who only want a preview of all features. I find silly trial periods a quite waste of resources (storage, mailing cost etc.). When I am testing a new product I use test/fake data (e.g. temporal/masked e-mail address) and there is near-zero chance I will convert to paid account with it. I would rather create new account to drop all testing history behind me.
Congratulations, and I hope you will cut some pie from this crazy Jira-like-software market cake!
[0]: https://en.wikipedia.org/wiki/Handheld_PC
[1]: https://en.wikipedia.org/wiki/Jornada_(PDA)#Jornada_720
[0]: I suggest you to take a look in Chrome debugger how it works. Quite funny piece of code. It is written in jQuery + vanilla JS, so it will be very easy to spot the whole algorithm.
This is a topic I have been very interested lately. I had been lucky to start using since Slate 0.61.x, but I cannot say anything good about it. It has a major problem with managing large documents [0]. I tried to introduce multiple improvements of performance, but it is very ungrateful project – change in one place affects many things at the same time. I am shocked, how many projects are still using it. For example, open-sourced Notabase [1]. My 4+ weeks with Slate.js completely killed motivation, and I was only thinking to put a whole project to litter.
In the result of being unhappy, I switched to Draft.js. It was 2020, and I was eager to try it out, so I did. Sadly, in 2020 there was also the last release [2]. Initially, I didn't like how it works. I preferred the Slate data model. Also, the draft.js project felt not maintained at that time (by looking at commits activity, issues and pull-requests). It is written in the Flow which I detest. I spent few weeks to try "merge" the draft.js and sentry with doing a "rewrite" to TypeScript. Obviously, quickly I realized myself it is stupid idea.
Then, I took a look at ReMirror. Yet another problem that was struggling with maintenance and active contributors. It is based on ProseMirror, so I thought it is better choice than previous. ReMirror is overly complex for simple things. It was hard to find any help - neither by googling examples nor via ReMirror's Discord (it was dead silence there).
After that, I have found information about the TipTap. Back then, there was only provided support for Vue.js. Fortunately, it was that time, when they have promised the v2 with React support. I skipped it to wait for the new version.
Maybe, a raw ProseMirror with React? Yep, tried it, but I wasn't very happy of the result. I knew the TipTap v2 will be released and there were already existing projects that were using ProseMirror behind the scene, for example: Outline's rich-markdown-editor[3]. It has tons of built-in components that I had with Slate. I was extremely happy about it, because "everything what I needed" was there – typical bold, italic, code, code block, quote, multi-level list and even table editing. Really awesome piece of code! However, authors decided they are opting for TipTap and they have archived repository on GitHub, which means officially the project is dead.
I had no time to test Quill.js. It looked interesting, but it has noticeable poor development pace, and it looks a dead project with many bugs.
Currently, I am using the TipTap v2 and I can't say how happy I am now. I guess I will stick with it for longer. However, I know the journey to find the best Rich Text Editor has not ended :sweat-emoji:. There are more alternatives, for example Stylo [4] that I've found in this week.
[0] Try to copy the contents of https://www.slatejs.org/examples/huge-document and paste it back. In a result, my Firefox on Macbook M1 hangs.
[1]: https://notabase.io/
[2]: https://github.com/facebook/draft-js/releases/tag/v0.11.7
[3]: https://github.com/outline/rich-markdown-editor
[4]: https://stylojs.com/
[0]: https://cloud.google.com/compute/docs/containers/deploying-c...
I don't want to be that one who points it out, but - how about switching to the password-store [0] (or gopass [1] - way easier), which works under all operating systems and keeps secrets versioned (via git).
With pass(1) you name your credentials accordingly to their purpose. For example, you could use following naming pattern: [client-name]/[website/subject]/[secret-name]. e.g. acme-corp/github.com/ssh/public-key, other-client/github.com/account, personal/gmail.com/password etc. That way, removal of old/unused secrets is just simple as doing "gopass rm -r [client-name]". There are also many more commands to list or print a tree of stored credentials.
Generally speaking, pass(1)/gopass(1) is a very simple way to manage credentials. I can't say how much I recommend that flow instead of using KeePass or plain-text files. Additionally, if you need those secrets on mobile phone there is an Android app [2] that might be very handy in some situations. This Android app and also gopass(1), have OTP code calculator (similar as in Google Authenticator), so you might be more happier with adapting yourself to use 2FA.
[0]: https://www.passwordstore.org/
[1]: https://github.com/gopasspw/gopass
[2]: https://github.com/android-password-store/Android-Password-S...
- Reusable workflows (note: matrix strategy doesn't work here): https://docs.github.com/en/actions/using-workflows/reusing-w...
- Creating an action: https://docs.github.com/en/actions/creating-actions/metadata...
- Composite actions: https://docs.github.com/en/actions/creating-actions/creating...
- Fact, the "uses" in step can be a relative path in the same repository (obviously, you must checkout the code, when it uses a relative path): https://docs.github.com/en/actions/using-workflows/workflow-...
- Script as an action: https://github.com/actions/github-script
- Using GitHub Packages and artifacts: https://docs.github.com/en/actions/publishing-packages/about...
- Using docker-compose-like services that run alongside of the container: https://docs.github.com/en/actions/using-containerized-servi...
- Using heredoc to share multi-line JSON in an environment variable, also using fromJSON/toJSON functions:
- name: get-version
id: get-version
run: |-
echo 'JSON_RESPONSE<<EOF' >> $GITHUB_ENV
cat package.json >> $GITHUB_ENV
echo 'EOF' >> $GITHUB_ENV
- name: print-version
run: echo "${{ fromJSON(env.JSON_RESPONSE).version }}"
- The matrix/strategy of the dependent workflow can be created dynamically, like in the following workflow: https://github.com/googleapis/google-cloud-go/blob/83bbc2e7c...And many, many more :)
How "automatized" way could help there? Unifying the CV/resumes for certain company? Sure, if they are have some form - could be stupid Google Form or more sophisticated like Teamtailor [0] - go ahead. You will have a nice databases or resumes and profiles similar to mini-LinkedIn. While I am fan of automation, I don't see any special incentive here that will profit HR team.
I know hundreds of examples, where CV nor initial job interview didn't exactly has shown how good someone is. Also, I personally had experienced a situation I have completely matched the job offer but after talk during interview, I knew it would be waste of time and mentally it will be a bad choice for next year(s) to join their Acme corp.
Do the JSON databases of applicants will help anyhow to solve the human relation job to find out the best candidate for the position? I am highly skeptical and in my humble opinion it will just "dehumanify" the whole process.
Maybe, it is good if you are looking for some warehouse worker like Amazon? /s
- It works smoothly with SSH keys (generated from ssh-keygen), which are perfectly recognized by possibly any developer.
- No need for external client, such as GpgWin/Kleopatra for Windows.
- Embed-able in Rust[0] and Go[1] (there are libraries), no need to call `gpg --decrypt ...` from the command line.
- Encrypted files by pass and keys are smaller. I guess it is thanks to ecliptic-curve encryption.
Before I start working on next project... Do you recognize any mobile app, which could replace PasswordStore app for Android [0] but with AGE support?
[0]: https://github.com/android-password-store/Android-Password-S...