Jump to content

Jokerman

Active Members
  • Posts

    21
  • Joined

  • Last visited

1 Follower

About Jokerman

  • Birthday 07/15/1977

Recent Profile Visitors

360 profile views

Jokerman's Achievements

Seeker

Seeker (1/7)

6

Reputation

  1. Thanks for replying to mLipok's questions! I've had my face in code almost nonstop since my last reply. Sure, I'd be happy to test for you! Feel free to DM to give instructions or whatever.
  2. I'll take your word for it. I haven't looked into the inner-workings of ISN. 😁
  3. TouchΓ©! You're probably right. I'm not very good at showing appreciation to posts I find helpful. It isn't that I'm not appreciative but that I'm forgetful. I'm usually in a rush and often time stressed about not being able to figure something out so I hit the forum in the hope someone else has already run into the same thing - and more often than not someone has. Once I find the solution I jump back into fixing my issue and finishing the project with the intention to go back to give thanks and like posts...but inevitably I end up forgetting. My apologies to you and everyone else who has helped me!
  4. Honestly, I don't know if that's an option in Scintilla but it's an option in ISN AutoIt Studio. It's an add-on to highlighting all matches when you highlight something - in addition to highlighting all matches you also get those markers next to each line that has a match in it. It makes scanning through your script for matches much easier visually since you only have to scan the margin for markers instead of scanning each line of code for the highlighted text. Basically, scan the margin for a marker then scan the line for the highlighted text.
  5. Question 1: You can get those markers by enabling the "In addition, add a marker to the line" in ISN AutoIt Studio's Settings (after you select "Script Editor" in Navigation it's under "Write settings"). Question 2: The markers not highlighting everything visible is the issue that I ran into (that, until I made the video, I was failing horribly to explain 🀣). ISI360 has confirmed the issue so now it'll come down to how they implemented intellimark. You're right - if the code relies heavily on Scintilla's implementation it may not be easily fixable, if at all. But if ISI360's intellimark functionality is custom code (and it may be considering the massive intellimark performance optimization they introduced in 1.13) I have faith ISI360 will figure it out. 🀞 Btw, huge respect and thanks to you, mLipok. Your posts and guidance have helped me immensely over the years. πŸ™
  6. https://i.gyazo.com/efd44dbb9c55cf0525e5d68aa49900e7.mp4 Here's a screen recording trying to show what I mean by the intellimark functionality not taking into account folded code (in this case it's a Region but the same thing happens with all folded code). As you can see in the video when I highlight something while at the top of the tab with the Region folded intellimark only highlights/marks down to line 55 but if I scroll down then intellimark higlights/marks down to line 67 - but if the Region isn't folded then intellimark highlights all the visible lines normally. Also, while not shown in the video, if I hit F8 to turn off the bottom debug window then more lines of code get highlighted without scrolling down (line 68) - this is part of what makes me assume the intellimark functionality is working based on the lines visible in ISN Studio's viewport. Basically, it seems to me (and please correct me if I'm wrong) like the intellimark functionality is using an algorithm to try to determine what's in ISN Studio's viewport so it only highlights matches and marks lines as they become visible (rather than processing the entire tab all at once). If my assumption is correct then it seems like the algorithm isn't accounting for any lines of code that are currently folded and have a + next to them you can click to expand them (like comments, Regions, For/If/Switch/Select statements, etc.). Sorry I can't do a better job of describing the issue. If there's anyone reading this who thinks they understand what I'm saying and can describe it better (or speaks fluent German) please don't hesitate to chime in! This is just one of many reasons I'm a coder and not a teacher. πŸ˜‚
  7. Alright, I can confirm that intellimark does seem to be working after enabling in Settings - I apologize for that rabbit hole (I swear I tested it at least 2-3 times). After further testing it seems like the method you used to optimize the intellimark functionality may be limiting the lookahead to a certain number of lines or characters to take advantage of the fact that stuff offscreen doesn't need to be marked until it's about to become visible (which is a brilliant optimization). Unfortunately, it seems like maybe the line/character lookahead isn't taking into account any folded lines of code. Because of that any tab that has a lot of folded code causes the intellimark functionality to "fall behind" the code currently visible in ISN's viewport. In effect, I need to scroll past (in some cases, like tabs with a lot of folded code, well past) the code I want marked and then scroll back up to the code to see what is marked. This also, in effect, makes it so the code at the bottom of these tabs can never be intellimarked because you can't scroll past the bottom of the code. Let me know if that makes sense or if you need further explanation. Also, thank you for being so responsive and looking into these issues! I really don't know what I would do without ISN Studio. ❀️
  8. What I meant by that part is that I had already modified the "enable_intelimark" and "intelimark_also_mark_line" (single 'L') lines to "enable_intellimark" and "intellimark_also_mark_line" (double 'L') and re-opened ISN to find the intellimark functionality working in my first tab. When I then opened Settings, modified and saved the intellimark options at that point ISN left my modified "enable_intellimark" and "intellimark_also_mark_line" (double 'L') lines and simply inserted 2 new "enable_intelimark" and "intelimark_also_mark_line" (single 'L') lines lower in the config.ini (simulated in the attached screenshot since I'd already removed the single 'l' lines). Also, as soon as I change the intellimark options in Settings and click "Save and Close" then intellimark stops working completely until I close and re-open ISN Studio (since the working double 'L' lines are still in the config.ini - along with the single 'L' lines). I hope that helps. If it's still too vague please let me know what unclear and I'll try to describe it better or give better details! πŸ‘
  9. Hi @ISI360, First off, thank you for ISN AutoIt Studio! So many great features and it just keeps getting better! I wanted to let you know about an issue I've run into with 1.13 regarding the intellimark functionality. Unfortunately, after installing 1.13 and re-enabling both intellimark options in Settings I found that the functionality wasn't working at all. I tried enabling each different combination of highlighting matches and marking lines but none of them got it to work. After looking through the config.ini I found the following lines: enable_intelimark=true intelimark_also_mark_line=true After closing ISN, manually changing those lines to the following by changing 'intelimark' to 'intellimark', and re-opening ISN the functionality is now working again (and I must add that it's mind-blowingly fast - well done!). enable_intellimark=true intellimark_also_mark_line=true In addition, after changing the settings inside ISN and checking the config.ini I found that my double 'l' lines weren't changed or removed and, instead, the single 'l' lines were simply re-inserted. However, changing the setting inside ISN kills the intellimark functionality until I close and re-open ISN (single 'l' lines do not need to be removed for functionality to return). Between my description and the config.ini examples you probably already know what happened but, if I had to guess, either something weird happened with my installation or you may have changed spellings while massaging the code for the (absolutely massive) speed increase and missed a spot in the code responsible for writing/modifying the config.ini (since reading the config.ini on startup appears to work fine). Not a huge issue for me since I already got it working but I wanted to let you know and try to give you some solid details so hopefully it's a quick and easy fix. For me, at least, with the basically instantaneous highlighting and marking I'll probably never turn the feature off again! There's one other issue I wanted to bring to your attention which is also relatively minor... I use ISN in the layout pictured below and I generally keep the Project Tree/UDF Explorer/To-Do List/etc. side pane minimized. As you can see in the screenshot, with 1.13 when I open Settings then click Save and Close (no need to modify any settings) the UDF Explorer/To-Do List/Log/Notes pane pops out on its own and to minimize it again I have to restore then minimize the entire side pane by clicking the Project Tree label twice. Again, not a huge issue since I rarely open Settings but just something I wanted to bring to your attention. If you're anything like me (and, if ISN AutoIt Studio is any example, I think you are) then you're a stickler for details, take pride in your work, and always like having your stuff be as polished as possible. Once again, fantastic work and thank you so much for such a wonderful program! ISN Studio is a great productivity booster and makes coding both less work and, in turn, far more enjoyable! I wish all the best for you! EDIT: I thought intellimark was working normally but it turns out it's only working correctly for my first 2 tabs and 91 lines into my third tab. Without going through the code I'm at a loss as to what's limiting the intellimark functionality but I wanted to let you know about my latest realization since you might know off the top of your head what it could be.
  10. Wow! Thank you for all the info and advice, jchd! I don't mind the wall of text, particularly when it's pack with as much good stuff as yours. 😲 Luckily, I do have a little bit of experience with databases (including SQL) so while I have a hard time coming up with the layout and design myself I think I understand (pretty well, anyway lol) what you've described. I've already read through your post a couple of times and downloaded the SQLite Expert installer and your example DB. I think I'm going to simply need to do some playing with what you've given me and add on from there to see what I come up with. I figure once I come up with the final design then I'll create a brand new DB based on the final design so I start from a clean DB after I know not to do the ridiculous stuff I'll no doubt start off doing. 🀣 Thank you, again, for the detail and incredible amount of information you provided, jchd! I believe I have a serious amount of work and learning ahead of me!
  11. The version which allows strong encryption sounds like a great fit. Obviously, it isn't necessary for the purposes of country and state conversion but it could be key for future feature additions we've been thinking about. I love that it's essentially transparent since, as you know, the single task nature of AutoIt tends to make any type of stall very visible (unless accounted for with something like a progress animation, of course). I get the idea of extracting and re-integrating the database as a resource but I don't think I can take advantage of the idea in our case. Unfortunately, I believe storing a modified database back into the executable will invalidate the digital signature on our executable. However, taking our future plans into account, and that the DB can be encrypted, I think storing the DB externally will be just fine. I'll give a high level view of the current process that data goes through in order to help give some additional insight into how the conversion code is being used. Currently, the way things work is the user imports their data using a standard template which is imported as either XLSX or tab delimited. When imported our software does some validation on the data and converts all countries and states (among other fields) to our internal default of abbreviations to optimize memory and time (I make sure all the Case lines for my Switch statements begin with the abbreviation). All user data is currently held internally in 2D arrays. Once the user selects which apps they want to export to and hit Next our software starts the conversion. At this point we simply loop through the apps 1 by 1, and for each app loop through the profiles 1 by 1, simultaneously a) converting the data to the preferred format for the app currently being converted, and b) placing the formatted data into the correct places in the output variable (for most apps it's a nested array representing a JSON, but for a few it's a simple 2D array if the app needs delimited or XML). For most of the apps we support I have a nested array of configuration data that tells our software how to process that app like which fields need what data and how that data should be formatted. Each of those app processing variables includes which fields are countries or states and whether they need to be full names or abbreviations. When our software reaches one of those fields it basically just plugs the configuration elements from that sub-array into the conversion function passed variables and the conversion function returns the proper format. Right now my main state conversion functions each support a single country and depend on 3 main passed variables - the state being converted, the name of the app currently being converted (in order to determine the correct formatting in case the app has "special needs" like $g__sAppNameA through $g__sAppNameQ above), and $bAbbrev indicating whether to return the abbreviation or the full name. This is the main functionality I want to recreate using another method. I also have a country conversion function to return the correct format using the same 3 passed variables (except country name rather than state name). In addition, I have 2 more functions named _SetStateByCountry() and _SetStateAndCountry() which use the same 3 variables but add 1 more to have both the country and the state passed - these work by calling the already described conversion functions and do exactly what they say. All functions work using Return values except _SetStateAndCountry() which uses ByRef for both the country and state. I don't know if that's what you were looking for but I hope it at least gives you some of the information you need. My apologies for being so database illiterate that I'm not sure how to provide what you're looking for but I've never had a need for databases in the past. Or, probably more accurately, I never knew I had a need for databases in the past. 🀣
  12. That's an interesting approach! Unfortunately, I'm not really a database guy so I can't picture how I would best utilize a database for this purpose. Would I be storing a separate conversion for each country/state supported by each application? Or would each individual country be stored in a single table which is queried for all applications? Also, I was trying to avoid having an external file associated with the conversion but I suspect using SQLite would require just that. While that isn't a deal breaker I have to ask about security. Not being a database guy my questions are: How secure is SQLite and/or what measures need to be put in place to make it secure? And if database encryption is employed what kind of a hit does it have on performance (compared to SQLite w/o encryption as well as strictly AutoIt code)? Btw, I have read some of the benefits of using SQLite with AutoIt for quite a few things (many of them by or because of you, jchd!) but I haven't yet delved into those waters yet. It's a little intimidating, and thinking in terms of databases hasn't clicked for me yet. Any advice? Or good example code I can go look at? Thanks again for taking your time out to read and reply!
  13. Thank you to all of you for your replies and suggestions! I apologize for having been gone for a while but I've been trying to complete v2 of our software and things have been insane. Things have calmed down a bit (for the moment, at least) so I have some time to look at this again. I like the ideas (and I'm already using and loving ResourcesEx) but I'm not sure how I can incorporate them into the situation I'm dealing with. I'm afraid the example I gave may not have effectively put into perspective just how difficult the situation is. Here's an another example of our conversion functions - this one for Japan prefectures: Func _StateConvertJP($sState, $iProfileNum = -1, $bAbbrev = False, $sAppName = "") ; Setting passed variables if Default was passed If $iProfileNum = Default Then $iProfileNum = -1 If $bAbbrev = Default Then $bAbbrev = False If $sAppName = Default Then $sAppName = "" ; Setting $bAbbrev to false for g__sAppNameA since the rest of the states besides JP are abbreviated If $sAppName = $g__sAppNameA Then $bAbbrev = False ; For the main Switch we need to remove extra spaces from $sState (because of apps like $g__sAppNameO and $g__sAppNameP) ; and force to upper for matching Switch StringUpper( StringStripWS($sState, $STR_STRIPLEADING + $STR_STRIPTRAILING + $STR_STRIPSPACES) ) Case "JP-23", "AICHI", "AICHI-KEN", "AICHI KEN", "ζ„›ηŸ₯県", "ζ„›ηŸ₯" Switch $sAppName Case $g__sAppNameA, $g__sAppNameB, $g__sAppNameC, $g__sAppNameD, $g__sAppNameE, $g__sAppNameF Return "Aichi" Case $g__sAppNameG, $g__sAppNameH Return "aichi" Case $g__sAppNameI, $g__sAppNameJ Return "Aichi-ken" Case $g__sAppNameK, $g__sAppNameL, $g__sAppNameM, $g__sAppNameN Return "ζ„›ηŸ₯県" Case $g__sAppNameO, $g__sAppNameP ; g__sAppNameO and g__sAppNameP need a space in front of the Kanji Return " ζ„›ηŸ₯県" Case $g__sAppNameQ ; Needed because g__sAppNameQ requires both formats but in different fields If $bAbbrev Then Return "JP-23" Else Return "ζ„›ηŸ₯県" EndIf EndSwitch If Not $bAbbrev Then Return "Aichi" Else Return "JP-23" EndIf Case Else Return SetError(1, $g__eError_UnknownState, $sState) EndSwitch EndFunc ;==> _StateConvertJP() I only included a single prefecture but I think this code better demonstrates just how complicated things are with all the apps we're trying to support conversion for. Some apps require a particular format, some apps need both abbreviations and full names depending on the field. It's really a nightmare. On the upside, because I've used Switch statements throughout the conversion code it's very fast - it just sucks to create and maintain. πŸ˜† Honestly, I don't know if there's a good answer for what I'm trying to accomplish but what I do know is I certainly haven't been able to come up with a good alternative. Thank you again for the suggestions already provided, as well as any possible solutions anyone might come up with in the future! πŸ™
  14. Apologies @JLogan3o13, I figured since I was looking more for a method than an AutoIt-specific solution the other forum might have been the appropriate location. I guess I was wrong. πŸ™
  15. @stephensmith You may want to have a look at the Forum Rules post - specifically the 4th bullet point. Most things about games are specifically off-limits on these forums so think carefully before bringing them up. πŸ˜‰
Γ—
Γ—
  • Create New...