Path Of Ninja 2

0 views
Skip to first unread message

Bradley Zweig

unread,
Aug 5, 2024, 9:47:26 AM8/5/24
to moburtsundmen
Wellin this instance I'm using a very old version of CMake, version 2.8.12. It's so old it's almost fossilised. So presumably it's either a CMake bug which was fixed later, or the Ninja project changed the name of the binary at some point.

If ninja really exists in $PATH and it still does not work, you should check the permission of the executable file via ls -l /PATH/TO/NINJA. Make sure others have read and execute permissions (like '-rwxr-xr-x').


Unlike the past instalments in the Path of the Ninja series, this game's plot is original filler. It is a turn-based strategic role playing game, where the user and the opponent take turns during battle. The story is a filler, but made to last much longer. In the story, the player faces all of the Three Ryūdōin Brothers and needs to obtain 5 mirrors hidden in the game. Nazuna (a girl in the story) says that Genshō Ryūdōin is reanimating the Spirit Beast, and the only way to stop it is by collecting all 5 Hope Mirrors. Once the player collects a mirror, the player has to go through a past event from their memory again (like when Gaara transformed into Shukaku during the Konoha Crush, when the four jōnin fought Itachi and Kisame, when Zabuza and Haku fought Kakashi in the Land of Waves and when Sasuke left Konoha, the player fights them again). But each time, the player near the mirror, Genshō tries to stop the player with through his brothers, Jakō Ryūdōin and Rokkaku Ryūdōin. On the attempt to obtain the last mirror, Gaara kills Rokkaku and after Jakō's last encounter with the player, he loses and Genshō decides that he's useless now and kills him. As Genshō is about to kill the heroes, Naruto Uzumaki taps into the Nine-Tailed Fox Chakra and faces Genshō. Once he is defeated, all the collected mirrors are kept in place to seal the Spirit Beast. But once again for one last time, Genshō merges with the Spirit Beast in an attempt to get rid of the heroes once and for all. After defeating Genshō in his final form, peace is restored around the world (Konohagakure and Sunagakure) and all things come back to normal. In the end, the heroes go back to their respective places (Gaara and co. return to Sunagakure and the Konoha ninja return to Konohagakure), where they are welcomed after clearing their S-ranked mission.


Trying to build Slicer in a long path build directory, the build fails when it comes turn to configure ITK. Then it snowballs from there. I guess we need to add extra logic to this check to handle the possibility of longer paths which now exists in Windows.


It would be easier to limit file and directory name lengths in VTK and ITK. File path length issues popped up when modularization was introduced in VTK and ITK: it added one more level of directory for all files and increased number of libraries by a factor of 10x - which threw off Visual Studio.


We could make various changes to use the modularized build more effectively (e.g. not passing the full paths to every single library). But we effectively dump all VTK_LIBRARIES to the linker anyway, so modularization was kind of a no-op and comes at the cost of startup time. Processing >600 dynamic libraries is really slow on mac (and to a lesser degree linux): a debug build takes close to 1 min to start on mac, the majority of which is in strcmp during symbol relocations. Release build is somewhat faster of course, but still spends most time doing relocation.


Just to clarify, that comment was intended as an observation rather than a complaint per se . There is enough other low-hanging fruit to go after next time we do build system optimization, and in the worst case we can relink VTK and ITK into single libraries ourself if it is demonstrably faster.


I was undertaking to sanitize slashes as path separators on Windows.

That is, only supporting \ rather than /.I would prefer to only support \ (rather than both \ and /) because of

the use of hashes containing filenames, and it feels a bit cleaner to

require only one or the other. It seems more natural to support \ on

Windows for interacting with other tools.Does anyone agree/disagree with that as a general idea?

The main changes involved are modifying the canonicalization

functions, the associated test data, and ensuring that the dependency

helper always outputs in the correct style. I haven't tried this yet,

but I think I would like to explicitly disallow / in filenames at the

input level to avoid confusion too.There's a commit here to see the general scope of this


(I unfortunately changed line endings on some files so the diff is

bigger than it should be).The overall motivation here is to stat in a more reasonable amount of

time on Windows. To do so, stating needs to be done on a directory

level, not a file level (see stat_cache.cc). And, if Nodes are stored

with consistent slashes, then the mtimes that come out of walking the

directory tree can be pushed into the Nodes more easily.scott




If you are only speaking about the Windows port, then it sounds

reasonable to me. FYI, other project, like cmake, tend to support

slashes everywhere and do the substitution for you. But I think it is

not an option for Ninja to do the substitution.-Nico


>

> The main changes involved are modifying the canonicalization

> functions, the associated test data, and ensuring that the dependency

> helper always outputs in the correct style. I haven't tried this yet,

> but I think I would like to explicitly disallow / in filenames at the

> input level to avoid confusion too.

>

> There's a commit here to see the general scope of this

>

> (I unfortunately changed line endings on some files so the diff is

> bigger than it should be).

>

> The overall motivation here is to stat in a more reasonable amount of

> time on Windows. To do so, stating needs to be done on a directory

> level, not a file level (see stat_cache.cc). And, if Nodes are stored

> with consistent slashes, then the mtimes that come out of walking the

> directory tree can be pushed into the Nodes more easily.

>

> scott


This was my suggestion before too, but I've (mostly) come around to

viewing the case you mention above as a gcc bug, at least as far as

ninja is concerned.In my current branch I've wrapped dependency output to more

aggressively normalize lists of headers to \, and made sure that all

paths in the generator match as well. Realistically, it's necessary to

normalize case anyway too, so there has to be a post-process in any

case.I'm not sure this is the best solution, I just thought I'd mention it.




Evan's "deplist" branch has the deplist helper which parses cl.exe's

/showIncludes output, and gcc .d files. I'm not sure if it normalizes

in that branch, but it does seem like a good place to make everything

"clean and tidy" for ninja anyway. That's where I do the normalize in

the Windows dep_database version.


>

> By the way I've tried your branch and it works well for me. The only issue

> was that bootstraper script doesn't work in your branch (version.h is not

> generated for bootstrap.py and linker fails with duplicated declarations of

> "main" added by the utilities).


The documentation to add_custom_command also mentions restrictions when using genexps in OUTPUT. But 1) it seems to be related to target-specific ones and 2) in my case the genexp forms only a part of the whole output path, so it should not be cut off completely.


As I said, I create custom commands/targets programmatically. To do this, I need to precompute the dependencies for both by recording the respective mix of files and targets in cmake lists. For some reason, I thought that these lists had to be converted to some string with spaces as separators (I even handled the spaces inside the paths without thinking twice). This is wrong, of course, since DEPENDS simply expects the arguments to be a cmake list. Debug messages look quite innocent, of course.

The hard part was that the error occurred after configuration and before build (during build system generation) and was hard to nail down.


Upon reading the introductory chapters that were meant to prepare the reader to understand the Shoninki, my dilemma over whose work I was reviewing evaporated. Since the original Shoninki was written in the Edo period, the nuances in the Japanese language and cultural context differ vastly from that of modern Japan. It follows then that a mere translation of the Shoninki (without interpreting and taking into account the historical, cultural and language context) would be utterly useless for the average modern reader. It would be akin to a non-English speaker attempting to read literature that is far more obscure than Shakespeare for his/her first English lesson.


The True Path Of The Ninja: The Definitive Translation Of The Shoninki is structured in the manner as follows. And to clarify, the Shoninki focuses on the espionage techniques and strategies of Kishu-Ryu, not the martial arts.


In addition, the introduction devotes a few pages to the challenges of translating the Shoninki, which enables the reader to appreciate the importance of historical and cultural context. Since society, language and culture evolve over time, it would be ludicrous to judge and interpret translations set in Edo Japan based on modern-day values, ethics and mindset. Understanding this allows you to truly immerse into the ninja world, and see through the eyes of Natori with awareness of the cultural norms unique to his time.


Where the preface and part one focuses on laying the groundwork and definitions of ninja, the opening provides information on the foundational espionage techniques, outlining basic tools, weapons, infiltration and teamwork.


In the Shoninki Middle Chapters, Natori goes into detail as to specific techniques on evading capture, infiltration, and manipulating and hiding within an unfamiliar environment. Also, in this section are physiognomy, ninja magic and divination.

3a8082e126
Reply all
Reply to author
Forward
0 new messages