Recent Posts

Subscribe to Recent Posts 381 posts found

posted 2 years ago
dzonekl 5 posts

edited 2 years 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 2 years 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 2 years ago
Francesco Ta... 6 posts

Forum: Instiki – Topic: Bugs

Fixed. Thanks!

 
posted 2 years ago
distler 91 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 2 years 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 2 years 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 2 years 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 2 years ago
distler 91 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 2 years 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 2 years 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 2 years ago
distler 91 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 2 years 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 2 years ago
distler 91 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 2 years 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 2 years 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 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 2 years ago
distler 91 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 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 2 years ago
20tsed56 1 post

Forum: Instiki – Topic: Debugging uninterruptible sleep

that is huge data to handle …

 
posted 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 2 years ago
distler 91 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 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 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 2 years ago
admin 58 posts

edited 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 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.)

 
posted 2 years ago
distler 91 posts

Forum: Heterotic Beast – Topic: MathJax 2.0

The latest commits, to Heterotic Beast, upgrade it to MathJax 2.0 (from 1.1). This loads (a little) faster, and also sports a SVG rendering option (selectable from the context menu).

 
posted 2 years ago
distler 91 posts

Forum: Instiki – Topic: MathJax 2.0

The latest commits, to Instiki, upgrade it to MathJax 2.0 (from 1.1). This loads (a little) faster, and also sports a SVG rendering option (selectable from the context menu).

 
posted 2 years ago
admin 58 posts

Forum: Instiki – Topic: S5 vertical alignment

I don’t know of a totally robust way to do it. My CSS-fu is weak.

But

Test Vertical Alignment
------------------------

This is centered on the slide
{: style="margin-top:25%;text-align:center;}

is a pretty good approximation to what you want.

 
posted 2 years ago
admin 58 posts

edited 2 years ago

Forum: Instiki – Topic: Bugs

And another one, this time in how maruku parses its meta-data.

This was actually only a problem for IALs attached to <li> elements. Fixed in the latest Maruku.

(This commit gives the complete solution. Its predecessor was only a partial fix.)

(N.b.: Maruku is now unvendored, so a

ruby bundle update

will pull in the latest version from Github.)

I’m unable to run the inbuilt SVG editor on my computer (running Mac OS X, Lion).

Works fine for me under Lion. (I haven’t updated to Mountain Lion, so I can’t make any promises about that. But I’d be surprised if there were any OS dependence of this; it ought to be a function of the Javascript engine in your browser. Or perhaps I misunderstood: were you running the server on Lion, or just the client?)

 
posted 2 years ago
Andrew Stacey 118 posts

Forum: Instiki – Topic: Bugs

And another one, this time in how maruku parses its meta-data. It would seem that not leaving a space at the end of {: #identifier} means that the } gets into the identifier.

Presumably this is the case here as well:

  • What’s the id of this element?

I get:

<ul>
<li id='list}'>What’s the <code>id</code> of this element?</li>
</ul>

in the source.