Jump to content
Ketarin forum

appyface

Members
  • Posts

    459
  • Joined

  • Last visited

Everything posted by appyface

  1. Hi Flo, Thanks for implementing feature to check a variable for update indicating. The text of the input box says to provide a variable, I did but Ketarin didn't use it and updated the entry anyway. I discovered I have to put braces around it for Ketarin to use it. I mention this only because, in other places where a variable is mentioned as the input (e.g File -> Settings -> Variable to use for Custom column), the braces are not specified around the variable name. I'm looking forward to exercising this new version! Thanks and regards, --appyface
  2. I'd like to display 'target' column in Ketarin but I don't like where it is in the column order, so I have hidden it. Would be nice if I could drag-n-drop or otherwise reorder the columns being displayed, so I could put target at the far right. Post 1.0 wishlist is fine... Thanks and regards, --appyface
  3. Agreed, I'd prefer two menu entries, so it is clear what is being chosen... but it is up to Flo if/how it is implemented.
  4. Hi Flo, Pilot error to be sure :-) but if you can save me from myself I'd really appreciate it! If I go to menu choice File -> Export, and don't have any application selected (highlighted), I get a helpful pop-up "You did not select any jobs to export.". On the other hand, if I do have an entry highlighted and do the export, Ketarin doesn't utter a sound and happily exports whatever I have selected. Which is as it should be. Except that I was meaning to export everything and forgot to select all entries first! I have made over time what I thought were several exports, as supplemental backups of my db, but in fact these were only the single entries I happened to have selected. D'oh! Would you please consider putting TWO export choices in the File menu (Export selected, Export all), or pop up a choice box when invoking the export, or some other way to clue me in that I'm NOT about to do an export all, it would be very much appreciated. Thanks and regards, --appyface
  5. Using 0.9.9.20. Just a little bit ago, I was editing a variable inside a download entry, after I clicked on a variable, the info didn't populate in the panes right away. I clicked "LOAD" and Ketarin just hung. I could kill Ketarin by clicking the 'x' in upper right corner though (verified as gone with Windows Task Manager). Now when I open Ketarin, if I click "update all" button, on the very first entry I get the popup "Ketarin has a problem and needs to close." and to send/don't send error report to m$. I sent one, not sure that gets back to you though. I have closed and (re)opened Ketarin several times and every time I try to update all apps I get this popup. Interestingly, Ketarin's downloading threads continue on for a little while more even though this popup appeared on the first entry accessed. Completely repeatable here, just launch Ketarin and try the 'update now' button. Ideas? Thanks and regards, --appyface
  6. Hi Flo, I have the variable for Custom Column set to vers in menu choice File -> Settings. I have enabled the custom value column. I have defined vers as a variable in (almost) all my downloads and populated. As per a previous post, you mentioned if a variable is not utilized, Ketarin is efficient and doesn't populate it, which is nice and efficient. And that appears to be the reason for what I'm seeing: The entries that are displaying a value for vers in the Custom Column, are only the ones that use the variable in URL or download path/file etc. I agree with and like the efficiency. But in this case I feel Ketarin should consider the variable "used" since it is the definition for the custom column, and populate it in every entry that has it? Thanks and regards, --appyface
  7. OK here's a twist for you. I just loaded up Ketarin, and used copy/paste to create a duplicate entry of the one above. I go to variables and click on URL variable and it loads the correct content!! Then I click on filename variable and it loads the four lines. A swap of the above results. Add to it I go back into my original entry and now it loads the correct webpage contents to BOTH variables. <twilight zone music> I think I'd better mail you my jobs.db file. Agreed? </twilight zone music>
  8. Now that is interesting. Here's the content I get when I click on "filename" variable, in the variable window. I even closed Ketarin down and reopened it, and I still get the webpage contents. ???? <HTML> <head> <div style="display: none;"> </div><link rel="stylesheet" type="text/css" href="/hardware/css/style.css" xmlns:msxsl="urn:schemas-microsoft-com:xslt"><title xmlns:msxsl="urn:schemas-microsoft-com:xslt">Microsoft Mouse and Keyboard Hardware - Download Software</title><link type='text/css' rel='Stylesheet' href='/library/mnp/2/aspx/css.aspx?locale=en-us&name=Menu&static=Page' /> <script type='text/javascript' language='Javascript' src='/hardware/mnp_utility.mspx/menujs?mnpshell=%2fhardware%2fConfiguration.xml&clicktrax=False'></script> <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"><link rel='stylesheet' type='text/css' href='/library/toolbar/3.0/css.aspx?c=/hardware/Configuration.xml'/><script language='JavaScript'>var doImage=doImage;var TType=TType; function mhHover(tbl,idx,cls){var t,d;if(document.getElementById)t=document.getElementById(tbl);else t=document.all(tbl);if(t==null)return;if(t.getElementsByTagName)d=t.getElementsByTagName("TD");else d=t.all.tags("TD");if(d==null)return;if(d.length<=idx)return;d[idx].className=cls;} function footerjs(doc){if(doImage==null){var tt=TType==null?"PV":TType;doc.write('<layer visibility="hide"><div style="display:none"><img src="http://c.microsoft.com/trans_pixel.asp?source=www&TYPE=' + tt + '&p=hardware_download&URI=%2fhardware%2fdownload%2fDownloadResult.aspx%3fcategory%3dMK%26type%3dMouse%26name%3dw_lmouse5000%26os%3dXP_32%26lang%3den&GUID=1F4FC18C-F71E-47FB-8FC9-612F8EE59C61&lc=en-US" width=0 height=0 hspace=0 vspace=0 border=0 alt=""/></div></layer>');}} var rsltextbox = 'msviLSBtbox'; var wtflag = false; function stripSymbols () { var objrslttextbox = getObjectById(rsltextbox); if (objrslttextbox) { var form = objrslttextbox.form; var s = objrslttextbox.value; filteredValues = "<>"; var i; var returnString = ""; for (i = 0; i < s.length; i++) { var c = s.charAt(i); if (filteredValues.indexOf© == -1) { returnString += c; } else { returnString += " "; } } objrslttextbox.value = returnString; } if(!wtflag) { trackLSB("Site"); } } function addSubmitEvent() { var objrslttextbox = getObjectById(rsltextbox); if (objrslttextbox) { var form = objrslttextbox.form; if (window.attachEvent) { form.attachEvent("onsubmit",stripSymbols); } else { form.addEventListener("submit",stripSymbols,false); } } } function getObjectById(elid) { if (document.getElementById) { return document.getElementById(elid); } else if (document.all) { return document.all[elid]; } else if (document.layers) { return document.layers[elid]; } } if (window.attachEvent) { window.attachEvent("onload",addSubmitEvent); } else { window.addEventListener("load",addSubmitEvent,false); } function trackLSB(type) { if (typeof dcsMultiTrack == "function") { var qu = document.getElementById("msviLSBtbox").value; var dcsuri = "results.aspx"; var dcssip, ti; if (type == "Site") { dcssip = "search.microsoft.com"; ti = "SearchButton: OnSite"; } else if (type == "Web") { dcssip = "search.live.com"; ti = "SearchButton: Web"; } dcsMultiTrack("DCS.dcsuri", dcsuri, "DCS.dcssip", dcssip, "WT.ti", ti, "WT.dl", "2", "WT.z_srch_t", qu, "DCS.dcsqry", "", "WT.ad", "", "WT.mc_id", ""); wtflag = true; DCS.dcsuri=DCS.dcssip=DCS.dcsqry=WT.ti=WT.z_srch_t="";} }</script><meta name="WT.sp" content="_hardware_" /><script language='JavaScript' src='http://js.microsoft.com/library/svy/broker.js'></script> </head> <body MS_POSITIONING="GridLayout"> <!--NOINDEX_START--><script language="Javascript"> if (self.name == "MNPMainFrame") top.location.href = self.location.href; </script><div id="msviMasthead"><table cellpadding="0" cellspacing="0" width="100%" border="0"><tr><td width="100%"><table cellpadding="0" cellspacing="0" width="100%" height="22" border="0"><tr><td id="msviMarketing" bgcolor="#CC0000" nowrap=""><a href="http://go.microsoft.com/fwlink/?LinkID=92799">Click Here to Install Silverlight</a></td><td width="100%" bgcolor="#CC0000"><img src="/library/toolbar/3.0/gradient.aspx?a=CC0000&b=CC0000&w=250&h=22&d=ltr&c=u6248p6Bnf3AVpkVo2x9wBWoeZc%3d" width="250" height="22" alt="*" title=""></td></tr></table></td><td id="msviGlobalToolbar" bgcolor="#CC0000" height="22" nowrap="" dir="ltr" align="left"><table cellpadding="0" cellspacing="0" border="0"><tr><td id="msviRegionId" nowrap>United States</td><td id="msviRegionSelector" nowrap><a href="http://www.microsoft.com/worldwide">Change</a></td><td class="gtsep">|</td><td id="msviSiteMap" nowrap><a href="http://www.microsoft.com/library/toolbar/3.0/sitemap/en-us.mspx">All Microsoft Sites</a></td><td class="msviPPSpace"></td></tr></table></td></tr></table><table cellpadding="0" cellspacing="0" width="100%" border="0"><tr valign="top"><td><table cellpadding="0" cellspacing="0" width="100%" height="42" border="0" style="height:expression(parentElement.parentElement.parentElement.parentElement.offsetHeight)"><tr valign="top"><td id="msviBrandBanner" bgcolor="CC0000"><a href="http://www.microsoft.com/hardware"><img src="/library/toolbar/3.0/images/banners/hardware_masthead_ltr.gif" width="136" height="42" alt="Microsoft Hardware" title="" border="0"></a></td></tr></table></td><td id="msviGlobalSearch" width="100%" bgcolor="#FFFFFF"><div class="msviLSBsform"><form id="msviLSBForm" action="/library/toolbar/3.0/search.aspx" target="_top"><input type="hidden" name="View" value="en-us"><input type="hidden" name="charset" value="iso-8859-1"><input id="msviLSBtbox" type="text" name="qu" value=""><input id="msviLSBssearch" title="Search Microsoft" type="image" name="site" src="/library/toolbar/3.0/images/LSB/glyph_search.gif" align="absmiddle" onclick="trackLSB('Site')"><input id="msviLSBWeb" title="Search the internet" name="sweb" type="submit" value="" onclick="trackLSB('Web')"><span id="msviLSBlogo" class="msviLSBlogo"></span></form></div></td></tr></table><table id="msviSubbanner" bgcolor="#990000" width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td><img src="/library/toolbar/3.0/subbanner.aspx?text=TWljcm9zb2Z0IEhhcmR3YXJl&fore=FFFFFF&b=990000&s=CC0000&r=False&font=Segoe%2c+13pt&v=0&c=UTOwo45vG9QDq5J1l%2b8tL9tTjZ4%3d" width="467" height="26" alt="Microsoft Hardware" title="" border="0" /></td><td width="100%"> </td></tr></table></div> <table cellpadding="0" cellspacing="0" border="0" width="100%" dir="LTR"> <tr valign="top"> <td height="100%" style="overflow-x: hidden" width="181"> <div id="mnpMenuTop" class="mnpMenuTop" style="overflow-x: hidden; width: 181px" url="/hardware/download/DownloadResult.aspx" dir="LTR"><div class="mnpInherit"><div class="mnpMenuRow" style="border-color: #F1F1F1; background: #F1F1F1; width: 153px; overflow-x: hidden"><img width="4" height="7" border="0" alt="*" title="" class="mnpMenuArrow" src="/library/mnp/2/gif/arrowLTR.gif" style="left: 166px; visibility: hidden"><a href="/hardware/default.aspx">Hardware Home</a></div><div class="mnpMenuLabel">Products</div><div class="mnpMenuRow" style="border-color: #F1F1F1; background: #F1F1F1; width: 153px; overflow-x: hidden" menu="m58239bac2e334c4f93a78cbf9196b13e"><img width="4" height="7" border="0" alt="*" title="" class="mnpMenuArrow" src="/library/mnp/2/gif/arrowLTR.gif" style="left: 166px; visibility: hidden"><a href="/hardware/mouseandkeyboard/default.mspx">Mice and Keyboards</a></div><div class="mnpMenuRow" style="border-color: #F1F1F1; background: #F1F1F1; width: 153px; overflow-x: hidden" menu="mbff959210aa74aabac29fbc493d59f83"><img width="4" height="7" border="0" alt="*" title="" class="mnpMenuArrow" src="/library/mnp/2/gif/arrowLTR.gif" style="left: 166px; visibility: hidden"><a href="/hardware/digitalcommunication/default.mspx">Webcams and Headsets</a></div><div class="mnpMenuRow" style="border-color: #F1F1F1; background: #F1F1F1; width: 153px; overflow-x: hidden" menu="maa9b369446554d8683b394ad16e655d9"><img width="4" height="7" border="0" alt="*" title="" class="mnpMenuArrow" src="/library/mnp/2/gif/arrowLTR.gif" style="left: 166px; visibility: hidden"><a href="/hardware/gaming/gaming.mspx">Gaming Products</a></div><div class="mnpMenuRow" style="border-color: #F1F1F1; background: #F1F1F1; width: 153px; overflow-x: hidden"><img width="4" height="7" border="0" alt="*" title="" class="mnpMenuArrow" src="/library/mnp/2/gif/arrowLTR.gif" style="left: 166px; visibility: hidden"><a href="/hardware/mediacenter/mediacenter.mspx">Media Center Peripherals</a></div><div class="mnpMenuRow" style="border-color: #F1F1F1; background: #F1F1F1; width: 153px; overflow-x: hidden"><img width="4" height="7" border="0" alt="*" title="" class="mnpMenuArrow" src="/library/mnp/2/gif/arrowLTR.gif" style="left: 166px; visibility: hidden"><a href="/hardware/mobility.mspx">Mobile Products</a></div><div class="mnpMenuRow" style="border-color: #F1F1F1; background: #F1F1F1; width: 153px; overflow-x: hidden"><img width="4" height="7" border="0" alt="*" title="" class="mnpMenuArrow" src="/library/mnp/2/gif/arrowLTR.gif" style="left: 166px; visibility: hidden"><a href="/hardware/presenter/presenter.mspx">Presenters</a></div><div class="mnpMenuRow" style="border-color: #F1F1F1; background: #F1F1F1; width: 153px; overflow-x: hidden"><img width="4" height="7" border="0" alt="*" title="" class="mnpMenuArrow" src="/library/mnp/2/gif/arrowLTR.gif" style="left: 166px; visibility: hidden"><a href="/hardware/specialoffers.mspx">Special Offers</a></div><div class="mnpMenuRow" style="border-color: #F1F1F1; background: #F1F1F1; width: 153px; overflow-x: hidden"><img width="4" height="7" border="0" alt="*" title="" class="mnpMenuArrow" src="/library/mnp/2/gif/arrowLTR.gif" style="left: 166px; visibility: hidden"><a href="/hardware/otherproducts/default.mspx">Other Products</a></div><div class="mnpMenuBorder" style="width: 180px"></div><div class="mnpMenuLabel">Resources</div><div class="mnpMenuRow" style="border-color: #F1F1F1; background: #F1F1F1; width: 153px; overflow-x: hidden"><img width="4" height="7" border="0" alt="*" title="" class="mnpMenuArrow" src="/library/mnp/2/gif/arrowLTR.gif" style="left: 166px; visibility: hidden"><a href="/hardware/tours/default.aspx">Product Tours</a></div><div class="mnpMenuRow" style="border-color: #F1F1F1; background: #F1F1F1; width: 153px; overflow-x: hidden"><img width="4" height="7" border="0" alt="*" title="" class="mnpMenuArrow" src="/library/mnp/2/gif/arrowLTR.gif" style="left: 166px; visibility: hidden"><a href="/hardware/downloads/default.mspx">Download Software</a></div><div class="mnpMenuRow" style="border-color: #F1F1F1; background: #F1F1F1; width: 153px; overflow-x: hidden" menu="m879f1dfe73fbce8619700800b53cb24b"><img width="4" height="7" border="0" alt="*" title="" class="mnpMenuArrow" src="/library/mnp/2/gif/arrowLTR.gif" style="left: 166px; visibility: hidden"><a href="/hardware/support/default.mspx">Product Support</a></div><div class="mnpMenuRow" style="border-color: #F1F1F1; background: #F1F1F1; width: 153px; overflow-x: hidden"><img width="4" height="7" border="0" alt="*" title="" class="mnpMenuArrow" src="/library/mnp/2/gif/arrowLTR.gif" style="left: 166px; visibility: hidden"><a href="/hardware/registration/default.mspx">Register Your Product</a></div><div class="mnpMenuRow" style="border-color: #F1F1F1; background: #F1F1F1; width: 153px; overflow-x: hidden" menu="m633ffc6a964547f5985495efa60546cd"><img width="4" height="7" border="0" alt="*" title="" class="mnpMenuArrow" src="/library/mnp/2/gif/arrowLTR.gif" style="left: 166px; visibility: hidden"><a href="/hardware/resources/default.mspx">Documentation</a></div><div class="mnpMenuRow" style="border-color: #F1F1F1; background: #F1F1F1; width: 153px; overflow-x: hidden" menu="m0c402e7ee33149cbb07a985b083c219c"><img width="4" height="7" border="0" alt="*" title="" class="mnpMenuArrow" src="/library/mnp/2/gif/arrowLTR.gif" style="left: 166px; visibility: hidden"><a href="/hardware/ergonomics/comfort.mspx">Comfort and Ergonomics</a></div><div class="mnpMenuRow" style="border-color: #F1F1F1; background: #F1F1F1; width: 153px; overflow-x: hidden" menu="m635ffc6a2f8076438b1695efa60546cd"><img width="4" height="7" border="0" alt="*" title="" class="mnpMenuArrow" src="/library/mnp/2/gif/arrowLTR.gif" style="left: 166px; visibility: hidden"><a href="/hardware/discover.mspx">About Hardware</a></div><div class="mnpMenuRow" style="border-color: #F1F1F1; background: #F1F1F1; width: 153px; overflow-x: hidden"><img width="4" height="7" border="0" alt="*" title="" class="mnpMenuArrow" src="/library/mnp/2/gif/arrowLTR.gif" style="left: 166px; visibility: hidden"><a href="/hardware/sitemap.mspx">Site Map</a></div><div class="mnpMenuBorder" style="width: 180px"></div><div class="mnpMenuLabel">Information For</div><div class="mnpMenuRow" style="border-color: #F1F1F1; background: #F1F1F1; width: 153px; overflow-x: hidden"><img width="4" height="7" border="0" alt="*" title="" class="mnpMenuArrow" src="/library/mnp/2/gif/arrowLTR.gif" style="left: 166px; visibility: hidden"><a href="/hardware/business/default.aspx">Business Customers</a></div><div class="mnpMenuRow" style="border-color: #F1F1F1; background: #F1F1F1; width: 153px; overflow-x: hidden"><img width="4" height="7" border="0" alt="*" title="" class="mnpMenuArrow" src="/library/mnp/2/gif/arrowLTR.gif" style="left: 166px; visibility: hidden"><a href="http://www.mshardwareguide.com">Press and Reviewers</a></div><div class="mnpMenuRow" style="border-color: #F1F1F1; background: #F1F1F1; width: 153px; overflow-x: hidden" menu="m8233ca387f0640c9a843de211a9bb4e5"><img width="4" height="7" border="0" alt="*" title="" class="mnpMenuArrow" src="/library/mnp/2/gif/arrowLTR.gif" style="left: 166px; visibility: hidden"><a href="/hardware/partners/default.mspx">OEM Partners</a></div><div class="mnpMenuRow" style="border-color: #F1F1F1; background: #F1F1F1; width: 153px; overflow-x: hidden" menu="m7bbb695ba4854d12854ae844eb0d0598"><img width="4" height="7" border="0" alt="*" title="" class="mnpMenuArrow" src="/library/mnp/2/gif/arrowLTR.gif" style="left: 166px; visibility: hidden"><a href="/hardware/mouseandkeyboard/licensing.mspx">IP Licensing</a></div><div class="mnpMenuRow" style="border-color: #F1F1F1; background: #F1F1F1; width: 153px; overflow-x: hidden" menu="m691acea60f164e6498887d5a0aed059d"><img width="4" height="7" border="0" alt="*" title="" class="mnpMenuArrow" src="/library/mnp/2/gif/arrowLTR.gif" style="left: 166px; visibility: hidden"><a href="/hardware/related/related.mspx">Related Products</a></div><div class="mnpMenuBorder" style="width: 180px; margin-bottom: 0px"></div></div></div> <div class="mnpAds" style="width: 181px; height: 100%; padding-bottom: 20px; background: #F1F1F1; border-style: solid; border-color: #999999; border-width: 0px 1px 0px 0px"> <center><script type="text/javascript" src="http://Ads1.msn.com/library/dap.js"></script><div id="CMSHW1" style="padding-top: 20px;; background: inherit"></div><script type="text/javascript">dapMgr.enableACB("CMSHW1", false);dapMgr.renderAd("CMSHW1", "&PG=CMSHW1&SC=F3&AP=1164",120,240); </script></center> </div> </td> <td width="100%" dir="LTR"> <!--NOINDEX_STOP--> <div style="display: none;"> </div><body xmlns:msxsl="urn:schemas-microsoft-com:xslt"><div style="padding-left: 20px"><div class="mk_pageTitle" style="padding-top:12; padding-bottom: 6;">Microsoft Mouse and Keyboard Hardware - Download Software</div><hr size="1" color="#CCCCCC"><table border="0"><tr><td valign="top" style="padding-top:10"><div xmlns:miles="http://www.2yup.com/asp">Here's the software available for your product. Follow the link to download it.</div><div style="padding-top:10px;" xmlns:miles="http://www.2yup.com/asp"> » <a class="anchor4" href="http://download.microsoft.com/download/b/9/7/b9711d2b-a269-4546-8740-715724561c2c/IP32Eng6.30.191.0.exe">IntelliPoint 6.3 32-bit for Windows XP</a><br><br></div></td><td valign="top"><table border="0" cellpadding="0" cellspacing="0" width="173" style="background-color: #F7F7F7; border-bottom: 1px solid #CCCCCC; margin: 5 5 5 5"><tr><td><img border="0" src="/hardware/mouseandkeyboard/images/related_links_header.jpg" id="id_img_related_links_header" alt="Related Links"></td></tr><tr><td style="padding: 15 5 0 10; border-left: 1px solid #CCCCCC; border-right: 1px solid #CCCCCC;"><table border="0" cellpadding="0" cellspacing="0"><tr><td valign="top">» </td><td><A href="/hardware/innovation/experience.mspx">Discover the latest hardware innovations.</A></td></tr></table></td></tr><tr><td style="padding: 15 5 0 10; border-left: 1px solid #CCCCCC; border-right: 1px solid #CCCCCC;"><table border="0" cellpadding="0" cellspacing="0"><tr><td valign="top">» </td><td><A href="/hardware/featuresandtechnologies.mspx">Explore new breakthroughs in hardware technology.</A></td></tr></table></td></tr><tr><td style="padding: 15 5 0 10; border-left: 1px solid #CCCCCC; border-right: 1px solid #CCCCCC;"><table border="0" cellpadding="0" cellspacing="0"><tr><td valign="top">» </td><td><A href="/hardware/hcg/hcg_main.aspx">Make sure your workplace is a healthy place.</A></td></tr></table></td></tr><tr><td style="padding: 15 5 0 10; border-left: 1px solid #CCCCCC; border-right: 1px solid #CCCCCC;"><table border="0" cellpadding="0" cellspacing="0"><tr><td valign="top">» </td><td><A href="/hardware/mouseandkeyboard/documentation/default.aspx">Get the latest documentation for your hardware products.</A></td></tr></table></td></tr><tr><td style="padding: 15 5 0 10; border-left: 1px solid #CCCCCC; border-right: 1px solid #CCCCCC;"><table border="0" cellpadding="0" cellspacing="0"><tr><td valign="top">» </td><td><A href="/hardware/mouseandkeyboard/support/default.mspx">Find the support you need for your mice and keyboards.</A></td></tr></table><img src="/hardware/images/spacer.gif" width="100%" height="15px"></td></tr></table></td></tr></table></div></body> </td> </tr> </table> <!--NOINDEX_START--> <br clear="all" style="line-height: 1px; overflow: hidden"><table id="msviFooter" width="100%" cellpadding="0" cellspacing="0"><tr valign="bottom"><td id="msviFooter2" style="filter:progid:DXImageTransform.Microsoft.Gradient(startColorStr='#FFFFFF', endColorStr='#CC0000', gradientType='1')"><div id="msviLocalFooter"><nobr><a href="http://go.microsoft.com/?linkid=317027" target="_top">Manage Your Profile</a> |</nobr><wbr></wbr><nobr><a href="/hardware/contact/default.mspx" target="_top">Contact us</a></nobr></div><div id="msviGlobalFooter"><span dir="ltr">© 2009 Microsoft Corporation. All rights reserved. </span><nobr><a href="http://support.microsoft.com/contactus/?ws=mscom" target="_parent">Contact Us</a> |</nobr><wbr></wbr><nobr><a href="http://go.microsoft.com/?linkid=4412892" target="_parent">Terms of Use</a> |</nobr><wbr></wbr><nobr><a href="http://go.microsoft.com/?linkid=4412893" target="_parent">Trademarks</a> |</nobr><wbr></wbr><nobr><a href="http://go.microsoft.com/?linkid=4412894" target="_parent">Privacy Statement</a></nobr></div></td><td bgcolor="#CC0000" width="105"><img src="/library/toolbar/3.0/text.aspx?text=TQ%3d%3d&fore=FFFFFF&b=CC0000&font=Microsoft+Logo+95%2c+13pt&w=105&h=29&a=0&l=0&v=0&c=NzaiGNT20ZjyBYeO9aNz%2f%2fMX3Y0%3d" width="105" height="29" alt="Microsoft" title="" border="0" /></td></tr></table><div style="display:none"><script type="text/javascript">var gDomain="m.webtrends.com";var gDcsId="dcsjwb9vb00000c932fd0rjc7_5p3t";var gFpc="WT_FPC";if(document.cookie.indexOf(gFpc+"=")==-1){document.write("<SCR"+"IPT TYPE='text/javascript' SRC='"+"http"+(window.location.protocol.indexOf('https:')==0?'s':'')+"://"+gDomain+"/"+gDcsId+"/wtid.js"+"'><\/SCR"+"IPT>");}</script><script src="http://js.microsoft.com/library/mnp/2/wt/js/wt.js" type="text/javascript"></script><noscript><img border="0" name="DCSIMG" width="1" height="1" src="http://m.webtrends.com/dcsjwb9vb00000c932fd0rjc7_5p3t/njs.gif?dcsuri=/nojavascript&WT.js=No"/></noscript></div><layer visibility="hide"><div style="display:none"><img alt="" width="0" height="0" border="0" hspace="0" vspace="0" src="http://c.microsoft.com/trans_pixel.asp?source=www&TYPE=PV&p=hardware_download&URI=%2fhardware%2fdownload%2fDownloadResult.aspx%3fcategory%3dMK%26type%3dMouse%26name%3dw_lmouse5000%26os%3dXP_32%26lang%3den&GUID=1F4FC18C-F71E-47FB-8FC9-612F8EE59C61&lc=en-US"></div></layer> </body> </HTML>
  9. I just dropped a hint in another thread, but thought I'd come here and make it official after all :-) It would be very handy to have a "copy variable" function. I'm thinking of variables that are currently defined within the download entry you're working on, but I suppose it could extend to any variables defined in any Ketarin download entry. It's not that big of a deal to define two variables by hand. But if both use the same source URL and/or both have similar scrape instructions, it would be nice to define one and get it working, then copy it to a new name and alter as needed. Similarly, a rename variable function would be handy, though if we had "copy variable" a rename could be handled as a two-step process (copy to new name, delete old name). While I'm here :-) I've sometimes wanted a "disable variable" function. I'd like to leave the variable in the Ketarin entry, but mark it such that Ketarin doesn't process it. Useful if I'm working on an alternate scrape, for example, but don't want Ketarin to spend any cycles on it except when I'm working on it. Probably not a big deal if we don't get it, but hey it can't hurt to ask :-) Thanks and regards, --appyface
  10. Hi Flo, I just put up Ketarin 0.9.9.20 but this existed in the last version I used (0.9.9.19) and maybe earlier than that. I want to scrape two variables from the same webpage. The first variable I called URL and I put this in for webpage and clicked "load" button: http://www.microsoft.com/hardware/download/DownloadResult.aspx?category=MK&type=Mouse&name=w_lmouse5000&os=XP_32〈=en This is displayed as the entire contents: <HTML><HEAD><META HTTP-EQUIV="Refresh" CONTENT="0.1"> <META HTTP-EQUIV="Pragma" CONTENT="no cache"> <META HTTP-EQUIV="Expires" CONTENT="-1"> </HEAD></HTML> I defined a second variable I called filename and I put the same webpage in and clicked "load" button. The Ketarin window shows the actual contents of the webpage and not just the four lines above. Below is the xml export for the entry. Any idea why the webpage doesn't load the same for the two variables? Is it becase I called my variable URL ? If that is the case it would be nice to have a variable rename command. And/or a copy variable command -- instead of having to add a new variable and construct it by hand, then deleting the old one... (Hint hint for new features ) Thanks and regards, --appyface <?xml version="1.0" encoding="utf-16"?> <Jobs> <ApplicationJob xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Guid="a09ffb2d-de29-4c76-a13c-5c0d0fbfdcae"> <DownloadBeta>Default</DownloadBeta> <DownloadDate xsi:nil="true" /> <CanBeShared>true</CanBeShared> <ShareApplication>false</ShareApplication> <HttpReferer>http://www.microsoft.com/hardware/download/DownloadResult.aspx?category=MK&type=Mouse&name=w_lmouse5000&os=XP_32〈=en</HttpReferer> <Variables> <item> <key> <string>URL</string> </key> <value> <UrlVariable> <VariableType>RegularExpression</VariableType> <Regex>(http://download\.microsoft\.com.*?IP32.*?\.exe)</Regex> <Url>http://www.microsoft.com/hardware/download/DownloadResult.aspx?category=MK&type=Mouse&name=w_lmouse5000&os=XP_32〈=en</Url> <Name>URL</Name> </UrlVariable> </value> </item> <item> <key> <string>filename</string> </key> <value> <UrlVariable> <VariableType>RegularExpression</VariableType> <Regex>http://download\.microsoft\.com.*?(IP32.*?\.exe)</Regex> <Url>http://www.microsoft.com/hardware/download/DownloadResult.aspx?category=MK&type=Mouse&name=w_lmouse5000&os=XP_32〈=en</Url> <Name>filename</Name> </UrlVariable> </value> </item> </Variables> <ExecuteCommand /> <Category>009000</Category> <SourceType>FixedUrl</SourceType> <PreviousLocation>D:\Stuff\filestore\Microsoft_general\intellipoint_IP32Eng6.30.191.0.exe</PreviousLocation> <DeletePreviousFile>false</DeletePreviousFile> <Enabled>false</Enabled> <FileHippoId /> <LastUpdated>2008-12-09T04:19:06.7045</LastUpdated> <TargetPath>D:\Stuff\filestore\Microsoft_general\intellipoint_{url:basefile}.{url:ext}</TargetPath> <FixedDownloadUrl>{URL}</FixedDownloadUrl> <Name>Microsoft Intellipoint Mouse Software</Name> </ApplicationJob> </Jobs>
  11. @Stalker -- great links, thanks for adding them! @CybTekSol, MadDog -- Thank you for letting me know this was useful to you :-) @kwe -- Yes regex can be VERY intimidating. The same symbols mean different things in different contexts, they behave differently depending on WHAT regex engine you're using... the list goes on and it is a long one. But it really isn't as cryptic as it first appears! If I can give newbies any particular points, it would be to pay attention to two basics, which are illustrated in the above tutorial: When this piece of the regex finishes/stops, are successfully matched characters returned to me? Or is this piece of the regex just an "assertion" *** ? When this piece of the regex finishes/stops, where is the regex "cursor"? Does this piece of the regex move the cursor position at all? Where does the cursor end up when the match is successful? Unsuccessful? (***An assertion is a zero-width expression, meaning it gives back no characters in the result -- the result is always "zero width" or 'empty'. Our 'lookarounds' in this tutorial are assertions. If their match is successful, the matching characters themselves are discarded, and the regex continues on to do whatever it is supposed to do when it gets a successful match. If unsuccessful, it's the same as any other command, the regex does whatever it is supposed to do next, when there is no match.) Spend the time to closely examine any regex you're working with, and see how the above two basics apply. This is the best investment you can make in yourself when it comes to learning regex! And the best way to learn regex is to just jump in. Start with working examples like the one in this tutorial (it works as long as the author of JavaRa doesn't change his webpage much). Watch it work. Then use the regex on your own webpage scrapes. You'll be changing just the three search strings to adapt it and it will work for you. But then one day it won't work! "Wha? It always worked and I changed it the same way I have all the others..." The mostly likely reason is the source webpage just doesn't play by the same rules. Then the regex needs further alteration, to give you what you want. A common variation I use, is to limit the 'reach' of the wildcard commands. In my above tutorial we used .* (0 to infinity) and .+ (1 to infinity). Instead we could substitute a maximum number of characters for 'infinity'. The command .{0,400} behaves the same as .* except that it goes from 0 to 400 characters only. The command .{1,350} behaves the same as .+ except that it goes from 1 to 350. You can also use something like .{57,213} -- which means a successful match starts at least 57 characters forward from "here" ("here" being wherever the regex "cursor" is at that moment), and cannot be farther away than 213 characters. We can add the optional '?' to these as well, making them "lazy" instead of the default "greedy". "lazy" will make the regex take the FIRST successful match within the limits provided, whereas "greedy" will make the regex take the LAST possible match within the limits provided. This is very useful. Consider that regex lets you pick "first" (lazy) or "last" (greedy). What about the second match? Or the fifth match of six? Perhaps limiting the minimum and/or maximum "reach" and using "lazy" or "greedy", is what will work. By limiting the reach you can change what part of the material contains the first match, or what part of the material contains the last match... There are lots of Character Classes in regex. The '.' we have been working with here matches EVERYTHING including line terminators (in the .NET regex engine). But maybe we only want to consider numeric digits, or maybe only capital letters? Then you use one of the character classes instead of the the '.' wildcard. For example, the character class \s can be substituted for the '.' and then the matches only look for 'whitespace' characters. 'Whitespace' is defined as being any of: space character, tab character, carriage return, line feed, form feed, vertical tab. Here's an example of a regex that has been restricted, perhaps not in a good way. See this post: http://ketarin.canneverbe.com/forum/viewtopic.php?id=21 Load the target webpage and use the regex I gave. What does it do? Alter the regex a little bit. What does it do? I did not spend a lot of time examining that webpage and building the regex I offered ttheil. It might be possible to make the regex a bit more 'generic' -- that is, one that doesn't rely so heavily on finding some very specific strings within specific limits, to come up with our intended scrape. Sometimes a more-generic regex doesn't work so well. When you first write it, it works for awhile. Then the author of the webpage alters the content such that our regex starts matching on something other than what we want. We have to make the regex "less generic" in some fashion, to force it to pass up the new match and continue on to our desired target. Similarly, a less-generic regex may stop working. If the author of the webpage alters the content in such a way that our limits are incorrect, our regex may never work again until we relax the limits, or substitute different limits for what we had been using. A regex is only as good as the rules it expects the webpage to play by. When the rules change, the regex might need to change too :-) --appyface
  12. Nice, Flo! I will check it out :-)
  13. Easiest way to see how this works is to try it. This example locates a string, then continues on and locates another string, then scrapes something for a version number, based on terminating that scrape with yet another string. 1. Start a new download entry in Ketarin 2. Go to define variables and start to define one 3. Paste this into Contents from URL: http://raproducts.org/javara.html and click LOAD button 4. Paste this into Use regular expression: (?<=JavaRa Version History.*?JavaRa ).+?(?=<) At this moment in time, you should see this snippet somewhere around line 70: EDIT: 2009-02-20 RaProducts site is down. However, the below snippet can be pasted into any regex builder tool and this tutorial still followed, should the RaProducts site never return. ------------------------------------------------------------------------------------------------------------- <h2>Windows Versions Supported</h2> Currently, JavaRa supports Windows 9x, 2k, XP, and Vista without UAC.<br><br> <h2>JavaRa Version History</h2> [28dec08] JavaRa 1.13<br> - [Fixed] JavaRa crashing upon not finding "JavaRa.def" file.<br> - [Fixed] Minor typo<br><br> [14dec08] JavaRa 1.12<br> - [Added] JavaRa registry definitions file.<br> - [Added] Program now asks Windows to delete locked folders upon reboot.<br> ------------------------------------------------------------------------------------------------------------- Ketarin's variable will be loaded with "1.13", exactly what I wanted. There are excellent tutorials available on the 'net, here's a good one http://www.regular-expressions.info/tutorial.html There are excellent programs available to help guide you through the construction of complex regex's, personally I use RegexBuddy (pay-for product) http://www.regexbuddy.com/ and there is also Expresso http://www.ultrapico.com/Expresso.htm which is free, I have not used it but it gets good marks. I'll break down the components of the above regex and explain each piece. What follows is a pretty long tutorial in itself, and yet it explains not very much of the full power of regex. (?<=JavaRa Version History.*?JavaRa ).+?(?=<) ^^^^ (?<= starts a "positive lookbehind" command to the regex engine. The important points to know of this command, are its influence on the regex engine's "cursor" position when the match is successful, and that the match is NOT put into the result. Just exactly what we need. More on that in a bit. (?<=JavaRa Version History.*?JavaRa ).+?(?=<) ^^^^^^^^^^^^^^^^^^^^^^ "JavaRa Version History" is the first literal string I'm looking to match. (?<=JavaRa Version History.*?JavaRa ).+?(?=<) ^^^ .*? Matches any characters (and I don't care what they are, including any line terminators) for an unknown length. I'll explain this kind of instruction in more detail later on. (?<=JavaRa Version History.*?JavaRa ).+?(?=<) ^^^^^^^^ "JavaRa " is the second literal string I'm looking to match on. Note that it is "JavaRa" plus a trailing space, which is what I want. The closing parenthesis ends the "positive lookbehind" command. Now let's look at just those parts of the regex, together: (?<=JavaRa Version History.*?JavaRa ).+?(?=<) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ I'm telling the regex engine that a successful match consists of finding this potentially giant string: 1. Locating the literal string "JavaRa Version History" 2. Locating some unknown number (0 to infinity) of characters, even if they are line terminator characters 3. Locating the literal string "JavaRa " Using the webpage snippet above, this is the part that the "positive lookbehind" successfully matches (without the dashed lines of course): ------------------------------------------------------------------------------------------------------------- JavaRa Version History</h2> [28dec08] JavaRa ------------------------------------------------------------------------------------------------------------- The regex "cursor" is now poised between the END of the match and the next character following the match. AND this part of the match will NOT be given to Ketarin's variable. Both of these points are crucial to the next part, which is the actual scrape for the variable. (?<=JavaRa Version History.*?JavaRa ).+?(?=<) ^^^ .+? tells the regex to match some unknown characters for unknown length. Now we are actually grabbing these characters to return into our Ketarin variable, not just looking for them. (The use of the '+' instead of '*' changes the matching slightly, more on that later.) The regex engine's "cursor" will be poised at the end of whatever these characters are. We don't know just where the end is located -- yet. (?<=JavaRa Version History.*?JavaRa ).+?(?=<) ^^^^ (?= is a "positive lookahead" command to the regex engine. < is a literal string to be matched - we're looking for "<" ) closing parenthesis ends the "positive lookahead" command Like the "positive lookbehind" we used in the beginning, nothing from a successful match is included in the result. The difference in this command is the cursor position. A successful match BEGINS wherever the regex "cursor" is right now. We don't know just where that cursor is, our .+? command is gobbling up some unknown number of characters for Ketarin's variable right now. However, the regex "cursor" position is advancing with each character grabbed. At some point that position will start a successful match of our "positive lookahead" string. That is how we are able to mark the end of the unknown number of characters put into Ketarin's variable. To sum up, you can imagine the regex looks like this: <-------------------{vers}-------------------> Where there is something we're looking for, just before the version number, and there is something we're looking for, just after the version number :-) Some notes regarding the use of .*? and .+? in the above regex. The '.' (dot) is a wildcard to match anything including line terminators. This is the way you get the regex to continue through the webpage as if it were one giant string to search instead of searching individual lines, which is what most other matching commands do. The '*' (asterisk) says the '.' matches an unknown quantity, from -0- to infinity. A '+' (plus) character says the '.' must match at least ONE character, to infinity. Which one to use? In our example webpage here, it actually doesn't matter, we can use .* in both places or .+ in both places of the regex, as they both return our desired result because of what is in the webpage. The heart of creating a regex is taking into account these subtle differences, so that you are assured of getting a successful match only on the part of the webpage that is what you are looking for, and do not get a match anywhere before that point. (Explaining further is beyond the scope of this example.) The '?' is an optional modifier of the .* and .+ commands. Without the '?' modifier, the .* and .+ are called "greedy", adding the optional "?" makes them "lazy". Thorough explanation is again beyond the scope of this tutorial, but I can give example by using our same webpage snippet and changing our regex to be "greedy" instead of "lazy". Here's the snippet again: ------------------------------------------------------------------------------------------------------------- <h2>Windows Versions Supported</h2> Currently, JavaRa supports Windows 9x, 2k, XP, and Vista without UAC.<br><br> <h2>JavaRa Version History</h2> [28dec08] JavaRa 1.13<br> - [Fixed] JavaRa crashing upon not finding "JavaRa.def" file.<br> - [Fixed] Minor typo<br><br> [14dec08] JavaRa 1.12<br> - [Added] JavaRa registry definitions file.<br> - [Added] Program now asks Windows to delete locked folders upon reboot.<br> ------------------------------------------------------------------------------------------------------------- Here's our regex again, but this time we let the '.+' be GREEDY instead of LAZY (the '?' is gone). (?<=JavaRa Version History.*?JavaRa ).+(?=<) Try it. Instead of picking up "1.13" for our variable, Ketarin gets everything from this: crashing upon not finding ...all the way up to the </html> closing tag at the very bottom of the webpage. Obviously not what we wanted! So you could describe the behavior like this: "lazy" makes the .* or .+ grab the fewest number of characters and still be able to complete the rest of the regex. The default behavior of "greedy", however, is to grab as many characters as possible -- even if some of them match the rest of the regex -- and keep going until the it is the last possible match that completes the regex successfully. In this regex our scrape into Ketarin's variable was intended to be stopped by the first appearance of a "<" character. Using "lazy" gets us that. Without requesting "lazy", the default behavior of "greedy" keeps advancing the cursor position until the very last "<" match is found. That might be what you want to do on a different webpage, but on this one it does not give us the result we desire. I hope the above mini-tutorial is helpful. --appyface NOTE: Not all 'flavors' of regex engine behave the same way. So I tend to preserve "case" as a habit in my regex's, but Ketarin's regex engine (the .NET regex engine) is not case-sensitive by default. Also, as mentioned earlier, if the '.' (dot) wildcard is used, the .NET's regex engine will search right through any line terminators (carriage return, linefeed, etc.) This effectively makes the entire web page one giant string to search, which is very handy for our purposes. Keep this in mind when building searches in Ketarin, as other types of regex patterns will only be successful if the match is found between the start and end of a single line.
  14. Hi kwe, If I understand you, you want a regex similar to one I use quite a bit. Easiest way for you to see it is to try it. Rather than post here, I'll go post an example and mini-tutorial over in the new Resources forum. Please have a look over there. I hope it is helpful to you. Best regards, --appyface
  15. Hi Flo, As a test I removed my downloaded Ketarin file (Ketarin-0.9.9.19.zip), opened Ketarin (also at 0.9.9.19), highlighted my Ketarin entry and pressed CTRL-U. Ketarin updated, opened x2 as it should, and showed a 'gold sun' indicating there was an update. Ketarin is responding full and I closed Ketarin, thought my x2 instance it launched is still open. Looks like it is fully repeatable here. So is there any info I can get you, so you can learn why sometimes Ketarin waits on x2, and sometimes it doesn't? I took screenshots but I don't know what else I could get for you? --appyface
  16. Any idea why Ketarin would not wait then? I thought it was supposed to wait...?
  17. Hmmm using 0.9.9.17, I just retrieved Ketarin 0.9.9.19 by updating it alone (same process as described above - CTRL-U). Ketarin launched x2 as always, but did NOT wait for x2 to terminate. I did not change my x2 command line to include a trailing &, as discussed above. ??? why didn't Ketarin wait ??? Did you change Ketarin to default to not waiting for the command to complete? Or are we looking at a different issue here. Thanks and regards, ---appyface
  18. OK, I think I see what you're getting at... let's run with that idea for a sec... I would need to be able to either create a new variable from existing variables (my feature request that's low on the totem pole right now...), or be able to specify more than one variable be watched as the update indicator. The reason being, I have to scrape the main version from one page and the build from another page, to come up with the complete version info. There have been many times when the build number stays at 1 but the main version numbering changes, other times the main version numbering stays the same but the build number changes. Sometimes both of course. Thoughts?
  19. I do scrape the version number, and assemble the download filename. Ketarin overlays that file on my disk over and over. How would I use the verson number variable to stop that? I'm sorry, I'm still not understanding what you want me to do differently, to stop Ketarin from downloading these files. Thanks, --appyface
  20. Can you give me example on how that would stop the download? I'm not sure I understand what you're suggesting. Thanks, --appyface
  21. I have a couple downloads, the file's modified date gets changed frequently, but in actuality it is the same file. (I have performed binary compare of the contents with previous download for same version number, and the files are identical.) I have written to these vendors to ask if that can be avoided, so far no joy :-/ So, on a per-entry basis, could I instruct Ketarin to NOT consider a file's modified date, when determining if there is an update? There may be other characteristics that could be helpful to instruct Ketarin to skip, such as filename or size, or created date? Right now Ketarin downloads the same files over and over... that's not a bad fate since it is only a couple of files for me, but it couldn't hurt to ask about avoiding it :-) I'm open to suggestion for other ways to get around it, too. TIA! --appyface
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.