TAIPEJ - an IDE for TeaseAI v1.1.0

Webteases are great, but what if you're in the mood for a slightly more immersive experience? Chat about Tease AI and other offline tease software.

Moderator: 1885

N3R0
Explorer
Explorer
Posts: 33
Joined: Tue Jun 02, 2015 1:28 pm
Gender: Male
Sexual Orientation: Straight
I am a: Switch
Location: Germany

Re: TAIPEJ - an IDE for TeaseAI

Post by N3R0 »

markus wrote: Mon Mar 28, 2022 7:08 pm
N3R0 wrote: Sun Mar 27, 2022 3:16 pm
You are right, that the chances of the current image being exactly what the scripter wants, are very low. But if @ImageTag() or @DommeTag() can't find any matches for that tag, the original behaviour of @Tag... means the scripter can still respond to the current image (if that has been tagged with anything). With the new behaviour, scripters are forced to use general responses in that case.
If you follow the Awakening announcement thread you'll see that I am very open minded for suggestions, ideas and wishes from scripters (also from users of course), ... I'll try to do my best to support any scripter and their feature- or functionality- wishes.
In the existing personalities I only found very rare occations where this was used, IIRC only one file with a few lines (correct me if I'm wrong!).
My personality collection is pretty outdated (I still have House of Tease 3.1.2, current version is 8.X :lol: ), so don't know how often people use this. I can only imagine that most scripters put this close to the bottom of their to-do lists, because (from what I've seen so far) most users are either too lazy or don't know how to properly tag their images.
markus wrote: Mon Mar 28, 2022 7:08 pm That was when I thought that most probably the combination of that such a tagged pic is on the screen AND such a filter-line is (randomly!) drawn from such a file goes close to zero.
At this point of development I try to focus on what is really needed to get this thing working for existing personalities and not on theoretical possibilities which maybe never be used.
So my question is:
Do you actually plan to use these filters for your personality?
Actually, the probability is 100%. Because they are filters!
(Note to all readers: the tags used in the following code are made-up, they don't [necessarily] exist for real ! They are supposed to represent domme tags.)

If the scripter wants to tell a "story", where it is important to show a particular kind of image, they use @DommeTag(...) to show the image and make a comment about it.

But if the scripter only wants to make things more immersive (which is my plan for my personality) they would use @Tag...

If you have the following line somewhere, e.g. in a module:

Code: Select all

I can see you staring at me #PetName @FollowUp(#CommentImage)
The #CommentImage.txt could look like this:

Example 1:

Code: Select all

Do you like what you see? #Grin
Do you like the color of my toe nails?
Do you prefer shaven or hairy armpits?
Example 2:

Code: Select all

Do you like what you see? #Grin
@TagToes Do you like the color of my toe nails?
@TagArmpit Do you prefer shaven or hairy armpits?
In example 1, you are right. It is very unlikely that you can actually see her toes, if that line is randomly selected. Especially if there are a lot of lines in that keyword file.

But in example 2, the chance of the image matching the text is 100%, because every line that refers to a tag that is missing from the current image, will be filtered out.
If the image has no tags at all or if none of the tags of the current image is listed in #CommentImage, then the general response (the first line, in this example) will be used. Using @Tag this way is the whole idea of why 1885 added @Tags to TAI in the first place!
markus wrote: Mon Mar 28, 2022 7:08 pm It wouldn't be that much of a problem to implement, filters for videos are already working (@VideoHardcore and so on) ... these make much more sense IMHO.
If you (or any other scripter) want to have this implemented, it will become a point on my ToDo-list, but, ... and that's for sure, with different names, so that the filters and commands don't have the same name anymore (this is also something on my ToDo-List, to give alternatives for such cases in which a command and a filter have the same name so future scripts could be written and readed a bit more understandable).
This does make sense for things like @BadMood vs @BadMood(), but I don't think it is a good idea to rename the @Tags.
All those commands, filters etc. are already confusing enough for new scripters. The more differences there are between the different editions of TAI, the more confusing it becomes, IMO.

I hope this helps to understand my POV.
Have a nice day.

And to anyone who reads this today: don't let people fool you tomorrow! ;-)
If you are a creator of a Tease AI personality, check out my personality editor called TAIPEJ!
N3R0
Explorer
Explorer
Posts: 33
Joined: Tue Jun 02, 2015 1:28 pm
Gender: Male
Sexual Orientation: Straight
I am a: Switch
Location: Germany

Re: TAIPEJ - an IDE for TeaseAI v1.0.0

Post by N3R0 »

Hello scripters,

for the (probably) last time I just updated the manual attached to the first post.
From now on the attached manual will only be updated, if anything changes about the way you install or launch TAIPEJ. Because for everything else, you should refer to the built-in version of the manual. (the version I just uploaded is identical to the one built into version 1.0 of the program)

Here's what I changed:
Spoiler: show
  • small design changes to improve readability
  • added 2 new sections: "The example generator" and "Search results"
  • added the sub-section "External changes to a personality" to the "General information" section
  • replaced the vague statement about RAM in the "System requirements" with "2 GB or more"
  • added more content and some foot notes to the comparison table in "Which option should I use?"
  • made the installation instructions a little more elaborate and easier to read
  • added the sub-section "Splash screen" to the "Launching TAIPEJ" section
  • added content to the "Troubleshooting" sub-section
  • added information about the context menu and navigation via keyboard to the "The file trees" section
  • added a table to the "The file trees" section, that shows what the default colors mean
  • added information to the "The code area" section, about hovering over commands, the "Quick Fixes" and the reasons why you might not see any syntax highlighting
  • added note to the "The table of problems" section, that you can double click its entries to open the corresponding file
  • updated the list of CSS classes in the "Modifying the look of TAIPEJ" section
  • added some system shortcuts, that I forgot to list before
  • added F6 and Shift + F6 shortcuts
  • added lots of "shortcuts specific to TeaseAI scripts"
  • added a TLDR to the long "known issue"
  • I had to add a new "known issue" :(


Announcement

Because I probably won't be able to work on this project for the next couple of weeks, I decided to upload the first release now, instead of letting you wait.
It's still missing the command guide (but you can always use the one built into TeaseAI, which is better than nothing) and it can't detect as many script problems as I would like. (right now it can detect 49 different types of problems)

But everything else, that was planned to be part of the first release (and more) is implemented. You can find the download links and additional information in the updated first post.

Happy scripting!
If you are a creator of a Tease AI personality, check out my personality editor called TAIPEJ!
GodDragon
Explorer At Heart
Explorer At Heart
Posts: 790
Joined: Sun Jun 11, 2017 4:30 pm
Gender: Male
Sexual Orientation: Straight
I am a: Switch

Re: TAIPEJ - an IDE for TeaseAI v1.0.0

Post by GodDragon »

That is a great tool! I once wrote the TAI syntax checker, but this is far superior. I always wanted to write an addition/addon for notepad++, but this works as well.
theredreaper
Explorer
Explorer
Posts: 42
Joined: Wed Jul 27, 2011 11:53 pm
Gender: Male
Sexual Orientation: Open to new ideas!
I am a: Submissive
Dom/me(s): I am currently owned.
Location: You wouldn't believe me if I told you.

Re: TAIPEJ - an IDE for TeaseAI v1.0.0

Post by theredreaper »

Very excited for this release! I had been considering starting a similar project myself.

One thing I've noticed so far, I can't seem to make use of the search and replace function? The "replace with" box just stays greyed out and unavailable to type into, unless I've missed something?

Edit: Just had a crash.
Spoiler: show
BUG REPORT
version 1.0.0
Using your custom JRE
I was looking at an existing personality, just going through it and fixing all the errors found by TAIPEJ. One line it brought my attention to had a "useless @NullRespsonse" error. The line was:
@NullResponse #EdgeMultipleRandom1_3Hold
I chose to simply delete the @NullResponse from the line, as that fix makes the most sense here. Upon backspacing the last character, the program crashed with an error message relating to "empty argument" and citing something along the lines of Style Span length cannot be negative. I'm sorry for not copy/pasting the actual error message. I tried, but as soon as I clicked on the background terminal window containing the full stack trace, it crashed too. :/
Another crash:
Spoiler: show
BUG REPORT
version 1.0.0
Using your custom JRE
Right-clicking on some highlighted text and selecting "Replace all in all scripts with: <i>somestring</i>" results in a crash and list index out of range error. This one has proven to be repeatable so far.
Stack trace:
empty argument: ARGUMENT: []
java.lang.IndexOutOfBoundsException: Index -1 out of bounds for length 0
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:266)
at java.base/java.util.Objects.checkIndex(Objects.java:359)
at java.base/java.util.ArrayList.get(ArrayList.java:427)
at com.cs.general.base.model.Array.last(Array.java:41)
at net.taipej.problems.quickFix.QuickFix.replaceAll(QuickFix.java:104)
at net.taipej.problems.quickFix.DeprecatedAll.execute(DeprecatedAll.java:23)
at net.taipej.view.CodeArea.lambda$1(CodeArea.java:71)
at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
at javafx.controls/javafx.scene.control.MenuItem.fire(MenuItem.java:465)
at javafx.controls/com.sun.javafx.scene.control.ContextMenuContent$MenuItemContainer.doSelect(ContextMenuContent.java:1380)
at javafx.controls/com.sun.javafx.scene.control.ContextMenuContent$MenuItemContainer.lambda$createChildren$12(ContextMenuContent.java:1333)
at javafx.base/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
at javafx.graphics/javafx.scene.Scene$MouseHandler.process(Scene.java:3851)
at javafx.graphics/javafx.scene.Scene$MouseHandler.access$1200(Scene.java:3579)
at javafx.graphics/javafx.scene.Scene.processMouseEvent(Scene.java:1849)
at javafx.graphics/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2588)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:397)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:434)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:390)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:433)
at javafx.graphics/com.sun.glass.ui.View.handleMouseEvent(View.java:556)
at javafx.graphics/com.sun.glass.ui.View.notifyMouse(View.java:942)
at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
at java.base/java.lang.Thread.run(Thread.java:831)
Another crash:
Spoiler: show
BUG REPORT
version 1.0.0
Using your custom JRE
Not sure what happened with this one. Double clicked an error message from the list in the bottom pane referring to an "unknown user keyword". As soon as I clicked on the text editor pane, the program crashed.
Stack Trace:

java.lang.IndexOutOfBoundsException: 33 is no valid offset in [FUNCTIONAL_BRACKET: [, ARGUMENT: [SYSTEM_KEYWORD: #DateDifference[FUNCTIONAL_BRACKET: (, ARGUMENT: [USER_KEYWORD: #LastOrgasm[]], FUNCTIONAL_COMMA, ARGUMENT: [DommeText: days], FUNCTIONAL_BRACKET: )]], FUNCTIONAL_BRACKET: ]]
at net.taipej.controller.FilesUtility.getTokenForChar(FilesUtility.java:302)
at net.taipej.controller.FilesUtility.getTokenForChar(FilesUtility.java:298)
at net.taipej.controller.FilesUtility.getTokenForPosition(FilesUtility.java:308)
at net.taipej.view.CodeTabPane.lambda$2(CodeTabPane.java:346)
at javafx.base/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
at org.fxmisc.richtext.GenericStyledArea.lambda$new$16(GenericStyledArea.java:774)
at org.reactfx.util.NonAccumulativeStreamNotifications.lambda$head$0(NotificationAccumulator.java:134)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:68)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:57)
at org.reactfx.ProperEventStream.emit(ProperEventStream.java:18)
at org.reactfx.util.NonAccumulativeStreamNotifications.lambda$head$0(NotificationAccumulator.java:134)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:68)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:57)
at org.reactfx.ProperEventStream.emit(ProperEventStream.java:18)
at org.reactfx.util.NonAccumulativeStreamNotifications.lambda$head$0(NotificationAccumulator.java:134)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:68)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:57)
at org.reactfx.ProperEventStream.emit(ProperEventStream.java:18)
at org.reactfx.MappedStream.lambda$observeInputs$0(MappedStream.java:25)
at org.reactfx.util.NonAccumulativeStreamNotifications.lambda$head$0(NotificationAccumulator.java:134)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:68)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:57)
at org.reactfx.ProperEventStream.emit(ProperEventStream.java:18)
at org.reactfx.EventStream$1.lambda$observeInputs$0(EventStream.java:423)
at org.reactfx.util.NonAccumulativeStreamNotifications.lambda$head$0(NotificationAccumulator.java:134)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:68)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:57)
at org.reactfx.ProperEventStream.emit(ProperEventStream.java:18)
at java.base/java.util.Optional.ifPresent(Optional.java:178)
at org.reactfx.FlatMapOptStream.lambda$observeInputs$0(FlatMapStream.java:49)
at org.reactfx.util.NonAccumulativeStreamNotifications.lambda$head$0(NotificationAccumulator.java:134)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:68)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:57)
at org.reactfx.ProperEventStream.emit(ProperEventStream.java:18)
at java.base/java.util.Optional.ifPresent(Optional.java:178)
at org.reactfx.FlatMapOptStream.lambda$observeInputs$0(FlatMapStream.java:49)
at org.reactfx.util.NonAccumulativeStreamNotifications.lambda$head$0(NotificationAccumulator.java:134)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:68)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:57)
at org.reactfx.ProperEventStream.emit(ProperEventStream.java:18)
at org.reactfx.DistinctStream.lambda$observeInputs$0(DistinctStream.java:23)
at org.reactfx.util.NonAccumulativeStreamNotifications.lambda$head$0(NotificationAccumulator.java:134)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:68)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:57)
at org.reactfx.ProperEventStream.emit(ProperEventStream.java:18)
at org.reactfx.EventStream$1.lambda$observeInputs$0(EventStream.java:423)
at org.reactfx.util.NonAccumulativeStreamNotifications.lambda$head$0(NotificationAccumulator.java:134)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:68)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:57)
at org.reactfx.ProperEventStream.emit(ProperEventStream.java:18)
at org.reactfx.MappedStream.lambda$observeInputs$0(MappedStream.java:25)
at org.reactfx.util.NonAccumulativeStreamNotifications.lambda$head$0(NotificationAccumulator.java:134)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:68)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:57)
at org.reactfx.ProperEventStream.emit(ProperEventStream.java:18)
at org.reactfx.FilterStream.lambda$observeInputs$0(FilterStream.java:20)
at org.reactfx.util.NonAccumulativeStreamNotifications.lambda$head$0(NotificationAccumulator.java:134)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:68)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:57)
at org.reactfx.ProperEventStream.emit(ProperEventStream.java:18)
at org.reactfx.SuccessionReducingStream.handleTimeout(SuccessionReducingStream.java:73)
at org.reactfx.util.FxTimer.lambda$restart$0(FxTimer.java:89)
at javafx.graphics/com.sun.scenario.animation.shared.TimelineClipCore.visitKeyFrame(TimelineClipCore.java:239)
at javafx.graphics/com.sun.scenario.animation.shared.TimelineClipCore.playTo(TimelineClipCore.java:180)
at javafx.graphics/javafx.animation.Timeline.doPlayTo(Timeline.java:177)
at javafx.graphics/javafx.animation.AnimationAccessorImpl.playTo(AnimationAccessorImpl.java:39)
at javafx.graphics/com.sun.scenario.animation.shared.SingleLoopClipEnvelope.timePulse(SingleLoopClipEnvelope.java:99)
at javafx.graphics/javafx.animation.Animation.doTimePulse(Animation.java:1101)
at javafx.graphics/javafx.animation.Animation$1.lambda$timePulse$0(Animation.java:186)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at javafx.graphics/javafx.animation.Animation$1.timePulse(Animation.java:185)
at javafx.graphics/com.sun.scenario.animation.AbstractMasterTimer.timePulseImpl(AbstractMasterTimer.java:344)
at javafx.graphics/com.sun.scenario.animation.AbstractMasterTimer$MainLoop.run(AbstractMasterTimer.java:267)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:515)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:499)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulseFromQueue(QuantumToolkit.java:492)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$11(QuantumToolkit.java:320)
at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
at java.base/java.lang.Thread.run(Thread.java:831)
Tried to call Alert.showAndWait() during layout processing. Falling back to Swing dialogs...
Upon re-opening the program I noted that I had lost all of the changes made in my previous session. Maybe this is just a result of me being used to VSCode and its auto-save feature that saves every file you touch any time you make a change, but I found this surprising, as I had already touched and updated probably 30+ files before this crash. If it were me, (and it's obviously not, and I'm sure you have your own priorities with this project) I would consider the implementation of an auto-save feature high priority.




I will continue adding to this post if/when I come across any other issues. Overall, I'm very impressed. The UI is intuitive and super clean, and I'm very excited to see this project develop. If you're looking for any assistance with bugfixes/feature implementation, send me a PM, I can probably spare some time to contribute.
N3R0
Explorer
Explorer
Posts: 33
Joined: Tue Jun 02, 2015 1:28 pm
Gender: Male
Sexual Orientation: Straight
I am a: Switch
Location: Germany

Re: TAIPEJ - an IDE for TeaseAI v1.0.0

Post by N3R0 »

Hello theredreaper,

thank you for taking the time to write these bug reports and the other feedback. I hope, TAIPEJ proved to be useful to you, despite the crashes. I've already encountered the second and the third crash myself (under different circumstances) and I thought I had fixed them for good, but apparently there are still scenarios where they can occur. I'm sorry! :-/
theredreaper wrote: Tue Apr 26, 2022 4:49 am One thing I've noticed so far, I can't seem to make use of the search and replace function? The "replace with" box just stays greyed out and unavailable to type into, unless I've missed something?
Oops, I think I forgot to mention that in the manual. "Search and replace" is not yet available, if "case sensitive" and "use regular expression" are both off at the same time. If you enable one (or both) of them, it should work. Sorry.

Edit: Actually, the above statement applies to "search this file", which incorrectly just said "functionality not implemented". The search form can now be used. The reason "replace with" is greyed out in the "search in all files" form is, that this feature has not yet been implemented. Sorry for the confusion.

theredreaper wrote: Tue Apr 26, 2022 4:49 am Edit: Just had a crash.
Spoiler: show
BUG REPORT
version 1.0.0
Using your custom JRE
I was looking at an existing personality, just going through it and fixing all the errors found by TAIPEJ. One line it brought my attention to had a "useless @NullRespsonse" error. The line was:
@NullResponse #EdgeMultipleRandom1_3Hold
I chose to simply delete the @NullResponse from the line, as that fix makes the most sense here. Upon backspacing the last character, the program crashed with an error message relating to "empty argument" and citing something along the lines of Style Span length cannot be negative. I'm sorry for not copy/pasting the actual error message. I tried, but as soon as I clicked on the background terminal window containing the full stack trace, it crashed too. :/
Well, that's weird. Did you move the mouse while pressing backspace?
Edit: Never mind. I confused the first and the third bug. This one has nothing to do with the mouse.
The actual bug is still there, but you will be glad to hear, that it no longer crashes, if this bug occurs. Now the script that triggered the bug will be displayed without syntax highlighting to prevent the crash.


theredreaper wrote: Tue Apr 26, 2022 4:49 am Another crash:
Spoiler: show
BUG REPORT
version 1.0.0
Using your custom JRE
Right-clicking on some highlighted text and selecting "Replace all in all scripts with: <i>somestring</i>" results in a crash and list index out of range error. This one has proven to be repeatable so far.
Stack trace:
empty argument: ARGUMENT: []
java.lang.IndexOutOfBoundsException: Index -1 out of bounds for length 0
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:266)
at java.base/java.util.Objects.checkIndex(Objects.java:359)
at java.base/java.util.ArrayList.get(ArrayList.java:427)
at com.cs.general.base.model.Array.last(Array.java:41)
at net.taipej.problems.quickFix.QuickFix.replaceAll(QuickFix.java:104)
at net.taipej.problems.quickFix.DeprecatedAll.execute(DeprecatedAll.java:23)
at net.taipej.view.CodeArea.lambda$1(CodeArea.java:71)
at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
at javafx.controls/javafx.scene.control.MenuItem.fire(MenuItem.java:465)
at javafx.controls/com.sun.javafx.scene.control.ContextMenuContent$MenuItemContainer.doSelect(ContextMenuContent.java:1380)
at javafx.controls/com.sun.javafx.scene.control.ContextMenuContent$MenuItemContainer.lambda$createChildren$12(ContextMenuContent.java:1333)
at javafx.base/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
at javafx.graphics/javafx.scene.Scene$MouseHandler.process(Scene.java:3851)
at javafx.graphics/javafx.scene.Scene$MouseHandler.access$1200(Scene.java:3579)
at javafx.graphics/javafx.scene.Scene.processMouseEvent(Scene.java:1849)
at javafx.graphics/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2588)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:397)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:434)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:390)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:433)
at javafx.graphics/com.sun.glass.ui.View.handleMouseEvent(View.java:556)
at javafx.graphics/com.sun.glass.ui.View.notifyMouse(View.java:942)
at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
at java.base/java.lang.Thread.run(Thread.java:831)
Do you remember which command / filter you were trying to replace?
Edit: Never mind. It turned out to be a general problem (i.e. not related to a particular replacement). I fixed it.


On a side note:
theredreaper wrote: Tue Apr 26, 2022 4:49 am Right-clicking on some highlighted text and selecting...
What do you mean by "highlighted"? That TAIPEJ identified a problem or that you marked it? In case of the latter: note that it is not necessary to mark text in order to apply quick fixes.



theredreaper wrote: Tue Apr 26, 2022 4:49 am Another crash:
Spoiler: show
BUG REPORT
version 1.0.0
Using your custom JRE
Not sure what happened with this one. Double clicked an error message from the list in the bottom pane referring to an "unknown user keyword". As soon as I clicked on the text editor pane, the program crashed.
Stack Trace:

java.lang.IndexOutOfBoundsException: 33 is no valid offset in [FUNCTIONAL_BRACKET: [, ARGUMENT: [SYSTEM_KEYWORD: #DateDifference[FUNCTIONAL_BRACKET: (, ARGUMENT: [USER_KEYWORD: #LastOrgasm[]], FUNCTIONAL_COMMA, ARGUMENT: [DommeText: days], FUNCTIONAL_BRACKET: )]], FUNCTIONAL_BRACKET: ]]
at net.taipej.controller.FilesUtility.getTokenForChar(FilesUtility.java:302)
at net.taipej.controller.FilesUtility.getTokenForChar(FilesUtility.java:298)
at net.taipej.controller.FilesUtility.getTokenForPosition(FilesUtility.java:308)
at net.taipej.view.CodeTabPane.lambda$2(CodeTabPane.java:346)
at javafx.base/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
at org.fxmisc.richtext.GenericStyledArea.lambda$new$16(GenericStyledArea.java:774)
at org.reactfx.util.NonAccumulativeStreamNotifications.lambda$head$0(NotificationAccumulator.java:134)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:68)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:57)
at org.reactfx.ProperEventStream.emit(ProperEventStream.java:18)
at org.reactfx.util.NonAccumulativeStreamNotifications.lambda$head$0(NotificationAccumulator.java:134)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:68)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:57)
at org.reactfx.ProperEventStream.emit(ProperEventStream.java:18)
at org.reactfx.util.NonAccumulativeStreamNotifications.lambda$head$0(NotificationAccumulator.java:134)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:68)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:57)
at org.reactfx.ProperEventStream.emit(ProperEventStream.java:18)
at org.reactfx.MappedStream.lambda$observeInputs$0(MappedStream.java:25)
at org.reactfx.util.NonAccumulativeStreamNotifications.lambda$head$0(NotificationAccumulator.java:134)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:68)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:57)
at org.reactfx.ProperEventStream.emit(ProperEventStream.java:18)
at org.reactfx.EventStream$1.lambda$observeInputs$0(EventStream.java:423)
at org.reactfx.util.NonAccumulativeStreamNotifications.lambda$head$0(NotificationAccumulator.java:134)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:68)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:57)
at org.reactfx.ProperEventStream.emit(ProperEventStream.java:18)
at java.base/java.util.Optional.ifPresent(Optional.java:178)
at org.reactfx.FlatMapOptStream.lambda$observeInputs$0(FlatMapStream.java:49)
at org.reactfx.util.NonAccumulativeStreamNotifications.lambda$head$0(NotificationAccumulator.java:134)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:68)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:57)
at org.reactfx.ProperEventStream.emit(ProperEventStream.java:18)
at java.base/java.util.Optional.ifPresent(Optional.java:178)
at org.reactfx.FlatMapOptStream.lambda$observeInputs$0(FlatMapStream.java:49)
at org.reactfx.util.NonAccumulativeStreamNotifications.lambda$head$0(NotificationAccumulator.java:134)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:68)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:57)
at org.reactfx.ProperEventStream.emit(ProperEventStream.java:18)
at org.reactfx.DistinctStream.lambda$observeInputs$0(DistinctStream.java:23)
at org.reactfx.util.NonAccumulativeStreamNotifications.lambda$head$0(NotificationAccumulator.java:134)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:68)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:57)
at org.reactfx.ProperEventStream.emit(ProperEventStream.java:18)
at org.reactfx.EventStream$1.lambda$observeInputs$0(EventStream.java:423)
at org.reactfx.util.NonAccumulativeStreamNotifications.lambda$head$0(NotificationAccumulator.java:134)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:68)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:57)
at org.reactfx.ProperEventStream.emit(ProperEventStream.java:18)
at org.reactfx.MappedStream.lambda$observeInputs$0(MappedStream.java:25)
at org.reactfx.util.NonAccumulativeStreamNotifications.lambda$head$0(NotificationAccumulator.java:134)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:68)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:57)
at org.reactfx.ProperEventStream.emit(ProperEventStream.java:18)
at org.reactfx.FilterStream.lambda$observeInputs$0(FilterStream.java:20)
at org.reactfx.util.NonAccumulativeStreamNotifications.lambda$head$0(NotificationAccumulator.java:134)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:68)
at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:57)
at org.reactfx.ProperEventStream.emit(ProperEventStream.java:18)
at org.reactfx.SuccessionReducingStream.handleTimeout(SuccessionReducingStream.java:73)
at org.reactfx.util.FxTimer.lambda$restart$0(FxTimer.java:89)
at javafx.graphics/com.sun.scenario.animation.shared.TimelineClipCore.visitKeyFrame(TimelineClipCore.java:239)
at javafx.graphics/com.sun.scenario.animation.shared.TimelineClipCore.playTo(TimelineClipCore.java:180)
at javafx.graphics/javafx.animation.Timeline.doPlayTo(Timeline.java:177)
at javafx.graphics/javafx.animation.AnimationAccessorImpl.playTo(AnimationAccessorImpl.java:39)
at javafx.graphics/com.sun.scenario.animation.shared.SingleLoopClipEnvelope.timePulse(SingleLoopClipEnvelope.java:99)
at javafx.graphics/javafx.animation.Animation.doTimePulse(Animation.java:1101)
at javafx.graphics/javafx.animation.Animation$1.lambda$timePulse$0(Animation.java:186)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at javafx.graphics/javafx.animation.Animation$1.timePulse(Animation.java:185)
at javafx.graphics/com.sun.scenario.animation.AbstractMasterTimer.timePulseImpl(AbstractMasterTimer.java:344)
at javafx.graphics/com.sun.scenario.animation.AbstractMasterTimer$MainLoop.run(AbstractMasterTimer.java:267)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:515)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:499)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulseFromQueue(QuantumToolkit.java:492)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$11(QuantumToolkit.java:320)
at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
at java.base/java.lang.Thread.run(Thread.java:831)
Tried to call Alert.showAndWait() during layout processing. Falling back to Swing dialogs...
Hmm... the text in the error message looks incomplete (that's my fault, not yours).
Could you post the code where the error occurred? (just that one line is enough)
Edit: I don't need the code. I was able to reproduce the bug with the info I had. The bug is now fixed. And while fixing this one, I found another one (not a crash, just a small bug) that I fixed as well.
theredreaper wrote: Tue Apr 26, 2022 4:49 am Upon re-opening the program I noted that I had lost all of the changes made in my previous session. Maybe this is just a result of me being used to VSCode and its auto-save feature that saves every file you touch any time you make a change, but I found this surprising, as I had already touched and updated probably 30+ files before this crash. If it were me, (and it's obviously not, and I'm sure you have your own priorities with this project) I would consider the implementation of an auto-save feature high priority.
I'm very sorry that you lost all your changes. Yes, there is no auto-save feature at the moment. Mostly, because I personally hate this kind of auto-save. It's fine, if it's done the OpenOffice-way (not sure how VS Code does it, I've only used that for a week a couple years ago), but I can't stand auto-save if it's done the IntelliJ-way.
Unfortunately, the OpenOffice-way requires much more coding than simply triggering a save every now and then.

I might add that in a future release, but if I do, it will either be the OpenOffice way or it will be turned off by default.

theredreaper wrote: Tue Apr 26, 2022 4:49 am I will continue adding to this post if/when I come across any other issues.
Thanks.
theredreaper wrote: Tue Apr 26, 2022 4:49 am Overall, I'm very impressed. The UI is intuitive and super clean, and I'm very excited to see this project develop.
Thank you very much!
theredreaper wrote: Tue Apr 26, 2022 4:49 am If you're looking for any assistance with bugfixes/feature implementation, send me a PM, I can probably spare some time to contribute.
Thanks for the offer. Does that mean you already have Java experience?


I should be able to spare some time for fixing those bugs this weekend. Hopefully I will be able to actually fix all 3 of them (provided I hear back from you about number 3).

Have a nice day.
If you are a creator of a Tease AI personality, check out my personality editor called TAIPEJ!
theredreaper
Explorer
Explorer
Posts: 42
Joined: Wed Jul 27, 2011 11:53 pm
Gender: Male
Sexual Orientation: Open to new ideas!
I am a: Submissive
Dom/me(s): I am currently owned.
Location: You wouldn't believe me if I told you.

Re: TAIPEJ - an IDE for TeaseAI v1.1.0

Post by theredreaper »

Sorry I didn't get back to you sooner on this, I'm glad you were able to tackle all of these problems without any further input from me, though.

Yes, I do already have Java experience, and incidentally, I am freelancer in the industry. I have carved out a bit of a niche for myself as a "refactoring engineer" maybe you would call it. I often get called in to do code reviews and large scope "first pass" refactoring on various projects where teams find themselves either out of their depth, lacking senior leadership or just bogged down in inefficient code that has had too many people working on it. So I spend just about all of every day of my life looking at other people's code, trying to get in their head to figure out precisely what they were trying to accomplish, and in many cases, producing more efficient, more concise or more performant code that accomplishes the same goal. Most of the time it feels a lot like doing open heart surgery on someone's baby while they watch, judging by the reactions I usually encounter whenever I'm introduced to a new team, lol. But 21 years in the business and no one has fired me yet. Java is not necessarily my specialty, but I feel I'm proficient enough to be of use.

My availability is not quite what it was when I made this post, as in the meantime I have been taken up on an offer to help with an open-source project that interests me, but some assistance is *usually* better than no assistance. Send me a pm if there's anything I can do. I will definitely be grabbing your latest release and doing more testing. Doing a personality for good old TeaseAI is something I've always wanted to do, and with an actual IDE available, I just might be able to carve out the time to do it.
I'm very sorry that you lost all your changes. Yes, there is no auto-save feature at the moment. Mostly, because I personally hate this kind of auto-save. It's fine, if it's done the OpenOffice-way (not sure how VS Code does it, I've only used that for a week a couple years ago), but I can't stand auto-save if it's done the IntelliJ-way.
Unfortunately, the OpenOffice-way requires much more coding than simply triggering a save every now and then.
Recent versions of VS Code actually maintain a file history, I'm not sure if it's a cache of a specific size or if it's just tracking x number of revisions in the past, but to date, I have always found that if I change my mind about some changes I have made, I always have plenty of revisions in the history that I can roll back more than far enough to revert whatever stupid thing I just wasted a bunch of time producing. I think they're just stored in memory while the program is open, with the most recent revision being written to disk. I can see why you might not be too keen on an auto-save, but I think VS Code's implementation avoids most of the potential pitfalls. It's good practice to be using a version control system like git anyway, so reverting to the most recent commit should always be an option. But the feature suggestion is just one opinion coming from one user. You could just as easily flip the argument on me and say that touching that many files without saving the state of the project into something like a git commit was a bad idea anyway, lol.
theredreaper
Explorer
Explorer
Posts: 42
Joined: Wed Jul 27, 2011 11:53 pm
Gender: Male
Sexual Orientation: Open to new ideas!
I am a: Submissive
Dom/me(s): I am currently owned.
Location: You wouldn't believe me if I told you.

Re: TAIPEJ - an IDE for TeaseAI v1.1.0

Post by theredreaper »

Second of all, I thought "TAIPEJ" would fulfill that purpose, as it is pronounced exactly (and spelled almost) like a more-or-less well-known real life city ...
When I read it, I tend to pronounce it something like "Type-Edge" in my head, which makes perfect sense to me, because Typing is what you're doing a lot of when you're producing a script, and Edging is what you're doing a lot of when you're "consuming" a script! :lol:

I don't know if that was intentional but it seemed fairly well-suited to me!

Feature Suggestion:
Add the capability to update the location of the TeaseAI directory to the interface somewhere. I actually have two different versions installed, at different patch levels because it seems to me that a fork was effectively created when the community patch and the fury patch were both introduced. At least, some scripts I have work in one version and not the other, and trying to combine them via any number of methods seems to always break more than it fixes, so I gave up on trying a long time ago. Unless I've overlooked it somewhere, I'm not seeing an option in the menu structure anywhere to update the directory that the IDE looks for TeaseAI in, so I assume I'll be looking for some sort of config file to work around the problem in the meantime.
N3R0
Explorer
Explorer
Posts: 33
Joined: Tue Jun 02, 2015 1:28 pm
Gender: Male
Sexual Orientation: Straight
I am a: Switch
Location: Germany

Re: TAIPEJ - an IDE for TeaseAI v1.1.0

Post by N3R0 »

Hey theredreaper,

glad you're back.

About the auto-save thing: Whether or not anyone uses Git or a similar system is up to them. But since there already are well-working systems of that kind, I won't implement anything similar (to VS Code) in TAIPEJ. No need to "re-invent the squared wheel". ;-)
theredreaper wrote: Sat Jun 18, 2022 8:04 pm
Second of all, I thought "TAIPEJ" would fulfill that purpose, as it is pronounced exactly (and spelled almost) like a more-or-less well-known real life city ...
When I read it, I tend to pronounce it something like "Type-Edge" in my head, which makes perfect sense to me, because Typing is what you're doing a lot of when you're producing a script, and Edging is what you're doing a lot of when you're "consuming" a script! :lol:
I don't know if that was intentional but it seemed fairly well-suited to me!
:lol: No, that was not intentional. This pronounciation hasn't even crossed my mind. That's an interesting interpretation. :-D

theredreaper wrote: Sat Jun 18, 2022 8:04 pm Feature Suggestion:
Add the capability to update the location of the TeaseAI directory to the interface somewhere. I actually have two different versions installed, at different patch levels because it seems to me that a fork was effectively created when the community patch and the fury patch were both introduced. At least, some scripts I have work in one version and not the other, and trying to combine them via any number of methods seems to always break more than it fixes, so I gave up on trying a long time ago. Unless I've overlooked it somewhere, I'm not seeing an option in the menu structure anywhere to update the directory that the IDE looks for TeaseAI in, so I assume I'll be looking for some sort of config file to work around the problem in the meantime.
No need to mess with config files.
  1. close TAIPEJ, if it's running
  2. rename the currently selected TAI installation folder.
  3. (re-)start TAIPEJ -> it will ask you for a TAI folder again
  4. select the other TAI installation
  5. undo the rename from step 2 (important, since starting TAI with a changed path will make you lose some of your settings, because of how TAI handles its own preferences)

I already have this feature on my to-do list. But given how few personalities there are, I wasn't expecting, that there's anyone who actively develops personalities for more than one TAI edition.
I'll increase the priority of this feature.

I don't know when the next version will be available, though, because I'm currently taking CPD lessons and I have 6 more weeks to go. My current dev build already has a working command guide (it's just an interactive list at this point, not a real guide).
Hopefully it won't take too long until the next version is ready for release.

Have fun with version 1.1.0 'til then!
If you are a creator of a Tease AI personality, check out my personality editor called TAIPEJ!
Post Reply

Who is online

Users browsing this forum: No registered users and 11 guests