daniel-lerch / vocup Goto Github PK
View Code? Open in Web Editor NEWVocabulary trainer.
Home Page: https://www.microsoft.com/p/vocup/9n6w2h3qjqmm
License: GNU Affero General Public License v3.0
Vocabulary trainer.
Home Page: https://www.microsoft.com/p/vocup/9n6w2h3qjqmm
License: GNU Affero General Public License v3.0
With the recent upcoming addition of the Dutch UI language, I would also like to see a list of most common special characters of the Dutch language. I know I can add my own custom lists, but a build-in one is much more convenient. I can add this with a PR if you like.
The current settings dialog especially on the tab Practice settings has a poor readability. Custom special char keyboards are hidden in another form despite being local settings as well.
Currently there is no easy way to move words from one to another vocabulary book. Ideally this should be possible via drag and drop between opened vocabulary books.
Vocup currently creates the configured VhfPath
and VhrPath
on startup if these folders don't exist. However, this behavior could lead to fatal crashes at startup if a user configured the path to an external disk before and Vocup attempts again and again to create this directory because it doesn't exist.
Instead of creating custom VhfPath
and VhrPath
directories, Vocup should show a message if these folders can't be found and reset the configuration to its default values.
If there are multiple words that match the search query, the user only ever gets to see the first one. There should be a way to jump to other matches in the vocab file.
Vocup doesn't save the window size, after every start i've to resize the Vocup window and the columns to my preference.
When trying to merge two vocabulary files, very weird behaviour occurs in Vocup.
I can select the first file properly, but after I add the second file, I get an exception:
System.NullReferenceException: Object reference not set to an instance of an object.
at Vocup.Forms.SpecialCharKeyboard.Form_Load(Object sender, EventArgs e)
at System.Windows.Forms.Form.OnLoad(EventArgs e)
at System.Windows.Forms.Form.OnCreateControl()
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.Control.CreateControl()
at System.Windows.Forms.Control.WmShowWindow(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.Form.WmShowWindow(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
After clicking Continue on the error message, the special character keyboard appears although I have never clicked the button for special chars, and it can be reproduced every time.
I then close the special character keyboard, enter mothertongue and foreign language names and click on save.
HOWEVER:
The file I just created with this process is not a merge of the two vocabulary files I put in, but the created file is completely empty.
Sometimes, when I then try to switch to a different vocabulary file, it asks me to save my practice progress on this file, although I never practised it.
When practicing words and opening the special chars dialog (by pressing the button), the dialog appears and gets focussed. But when pressing the character buttons, no characters are entered in the input field. Only when manually placing the cursor in the inputfield allows special character input. Any further input is working fine as long as the focus is in the input field. So the issue only appears just after opening the dialog.
From Microsoft Store integrity reports we know that Vocup can freeze when composing a practice list. In an example reported by @rnbahner this occurred when practicing a file with very few unpracticed words which might be in a buggy state.
The ANR is caused by the Sainte-Laguë implementation whose loop most probably runs forever without finding a match.
My I tried to learn Tamil I wasn't much interested in the written language but did not have good tools to practice the spoken language.
A kind of easy way to achieve that would be to let the user record audio samples of each word of the foreign language and the written form for the mother tongue. The practice would either be to listen to the audios and type the mother tongue or to read the word in the mother tongue, translate it and speak it out loud with a manual evaluation with the reference recording.
Solution:
disable OK
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.IO.IOException: The device is not ready.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileSystemEnumerableIterator`1.CommonInit()
at System.IO.FileSystemEnumerableIterator`1..ctor(String path, String originalUserPath, String searchPattern, SearchOption searchOption, SearchResultHandler`1 resultHandler, Boolean checkHost)
at System.IO.DirectoryInfo.InternalGetDirectories(String searchPattern, SearchOption searchOption)
at Vocup.Controls.FileTreeView.LoadNodes(TreeNode root) in C:\Users\Daniel Lerch\source\vocup\src\Vocup\Controls\FileTreeView.cs:line 140
at Vocup.Controls.FileTreeView.set_RootPath(String value) in C:\Users\Daniel Lerch\source\vocup\src\Vocup\Controls\FileTreeView.cs:line 68
at Vocup.MainForm.FileTreeView_BrowseClick(Object sender, EventArgs e) in C:\Users\Daniel Lerch\source\vocup\src\Vocup\MainForm.cs:line 262
at Vocup.Controls.FileTreeView.OnBrowseClick(EventArgs e) in C:\Users\Daniel Lerch\source\vocup\src\Vocup\Controls\FileTreeView.cs:line 118
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Vocup currently has just a few options to treat inputs as partly correct instead of incorrect if certain conditions are met. However, it would be more flexible to define a result (correct, partly correct, incorrect) for every case.
The PracticeDialog
crashes at least at the last word. In some cases reported by @Twometer already when practicing the first word.
The second problem is a wrong evaluation of inputs as an empty input leads to PartlyCorrect
while it should be Wrong
.
I tried moving all the files in the Vokabelhefte/ directory to a subfolder and Vocup crashed with the following error message:
System.NullReferenceException
HResult=0x80004003
Message=Object reference not set to an instance of an object.
Source=Vocup
StackTrace:
at Vocup.Controls.FileTreeView.MainWatcher_Deleted(Object sender, FileSystemEventArgs e) in D:\GitHub Repositories\vocup\src\Vocup\Controls\FileTreeView.cs:line 238
Can be reproduced by the following steps:
Vokabelhefte/
Vokabelhefte/
Vokabelhefte/
to that subfolderMany users that are not using Vocup for the first time might have a classic version installed, although they are using the Windows 10 version. If the current user has administrator rights, Vocup should propose uninstalling the old version.
Detecting an old version could be done by checking the following registry keys:
32 bit: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Vocup_is1
64 bit: HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Vocup_is1
Vocup currently chooses words to practice randomly with a certain distribution. That, however, is not very effective to practice a huge vocabulary book because words should be repeated a few times in the beginning and less often as mistakes get less but never disappear completely like they do now if the practice count is reached.
There are many other vocabulary training applications out there than just Vocup.
Vocup is built on .NET Resource classes and does not any hard coded texts. Therefore it should be possible to provide at least an English version beside the existing German one.
@Schafwolle this issue is for you, but it applies to anyone who wants to contribute to Vocup 😉
Thank you for your willingness to collaborate on Vocup. I opened this issue in order to discuss the work that has to be done for Vocup v2.0. That version is being developed on the avalonia
branch of this repository.
Feel free to take a look at Vocup.Core
and Vocup.Avalonia
, the new main projects as well as docs/fileformats.md
to see the all-new file format.
The rewrite is still in an early stage and there is much research work to be done. As I continue development I will open new issues and label them implementation for components where I already know the most important requirements.
Please let me know if there is something that you would like to work on for that I have not written down requirements yet. For individual questions or a discussion about Vocup via video call you find my email address on my GitHub profile.
When adding a new language in the special character GUI, the default name is "Neue Sprache". I leave this name, add some characters and click on save.
Now when I click add again, it shows an error message saying that this language already exists. As a user I don't know what language already exists, since I didn't even specify a name yet. It turns out the reason for this is that it's trying to create another language with the name "Neue Sprache" and since one already exists, it fails.
If this is intended to make the user choose another name than "Neue Sprache", please add some kind of dialog so that the user knows what he has to do, because the error currently showing up does not make much sense. It took me a good while to figure out what was going on as well.
File
> Exit
does nothingVocup is going to have limited support for Linux with v1.7.2 but it still looks ugly and cannot run on the latest macOS versions.
I have already started to rewrite Vocup with Avalonia in an own branch.
The last versions of Vocup used Inno Setup for installing and updating. To search for and download updates K_Updater.dll
was used. As far as I know the K_Updater project is not maintained anymore. Therefore we will develop another solution.
However, an installer will be necessary for UAC prompts and overriding the current installation. The easiest solution would be to use Inno Setup again as default deployment option.
Like the title says, when unloading a vocabulary book, the word counters on the StatisticsPanel (bottom right) are not reset to zero. I can provide a PR with a fix for this if you like.
Fixes #47
I stubled upon your program and I really like it. One thing that I was missing though was support for the Dutch UI language so I translated the entire program into Dutch. Upon doing this, I also fixed some minor typos I found in the English resource files. If you're interested than I'm happy to create a pull request to add this feature.
When importing a special CSV file containing a string with +
sign, it will be recognized as having one column. That results in an error message: "Der CSV Header verfügt über 1 Spalten, muss aber aus genau 2 Spalten bestehen". But after clicking on OK, Vocup will generate a vocabulary file in an invalid state. The text for mothertongue and foreign language is both empty.
It's not possible to save this file with the Save button, but with the Save as button, it works. You can add vocabulary to this invalid file as much as you want, but when you click the file again in the tree on the left side, or reload Vocup you will get an error message stating that the file is invalid.
Example CSV file:
x+x
loading this string as a CSV file will trigger the bug
When dealing with Excel files or tables in Word documents it would be much easier to import words directly via clipboard into Vocup.
Hy
This is my first github issue so be gentle with me.
I would like to migrate from another software (I don't know if I am allowed to name this software) because the other software stopped working.
I know you already support a csv import but the csv support right does not support to import of the state or the date of creation.
The software supports a csv export with the following scheme:
<First Language (Mother)> ; <Second Language>; <Language name>; <Additional Information>; <Empty or swapped> ;< Phase (State)>; <Date of Creation>; <Date of next check>;
swapped means that both directions are ask
A example entry
"..., nicht wahr? (Frageanhängsel)";¿verdad?;Spanisch;Buch A1 bis Lektion.7;;6;2015-01-17;;
...(oder) nicht? (Frageanhängsel);¿no?;Spanisch;Buch A1 bis Lektion.7;;6;2015-01-17;;
(stammen) sind ursprünglich aus;ser originario/a de;Spanisch;Buch B1;;5;2019-11-14;2021-02-20
I am a programmer myself, therefore I would try to write an importer.
I know it is not possible to do a one2one mapping but at least I can try
I know my codebase will probably not be of a good quality, but once I am done would you like a pull request. I guess will not find time to start with the importer before 2021.
Are you planing to improve the csv import?
E.g: It would be possible to request a map file form the user. To support mapping from different columens to different entries in the database.
If I did something wrong regarding the issue policy of github. Please tell me.
I wish you a good new year and hopefully I will succed writting the importer.
Vocup 1.x stores all configuration in .NET user settings which have a fixed path and are therefore not suitable for portable editions. For Vocup 2.x which will be based on Avalonia and .NET 5.0 a new solution is required.
Requirements:
Known candidates:
Vocup 2.0 will replace the file tree on the left side with a list of recent files because that's much more convenient if your vocabulary books are saved in different places. Here's a draft how it could look like:
That would make it possible to switch quickly between books like tabs in the browser. Books with unsaved changes should somehow be highlighted in this list.
I'm not yet sure how to order the list. Chronologically would make sense in general but it would annoying if you often switch between to books and they constantly change their places.
@megabugman Proposed that Vocup should support optional expressions like (to) walk which should match walk, to walk and (to) walk. This feature has to be optional maybe even on a per book basis.
Right now there is an option to mark the translation as partially correct when the synonym is not entered. It would make sense to also add an option that allows either one of the two words (original translation or synomym) to be entered and when entered correctly marks the word as properly translated.
to reproduce:
potential solution:
allow only one instance
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.IO.IOException: The process cannot access the file 'C:\Users\Noname\AppData\Local\VectorData\Vocup.exe_Url_c2sx0hgu15odnosfwq34l2zmko4ish25\1.8.2.0\user.config' because it is being used by another process.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
at System.Configuration.Internal.WriteFileContext.FileIsWriteLocked(String FileName)
at System.Configuration.Internal.WriteFileContext.ReplaceFile(String Source, String Target)
at System.Configuration.Internal.WriteFileContext.Complete(String filename, Boolean success)
at System.Configuration.Internal.InternalConfigHost.StaticWriteCompleted(String streamName, Boolean success, Object writeContext, Boolean assertPermissions)
at System.Configuration.ClientSettingsStore.ClientSettingsConfigurationHost.WriteCompleted(String streamName, Boolean success, Object writeContext)
at System.Configuration.UpdateConfigHost.WriteCompleted(String streamName, Boolean success, Object writeContext)
at System.Configuration.MgmtConfigurationRecord.SaveAs(String filename, ConfigurationSaveMode saveMode, Boolean forceUpdateAll)
at System.Configuration.ClientSettingsStore.WriteSettings(String sectionName, Boolean isRoaming, IDictionary newSettings)
at System.Configuration.LocalFileSettingsProvider.SetPropertyValues(SettingsContext context, SettingsPropertyValueCollection values)
at System.Configuration.SettingsBase.SaveCore()
at System.Configuration.SettingsBase.Save()
at System.Configuration.ApplicationSettingsBase.Save()
at Vocup.MainForm.StoreSettings() in C:\Users\Daniel Lerch\source\vocup\src\Vocup\MainForm.cs:line 150
at System.Windows.Forms.Form.OnFormClosing(FormClosingEventArgs e)
at System.Windows.Forms.Form.WmClose(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Vocup's legacy file format is limited to two synonyms in the foreign language and only a single entry for the mother tongue. Future versions should support any number of synonyms for both mother tongue and foreign language.
Vocup needs a new website after the shutdown of vocup.ch. Hosting again on this domain is an option but we have to check the costs.
An alternative would be hosting on an existing domain like vectordata.de.
A new website should scale on mobile devices although Vocup is for windows only. Furthermore this website needs to have good screenshots showing many features of Vocup.
Vocup 2.0 requires a rewrite of build.ps1
because the build matrix gets much more complicated than before.
OS | Package type | Runtime identifiers |
---|---|---|
Windows | Microsoft Store | win10-x64 win10-x86 win10-arm64 |
Windows | Installer | win-x86 |
Windows | .zip | win-x86 |
Packaging options for macOS and Linux should be discussed in separate issues.
Vocup currently only tracks a few events using Matomo. Sadly, Matomo does not seem to be the best choice looking forward as its libraries are not maintained anymore, documentation often missing and tracking applications other than websites poorly supported.
Alternatives to Matomo to consider:
@megabugman proposed that Vocup should support saving and practicing words in a specific order. Changes at the file format are not required as JSON arrays are ordered but an additional id
field could simplify ordering in Avalonia and other UI frameworks.
(Reported via WhatsApp by rnbahner)
System.ArgumentOutOfRangeException: Der Index lag außerhalb des Bereichs. Er darf nicht negativ und kleiner als die Sammlung sein.
Parametername: index
bei System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
bei Vocup.Forms.PracticeDialog..ctor(VocabularyBook book, List`1 practiceList)
bei Vocup.program_form.vokabeln_üben()
bei System.Windows.Forms.Control.OnClick(EventArgs e)
bei System.Windows.Forms.Button.OnClick(EventArgs e)
bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
bei System.Windows.Forms.Button.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Steps to reproduce:
Expected behavior:
Actual behavior:
Additional context:
Main
method async
does not fulfill Windows Forms' requirements of a single-threaded apartmentApplication.Run()
without a main form and the Application.Idle
event for further initialization work might be an optionSee the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.ArgumentOutOfRangeException: InvalidArgument=Value of '3' is not valid for 'index'.
Parameter name: index
at System.Windows.Forms.ListViewItem.ListViewSubItemCollection.get_Item(Int32 index)
at Vocup.Forms.AboutBox.LwComponents_DoubleClick(Object sender, EventArgs e) in C:\Users\Daniel Lerch\source\vocup\src\Vocup\Forms\AboutBox.cs:line 66
at System.Windows.Forms.Control.OnDoubleClick(EventArgs e)
at System.Windows.Forms.ListView.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4300.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/mscorlib.dll
----------------------------------------
Vocup
Assembly Version: 1.8.2.0
Win32 Version: 1.8.2.0
CodeBase: file:///D:/Vocup_1.8.2/Vocup.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4270.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4300.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4084.0 built by: NET48REL1
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Configuration
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4190.0 built by: NET48REL1LAST_B
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Core
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4300.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Xml
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4084.0 built by: NET48REL1
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
Octokit
Assembly Version: 0.48.0.0
Win32 Version: 0.48.0.0
CodeBase: file:///D:/Vocup_1.8.2/Octokit.DLL
----------------------------------------
System.Net.Http
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4084.0 built by: NET48REL1
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Net.Http/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.dll
----------------------------------------
Accessibility
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4084.0 built by: NET48REL1
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Accessibility/v4.0_4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
----------------------------------------
Like the title says. Now you only have the option to translate from mother language to foreign language or the other way around. It would also be nice to have an option to do both options at once. So e.g. from English to French and French to English in the same run, asking words to translate from these options at random. This helps when it is needed to practice words in both directions.
As the title says, the help file is in a .chm format, which is a kindof old format and not very easy to maintain. In fact the help file contents is HTML which itself is much easier to maintain and keep up-to-date. Would like to hear your thoughts about this. Perheps an online HTML version is an option?
Hy
I tried to build the current avalonia branch. I have installed Visual Studio 2019 and opened the solution checked in.
Then I tried to build the debug version of the entire solution. The build failes with:
Ungültige ResX-Datei. Der angeforderte Wert "Ctrl" konnte nicht gefunden werden. Zeile 181, Position 5. Vocup
After that I tried to change the language to english. Now the following error occure:
No certificate found with the supplied thumbprint: 9C503A44C755504352901E2766267CEA3C7FAA82 Vocup.Packaging C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VisualStudio\v16.0\AppxPackage\Microsoft.AppXPackage.Targets 826
I hope that this not a stupid mistake on my side. I know how to program in C# but when it comes to GUIs and XAML, I am lost.
Vocup does not display long words or sentences correctly in PracticeDialog
and PracticeResultList
.
Making PracticeResultList
a resizeable window should be sufficient in most cases and easy to implement. For PracticeDialog
more work is required to add line breaks to the readonly TextBox and the evaluation message.
Vocup should have limited support for Linux with v1.7.2 via Mono or Wine.
For native Linux and macOS support see #18.
Users should be able to select words to practice. An easy implementation could be done via search so that PracticeCountDialog
shows an option to only use words which have been found by current query.
The new file format should support multi-lines(supported by json, therefore it would be possible to support multi-lines in vocabulary screens.
I know this is something that could be done with vocup 2.0
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.