Recent Posts

Subscribe to Recent Posts 326 posts found

posted over 1 year ago
Andrew Stacey 118 posts

Forum: Instiki – Topic: Bugs

Distillation for Distler (sorry, …)

  1. Create a page with an apostrophe in the title, say apostrophe's.
  2. Edit page.
  3. Page magically becomes apostrophe's.
  4. Edit page, changing its name back to apostrophe's.
  5. Page name is now correct.
  6. Edit page.
  7. Page name is mangled again.
 
posted over 1 year ago
Andrew Stacey 118 posts

Forum: Instiki – Topic: Feature Requests

Not sure if this is a bug or a feature request …

Google searches now include author information which it tries to glean from the page. It would appear that it uses the “Revised by XYZ” information to do this. It’s been suggested that this is because that is in a div with class name byline. I’m going to try changing this to see if it stops Google from assuming that to be the author. I don’t yet know how to override Google’s ad hoc method (which really does seem ad hoc if it uses a CSS class name as evidence).

I’ll report back on whether or not it works. If it does, consider this a feature request for changing byline to something like revisedby.

 
posted over 1 year ago
dzonekl 5 posts

Forum: Instiki – Topic: migration to Rails3.

Hi,

I have it working (mostly), today spend some time fixing

  • asset pipeline for rails3
  • further clean-up
  • big issue running with passenger, rvm etc…

so, the test site is running here:

http://test.netxforge.com => This is the front site, which “presents” the wiki pages. http://test.netxforge.com/netxforge/list => The actual wiki

There are a some pending issues, with URL generator, making some links not working.. etc.. so still a bit of work….

Cheers Christophe

 
posted over 1 year ago
distler 77 posts

Forum: Instiki – Topic: migration to Rails3.

This is extremely interesting.

Porting Instiki to Rails3 has long been on my TODO list. But (as you’ve seen), it’s not a small job. So it keeps getting pushed back in favour of other things. So I’m really happy you’re working on this!

 
posted over 1 year ago
dzonekl 5 posts

Forum: Instiki – Topic: migration to Rails3.

Ah, found the problem for the issue, I reported earlier. … (took me the better part of the morning grrrr…). Ok, so WikiContent extends ActiveSupport::SafeBuffer. Now this class changed in Rails 3, overriding (Or opening up in Ruby Parlence) with the following code:

def html_safe ActiveSupport::SafeBuffer.new(self) end

So, this produces a different Class type, hence the mixed-in methods get lost! and causes a problem in PageRenderer trying to call this method. Wow, I am happy I found this one.

the file holding this method is called: output_safety.rb in lib/activesupport/kernel. I couldn’t find the alternative for Rails 2.3, to prove my point. but regardless it now works, by commenting out this line in WikiContenr.render!

self.html_safe

BTW: The teaser screenshot is now shown, in my previous post.

 
posted over 1 year ago
dzonekl 5 posts

edited over 1 year ago

Forum: Instiki – Topic: migration to Rails3.

Hi, (Jacques, I hope you are reading this!)

I am running into a tricky problem in the Rails3 migration. As you likely know, Rails 3 doesn’t load the /lib directory when starting. There are 2 options to auto-load. 1) In application.rb (which is required by Rails 3) put in a config parameter to load. There are some caveats as the names of the files versus the names of the class. 2) there is now a /config/initializers directory, and .rb is executed here.

What I have done now is:

1) config/application.rb

config.autoload_paths « ”#{Rails.root}/lib” config.autoload_paths « ”#{Rails.root}/lib/chunks”

This will load most files, except InstikiErrors and WikiContent as the naming of the files doesn’t fit the rails loading algorithm. To load these I use:

2) config/instiki_init.rb

Load the Instiki lib

require ‘instiki_errors’ require ‘wiki_content’

(I also had to rename the wiki.rb class in /chunks/wiki as rails would complain, the file should declare the Wiki class ) “Expected /Users/Christophe/Documents/Spaces/netxforge_aptana/com.netxforge.store/lib/chunks/wiki.rb to define Wiki

This /lib classes are loaded, however I run into a problem when saving a page. What happens is that somehow the methods in WikiChunck Module are not available .. so it seems the mixin of this module into the WikiContent class is not working well… I know it’s a fuzzy description but I get for example the following error. You see this occurs in the PageRenderer, when calling ‘update_references’ while prior to that the method ‘render(…)’ is called which creates the variable ‘rendering_result’ correctly created. (Also some of the mixin methods should have been called by then). I am really puzzled about this. I even consider rewritting it, so that mixin is not used. (I actually wonder why a mixin solution was chosen here, it’s not code re-use is it?).

Can you help me fix this?

Here is the error:


NoMethodError in WikiController#save

undefined method `find_chunks’ for #<ActiveSupport::SafeBuffer:0x007ff4863dc368>

Rails.root: /Users/Christophe/Documents/Spaces/netxforge_aptana/com.netxforge.store Application Trace | Framework Trace | Full Trace

lib/page_renderer.rb:122:in wiki_links' lib/page_renderer.rb:102:in find_wiki_words’ lib/page_renderer.rb:150:in update_references' lib/page_renderer.rb:141:in render’ lib/page_renderer.rb:29:in display_content' app/models/page.rb:30:in revise’ app/models/wiki.rb:79:in revise_page' app/controllers/wiki_controller.rb:325:in save’


Teaser below :-), Instiki on rails3.

Layer 1 <image height='103' id='svg_11512_1' width='643.999998' x='0' xlink:href='data:image/png;base64,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7VpBlwYzfvjo/64c63oFYNaoDGw6fhARyd7o4fBgH9x/l3zVOd/U49/jQLYr+o4bh35OleNWq1FLOLY207h7G6sf30PGyGiPFyb8jKCgtbiSEw96tUjvFt+hnvB7cSomD++knWhZm+Rv2vq3vXsKsXv2C5gTQVMBHsrAOFq95XX1UtkVArZ0w6L5i2BXudulwuyqS4Rqc79Wgm+1kbW6NB7LwQSYwGNFgIdUPFbNyZVhAkyACTABJsAEmAATYAJMgAkwASZQPQjwpJHVox1YCibABJgAE2ACTIAJMAEmwASYABNgAo8VATY4PFbNyZVhAkyACTABJsAEmAATYAJMgAkwASZQPQiwwaF6tANLwQSYABNgAkyACTABJsAEmAATYAJM4LEiwAaHx6o5uTJMgAkwASbABJgAE2ACTIAJMAEmwASqBwE2OFSPdmApmAATYAJMgAkwASbABJgAE2ACTIAJPFYE2ODwWDUnV4YJMAEmwASYABNgAkyACTABJsAEmED1IMAGh+rRDiwFE2ACTIAJMAEmwASYABNgAkyACTCBx4oAGxweq+bkyjABJsAEmAATYAJMgAkwASbABJgAE6geBNjgUD3agaVgAkyACTABJsAEmAATYAJMgAkwASbwWBFgg8Nj1ZxcGSbABJgAE2ACTIAJMAEmwASYABNgAtWDABscqkc7sBRMgAkwASbABJgAE2ACTIAJMAEmwAQeKwJscHismpMrwwSYABNgAkyACTABJsAEmAATYAJMoHoQYIND9WgHloIJMAEmwASYABNgAkyACTABJsAEmMBjRYANDo9Vc3JlmAATYAJMgAkwASbABJgAE2ACTIAJVA8CbHCoHu3AUjABJsAEmAATYAJMgAkwASbABJgAE3isCLDB4bFqTq4ME2ACTIAJMAEmwASYABNgAkyACTCB6kGADQ7Vox1YCibABJgAE2ACTIAJMAEmwASYABNgAo8VATY4PFbNyZVhAkyACTABJsAEmAATYAJMgAkwASZQPQiwwaF6tANLwQSYABNgAkyACTABJsAEmAATYAJM4LEiwAaHx6o5uTJMgAkwASbABJgAE2ACTIAJMAEmwASqBwE2OFSPdmApmAATYAJMgAkwASbABJgAE2ACTIAJPFYE2ODwWDUnV4YJMAEmwASYABNgAkyACTABJsAEmED1IMAGh+rRDiwFE2AC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' y='85.999996'></image>
 
posted over 1 year ago
dzonekl 5 posts

Forum: Instiki – Topic: migration to Rails3.

Hi,

I am using Instiki, as a sort of content backend for my website. It’s a base for the website application, which needs additional functionality, which I would like to build on the latest rails 3.x. So I rolled up my sleeves and started to migrate Instiki to Rails 3, which is now almost complete. The approach is pragmatic, fixing things when they break in Rails3. I have recorded all the adaptation, and this could be a check list to ‘replay’.

So here is the thought. I would like to share this experience and help out if there is a interrest to push the original instiki to Rails3. I would however need some help from the original developers.

I can clone the original, but then would like to push it back to the original git, of course in another branch, and when all ok, that could become the new official version… what do you say?

Cheers Christophe

 
posted over 1 year ago
Francesco Ta... 6 posts

Forum: Instiki – Topic: Bugs

Fixed. Thanks!

 
posted over 1 year ago
distler 77 posts

Forum: Instiki – Topic: Bugs

Pandoc is clearly weird. But you have uncovered a regression in Maruku. I’ve fixed that bug in the latest version in my repository on Github.

  ruby bundle update

will fix the problem.

 
posted over 1 year ago
Francesco Ta... 6 posts

Forum: Instiki – Topic: Bugs

In the process of migrating my wiki from Textile to Markdown I think I found a bug:

The following snippet of text: punto!). was converted by pandoc as punto![]().. The latter text blows the editing page with the error “NameError in WikiController#save”. Step to reproduce

  1. create a new empty page
  2. write punto![](). (without apexes)
  3. save hitting the “Submit” button
 
posted over 1 year ago
Francesco Ta... 6 posts

Forum: Instiki – Topic: Migration from Textile

Thanks for your quick reply, you gave me a good idea. Actually I didn’t think about the history, and luckily I don’t need to keep it. I’m the only user of my wiki, but since it was started long ago, the pages format wasn’t fully coherent, so a completely automated migration wasn’t possible, I also needed the old wiki running, as a reference. So in the end this is what I did:

  1. exported as you suggested the whole wiki, the result is a convenient “file per page”
  2. converted the files with the command pandoc file.textile -o file.markdown in a BASH for cycle
  3. moved existing installation from ~/instiki to ~/instikiold
  4. installed a new, empty, instance in ~/instiki
  5. launched the two instances together, on different ports
  6. opened all files in jedit to correct in a single shot all repetitive errors
  7. imported every page from file, one by one (starting with the smaller files!)

It took a lot of time to clean everything up, but in the end all the pages were moved successfully.

 
posted over 1 year ago
itpullok 1 post

Forum: itex2MML – Topic: itex and other languages

Sounds good to me!! Heye Andrew Can you provide little information about your Extension Via PM.

cheers

 
posted over 1 year ago
distler 77 posts

Forum: Instiki – Topic: Migration from Textile

Interesting question!

I guess the first question is: do you want to convert the whole history (ie all previous revisions of each page) to Markdown, or just the current version?

If you just need the current version converted, you can go to the “Export” tab, and click on “Markup” to create a zip archive containing the (Textile) markup of each page.

If you want to convert the previous revisions, too, then you should look at the rake tasks described on this page. Those instructions are geared towards migrating from one database (e.g. sqlite) to another (e.g. MySQL). But they would also be useful in converting the content of the revisions` table, without changing database engines.

  • The db:fixtures:export_all rake task dumps your database to a (series of) YAML file(s).
  • db:fixtures:import_all imports them to a (new) database.

In between, you’d run a conversion on the dump/fixtures/revisions.yml file.

 
posted over 1 year ago
Francesco Ta... 6 posts

Forum: Instiki – Topic: Migration from Textile

I have an installation of Instiki, installed very long ago, and always kept up to date. I find it very useful because it runs completely in the user home, so it can be easily synced across several computers. I don’t need to write formulas to the wiki, just text and snippets of code.

Since the beginning the chosen markup was Textile (maybe was the default back then…), now I see on the web that Textile is almost unused and I wish to migrate to Markdown.

Is it there a best practice for this kind migration? Was it tested before?

Do I need to write a script that reads the sqlite database and feeds the pages to pandoc and then back to the database before changing the markup setup in “edit web”, or it’s safe to switch from one markup dialect to the other?

 
posted over 1 year ago
Francesco Ta... 6 posts

Forum: Instiki – Topic: Instiki website

Ok, I’ve stumbled upon it while I was looking for informations about textile, but let me open another post, it’s a completely different topic.

 
posted over 1 year ago
distler 77 posts

Forum: Instiki – Topic: Bugs

I’m sorry.

Could you please distill that long and rambling discussion in to a set of steps by which one might reproduce the bug?

 
posted over 1 year ago
Andrew Stacey 118 posts

Forum: Instiki – Topic: Bugs

There would appear to be a bug on pages with apostrophes in their names. See http://nforum.mathforge.org/discussion/4757/apostrophes-in-page-titles-lead-to-weird-behaviour for details.

 
posted over 1 year ago
distler 77 posts

Forum: Instiki – Topic: Instiki website

The instiki.org website is a hopeless mess, on many levels. Alas, I don’t control it, so I can’t do much about it (except to send the occasional plaintive email message to Matthias, which he ignores).

Instead, point your browser at my website, which contains both up-to-date information and (as best as I am able to assure) is spam-free.

 
posted over 1 year ago
Francesco Ta... 6 posts

Forum: Instiki – Topic: Instiki website

Hi all, there are several pages on the site http://www.instiki.org/ that need attention:

  • both links in the export page are not working, HTML with “Internal Error An application error occurred while processing your request.” and “No webpage was found for the web address: http://golem.ph.utexas.edu/wiki/instiki/export_markup” for Markup

  • the three sandboxes links (http://instiki.org/textilesandbox/show/HomePage http://instiki.org/markdownsandbox/show/HomePage and http://instiki.org/rdocsandbox/show/HomePage) give an internal error

  • the following page http://instiki.org/show/Textile is nonsense/spam

  • the homepage is spammed too: http://instiki.org/show/HomePage (rev 240)

  • the News in homepage (http://instiki.org/show/HomePage) are not up to date

 
posted over 1 year ago
user 1 post

Forum: Instiki – Topic: instiki features

hello!

I would like to know if i can use in instiki:

1) WYSIWYG editor like: ckeditor.com or tinymce.com 2) chart, flowchart, etc designer like: http://www.diagram.ly/ or http://diagramo.com/editor/editor.php 3) table designer, with sortable columns, filterable rows and columns, etc 4) treeview organizer like: www.jstree.com 5) ‘mouse over’ events that show popups, etc

thanks!

 
posted almost 2 years ago
Andrew Stacey 118 posts

Forum: Instiki – Topic: Bugs

I just tried on a completely fresh install and found that it happened just as you described: the name used was the old name (and it gets swept twice). That was a sqlite3 database.

I’ve tried to install mysql on my mac to test this there, but get to a crash when I run instiki. Not sure why, seems to be related to the gem not finding my mysql lib files but it’s taken too much of my time already to try to fix it to test further. I can try it on my linux machine later.

However, the evidence certainly suggests that there is a difference between mysql and sqlite3 on this one.

 
posted almost 2 years ago
distler 77 posts

Forum: Instiki – Topic: Bugs

Sorry, I follow exactly the steps you outlined, and it’s adequate+subcategory (and its variants) that get cleared from the cache, not adequate+subcategory+>+history.

The scenario you outline (involving the old name being forgotten before the cache gets swept) is exactly what the before_save action is supposed to avoid. Then the cache gets swept again in an after_save action.

Now, the only thing I can think of is that I tested this under SQLite3, rather than MySQL. Perhaps the driver for the latter does something funky. But that seems unlikely…

 
posted almost 2 years ago
Andrew Stacey 118 posts

Forum: Instiki – Topic: Bugs

I know you don’t believe in the Cache Bug …

I had a page on the nLab which I renamed. Looking at the logs, then I see the save command. It ends with:

 "alter_title"=>"1", "new_name"=>"adequate subcategory > history", "author"=>"Andrew Stacey", "web"=>"nlab", "id"=>"adequate subcategory"}

The next log items are:

24808: 2012-10-18 14:22:26 +0400: Reading page 'adequate subcategory' from web '
nlab'
24808: 2012-10-18 14:22:26 +0400: Page 'adequate subcategory'  found
24808: 2012-10-18 14:22:26 +0400: Checking DNSBL 214.7.76.192.bl.spamcop.net
24808: 2012-10-18 14:22:26 +0400: Checking DNSBL 214.7.76.192.sbl-xbl.spamhaus.org
24808: 2012-10-18 14:22:27 +0400: 192.76.7.214 added to DNSBL passed cache
24808: 2012-10-18 14:22:27 +0400: 192.76.7.214
24808: 2012-10-18 14:22:27 +0400: Reading page 'adequate subcategory' from web 'nlab'
24808: 2012-10-18 14:22:27 +0400: Page 'adequate subcategory'  found
24808: 2012-10-18 14:22:27 +0400: Maruku took 0.148016386 seconds.
24808: 2012-10-18 14:22:27 +0400: Maruku took 0.165203678 seconds.
24808: 2012-10-18 14:22:28 +0400: Expired fragment: views/nlab/show/adequate+subcategory+>+history (0.3ms)

There are then a slew of more expirations, the first ones being adequate+subcategory+>+history. The last ones are also adequate+subcategory+>+history.

I just tried on my course wiki. Here are the steps I took:

  1. Edit a page and change it’s name.
  2. Remove the automatically-inserted redirect.
  3. Save the page.

Result: the expiration sweep does not include the old name and includes the new name twice.

I’m wondering if this could be the culprit: app/controllers/revision_sweeper.rb:

  def before_save(record)
    if record.is_a?(Revision)
      expire_cached_page(record.page.web, record.page.name) 
      expire_cached_revisions(record.page)
    end
  end

I notice that in the save post data then the name is the new name and the id is the old name. Could it be that the record object is populated with the new name before this action takes place? I’m not very good at tracing through ruby code, but if my guesses about what happens are right then the before_save action takes place just before the save action is executed in page.revise. If so, then by this time the name is the new name and the old name has been forgotten: in wiki.rb then the call is page.revise(content, new_name, revised_at, author, renderer) and very early on in the revise method then I see self.name = name.

Perhaps the revise should save its name in old_name and then the before_save can use that if it differs from the current name?

 
posted almost 2 years ago
20tsed56 1 post

Forum: Instiki – Topic: Debugging uninterruptible sleep

that is huge data to handle …

 
posted almost 2 years ago
Andrew Stacey 118 posts

Forum: Instiki – Topic: Debugging uninterruptible sleep

Agree completely.

The processes that were handling the list call were entering uninterruptible sleep and were using a large amount of memory - of the order of 300Mb to 500Mb. The system would get bogged down if there were more than one of them, but even one would take a reasonable amount of time to complete.

My suspicion is therefore that it relates to writing the file to disk for caching. So I suspect that there really is a problem with the hardware and that having several processes trying to write the same file was exposing it.

(There was a change in hardware underpinning the VPS recently.)

 
posted almost 2 years ago
distler 77 posts

Forum: Instiki – Topic: Debugging uninterruptible sleep

It looks as though it is the “All Pages” request that is clogging up the works, … at 7000 pages then it’s a bit cumbersome, to say the least,

I have no idea why that would be an issue.

It’s not as if Instiki has to do anything with those 7000 pages, apart from retrieving an alphabetical list of their names (and URLs). If that’s indeed your problem, it would be nice to know why.

 
posted almost 2 years ago
Andrew Stacey 118 posts

Forum: Instiki – Topic: Debugging uninterruptible sleep

I’ve added the timestamps and process ids to the logs and that’s made things a lot clearer. It looks as though it is the “All Pages” request that is clogging up the works, and there appear to be some spiders that don’t respect robots.txt and find “All Pages” fairly early on in their crawl.

You’ve mentioned before the possibility of adding a pageinate routine to “All Pages”. Would that help me, do you think? Or is it easier just to disable it (at 7000 pages then it’s a bit cumbersome, to say the least, so I’ve no compunction at simply disabling it altogether).

Incidentally, I found I’d forgotten that bzr doesn’t set permissions so some stuff in public was unreadable. That might explain why the SVG editor wasn’t working for me as there were a couple of files from that affected.

 
posted almost 2 years ago
Andrew Stacey 118 posts

Forum: Instiki – Topic: Debugging uninterruptible sleep

I strongly doubt that it is due to instiki itself, but it would be nice to isolate exactly what causes the problem. Thanks for the link.

After watching top all day, I think things are going into D state far more than I would expect so I’m going to contact our server provider.

To help in debugging this, I’m going to add the process pid to the logging messages as that’ll make it easier to link what I see in top to what I see in the production.log.

 
posted almost 2 years ago
admin 57 posts

edited almost 2 years ago

Forum: Instiki – Topic: Debugging uninterruptible sleep

Attach gdb to the process and try to figure out where it’s stuck. It would be interesting to me if there was an Instiki-specific reason these processes were getting stuck.

But, so far, there’s no evidence for that.

 
posted almost 2 years ago
Andrew Stacey 118 posts

Forum: Instiki – Topic: Debugging uninterruptible sleep

I’m getting a slew of processes getting into “uninterruptible sleep” and staying there. They sit there, eating CPU and memory, until the system slows down enough that folks complain.

Do you happen to know how to debug these? From what I’ve read, this is likely to be something getting stuck on I/O.

One thing that occurred to me was that all the processes are logging to the same file. Could they get stuck in some sort of queue for that?

(Also from my reading around, it would appear that the root cause of this is more likely to be at the kernel end, and thus an issue with drivers and hardware, than with instiki. Still, I’d like to know what it is that is triggering the sleep.)