Search Results

Search found 4936 results on 198 pages for 'unity 2d'.

Page 189/198 | < Previous Page | 185 186 187 188 189 190 191 192 193 194 195 196  | Next Page >

  • Collaborative Whiteboard using WebSocket in GlassFish 4 - Text/JSON and Binary/ArrayBuffer Data Transfer (TOTD #189)

    - by arungupta
    This blog has published a few blogs on using JSR 356 Reference Implementation (Tyrus) as its integrated in GlassFish 4 promoted builds. TOTD #183: Getting Started with WebSocket in GlassFish TOTD #184: Logging WebSocket Frames using Chrome Developer Tools, Net-internals and Wireshark TOTD #185: Processing Text and Binary (Blob, ArrayBuffer, ArrayBufferView) Payload in WebSocket TOTD #186: Custom Text and Binary Payloads using WebSocket One of the typical usecase for WebSocket is online collaborative games. This Tip Of The Day (TOTD) explains a sample that can be used to build such games easily. The application is a collaborative whiteboard where different shapes can be drawn in multiple colors. The shapes drawn on one browser are automatically drawn on all other peer browsers that are connected to the same endpoint. The shape, color, and coordinates of the image are transfered using a JSON structure. A browser may opt-out of sharing the figures. Alternatively any browser can send a snapshot of their existing whiteboard to all other browsers. Take a look at this video to understand how the application work and the underlying code. The complete sample code can be downloaded here. The code behind the application is also explained below. The web page (index.jsp) has a HTML5 Canvas as shown: <canvas id="myCanvas" width="150" height="150" style="border:1px solid #000000;"></canvas> And some radio buttons to choose the color and shape. By default, the shape, color, and coordinates of any figure drawn on the canvas are put in a JSON structure and sent as a message to the WebSocket endpoint. The JSON structure looks like: { "shape": "square", "color": "#FF0000", "coords": { "x": 31.59999942779541, "y": 49.91999053955078 }} The endpoint definition looks like: @WebSocketEndpoint(value = "websocket",encoders = {FigureDecoderEncoder.class},decoders = {FigureDecoderEncoder.class})public class Whiteboard { As you can see, the endpoint has decoder and encoder registered that decodes JSON to a Figure (a POJO class) and vice versa respectively. The decode method looks like: public Figure decode(String string) throws DecodeException { try { JSONObject jsonObject = new JSONObject(string); return new Figure(jsonObject); } catch (JSONException ex) { throw new DecodeException("Error parsing JSON", ex.getMessage(), ex.fillInStackTrace()); }} And the encode method looks like: public String encode(Figure figure) throws EncodeException { return figure.getJson().toString();} FigureDecoderEncoder implements both decoder and encoder functionality but thats purely for convenience. But the recommended design pattern is to keep them in separate classes. In certain cases, you may even need only one of them. On the client-side, the Canvas is initialized as: var canvas = document.getElementById("myCanvas");var context = canvas.getContext("2d");canvas.addEventListener("click", defineImage, false); The defineImage method constructs the JSON structure as shown above and sends it to the endpoint using websocket.send(). An instant snapshot of the canvas is sent using binary transfer with WebSocket. The WebSocket is initialized as: var wsUri = "ws://localhost:8080/whiteboard/websocket";var websocket = new WebSocket(wsUri);websocket.binaryType = "arraybuffer"; The important part is to set the binaryType property of WebSocket to arraybuffer. This ensures that any binary transfers using WebSocket are done using ArrayBuffer as the default type seem to be blob. The actual binary data transfer is done using the following: var image = context.getImageData(0, 0, canvas.width, canvas.height);var buffer = new ArrayBuffer(image.data.length);var bytes = new Uint8Array(buffer);for (var i=0; i<bytes.length; i++) { bytes[i] = image.data[i];}websocket.send(bytes); This comprehensive sample shows the following features of JSR 356 API: Annotation-driven endpoints Send/receive text and binary payload in WebSocket Encoders/decoders for custom text payload In addition, it also shows how images can be captured and drawn using HTML5 Canvas in a JSP. How could this be turned in to an online game ? Imagine drawing a Tic-tac-toe board on the canvas with two players playing and others watching. Then you can build access rights and controls within the application itself. Instead of sending a snapshot of the canvas on demand, a new peer joining the game could be automatically transferred the current state as well. Do you want to build this game ? I built a similar game a few years ago. Do somebody want to rewrite the game using WebSocket APIs ? :-) Many thanks to Jitu and Akshay for helping through the WebSocket internals! Here are some references for you: JSR 356: Java API for WebSocket - Specification (Early Draft) and Implementation (already integrated in GlassFish 4 promoted builds) Subsequent blogs will discuss the following topics (not necessary in that order) ... Error handling Interface-driven WebSocket endpoint Java client API Client and Server configuration Security Subprotocols Extensions Other topics from the API

    Read the article

  • drawing thick, textured lines in OpenGL

    - by NateS
    I need to draw thick textured line segments in OpenGL. Actually I need curves made out of short line segments. Here is what I have: In the upper left is an example of two connected line segments. The second image shows once the lines are given width, they overlap. If I apply a texture that uses translucency, the overlap looks terrible. The third image shows that both lines are shortened by half the amount necessary to make the thick line corners just touch. This way I can fill the space between the lines with a triangle. On the right you can see this works well (ignore the horizontal line when the crappy texture repeats). But it doesn't always work well. In the bottom left the curve is made of many short line segments. Note the incorrect texture application. My program is written in Java, making use of the LWJGL OpenGL binding (and minor use of Slick, a 2D helper framework). I've made a zip file that contains an executable JAR so you can easily see the problem. It also has the Java code (there is only one source file) and an Eclipse project, so you can instantly run it through Eclipse and hack at it if you like. Here she is: http://n4te.com/temp/lines.zip To run, execute "java -jar lines.jar". You may need "-Djava.library.path=." before -jar if you are not on Windows. Press space to toggle texture/wireframe. The wireframe only shows the line segments, the triangle between them isn't drawn. I don't need to draw arbitrary lines, just bezier curves similar to what you see in the program. Sorry the code is a bit messy, once I have a solution I will refactor. I have investigated using GLUtessellator. It greatly simplified construction of the line, but I found that applying the texture was perfect. It worked most of the time (top image below), but long vertical curves would have severe texture distortion (bottom image below): This turned out to be much easier to code, but in the end worse than my approach. I believe what I'm trying to do is called "line tessellation" or "stroke tessellation". I assume this has been solved already? Is there standard code I can leverage? Otherwise, how can I fix my code so that the texture does not freak out on short, vertical curves?

    Read the article

  • Rx Reactive extensions: Unit testing with FromAsyncPattern

    - by Andrew Anderson
    The Reactive Extensions have a sexy little hook to simplify calling async methods: var func = Observable.FromAsyncPattern<InType, OutType>( myWcfService.BeginDoStuff, myWcfService.EndDoStuff); func(inData).ObserveOnDispatcher().Subscribe(x => Foo(x)); I am using this in an WPF project, and it works great at runtime. Unfortunately, when trying to unit test methods that use this technique I am experiencing random failures. ~3 out of every five executions of a test that contain this code fails. Here is a sample test (implemented using a Rhino/unity auto-mocking container): [TestMethod()] public void SomeTest() { // arrange var container = GetAutoMockingContainer(); container.Resolve<IMyWcfServiceClient>() .Expect(x => x.BeginDoStuff(null, null, null)) .IgnoreArguments() .Do( new Func<Specification, AsyncCallback, object, IAsyncResult>((inData, asyncCallback, state) => { return new CompletedAsyncResult(asyncCallback, state); })); container.Resolve<IRepositoryServiceClient>() .Expect(x => x.EndRetrieveAttributeDefinitionsForSorting(null)) .IgnoreArguments() .Do( new Func<IAsyncResult, OutData>((ar) => { return someMockData; })); // act var target = CreateTestSubject(container); target.DoMethodThatInvokesService(); // Run the dispatcher for everything over background priority Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Background, new Action(() => { })); // assert Assert.IsTrue(my operation ran as expected); } The problem that I see is that the code that I specified to run when the async action completed (in this case, Foo(x)), is never called. I can verify this by setting breakpoints in Foo and observing that they are never reached. Further, I can force a long delay after calling DoMethodThatInvokesService (which kicks off the async call), and the code is still never run. I do know that the lines of code invoking the Rx framework were called. Other things I've tried: I have attempted to modify the second last line according to the suggestions here: Reactive Extensions Rx - unit testing something with ObserveOnDispatcher No love. I have added .Take(1) to the Rx code as follows: func(inData).ObserveOnDispatcher().Take(1).Subscribe(x = Foo(x)); This improved my failure rate to something like 1 in 5, but they still occurred. I have rewritten the Rx code to use the plain jane Async pattern. This works, however my developer ego really would love to use Rx instead of boring old begin/end. In the end I do have a work around in hand (i.e. don't use Rx), however I feel that it is not ideal. If anyone has ran into this problem in the past and found a solution, I'd dearly love to hear it.

    Read the article

  • facebook connect for android returns a blank login screen?

    - by jonney
    Hi, i am trying to use the old facebook connect authentication to authenticate my android client to get the necessary session id's and other credentials thats needed to start using the web service of facebook. the issue i am having is that when my android application launces and tries to load the login page for facebook, that very same login page is blank and it only displays the the facebook logo as the title of the screen. No login fields or buttons are visible leaving me nowhere to login and authenticate a user. i have tried two API's one is facebook connect api for android http://code.google.com/p/fbconnect-android/ and the other one is the official android facebook sdk that is recommended to be used instead of the previous one i have just mentioned https://github.com/facebook/facebook-android-sdk/ . please see the image below of how it looks like on my app. Here is code that uses the latest android sdk facebook: /** * Authenticate facebook network */ private void authenticateFacebook() { // TODO: move this away from this activty class into some kind of // helper/wrapper class Log.d(TAG, "Clicked on the facebook"); Facebook facebook = new Facebook(OAUTH_KEY_FACEBOOK_API); facebook.authorize(this, new AuthorizeListener()); } class AuthorizeListener implements DialogListener{ @Override public void onComplete(Bundle values) { // TODO Auto-generated method stub Log.d(TAG, "finished authorizing facebook user"); } @Override public void onFacebookError(FacebookError e) { // TODO Auto-generated method stub } @Override public void onError(DialogError e) { // TODO Auto-generated method stub } @Override public void onCancel() { // TODO Auto-generated method stub } } And a simple example of how to use it: http://developers.facebook.com/docs/guides/mobile/ My code is more or less identical to the above example. edit: i did not catch what logcat was inputing in my first attempted at my code above but their was no exceptions or warnings thrown at the time. just a blank page. i then tried it again and diddnt touch my code and what happens now is that a loading dialogue view pops up and stays their for a few minutes until the facebook windows disapears and the logcat outputs the error below: 11-18 17:26:19.913: DEBUG/Facebook-WebView(783): Webview loading URL: https://www.facebook.com/dialog/oauth?type=user_agent&redirect_uri=fbconnect%3A%2F%2Fsuccess&display=touch&client_id=e??????????????????? 11-18 17:27:01.756: DEBUG/Facebook-authorize(783): Login failed: com.kc.unity.agent.util.oauth.facebook.DialogError: The connection to the server was unsuccessful. 11-18 17:27:01.783: DEBUG/Facebook-WebView(783): Webview loading URL: https://www.facebook.com/dialog/oauth?type=user_agent&redirect_uri=fbconnect%3A%2F%2Fsuccess&display=touch&client_id=??????????????? please note that the client id i have amended for obvious reasons but the rest of the logcat is untouched

    Read the article

  • Cross-table linq query with EF4/POCO

    - by Basiclife
    Hi All, I'm new to EF(any version) and POCO. I'm trying to use POCO entities with a generic repository in a "code-first" mode(?) I've got some POCO Entities (no proxies, no lazy loading, nothing). I have a repository(of T as Entity) which provides me with basic get/getsingle/getfirst functionality which takes a lambda as a parameter (specifically a System.Func(Of T, Boolean)) Now as I'm returning the simplest possible POCO object, none of the relationship parameters work once they've been retrieved from the database (as I would expect). However, I had assumed (wrongly) that my lambda query passed to the repository would be able to use the links between entities as it would be executed against the DB before the simple POCO entities are generated. The flow is: GUI calls: Public Function GetAllTypesForCategory(ByVal CategoryID As Guid) As IEnumerable(Of ItemType) Return ItemTypeRepository.Get(Function(x) x.Category.ID = CategoryID) End Function Get is defined in Repository(of T as Entity): Public Function [Get](ByVal Query As System.Func(Of T, Boolean)) As IEnumerable(Of T) Implements Interfaces.IRepository(Of T).Get Return ObjectSet.Where(Query).ToList() End Function The code doesn't error when this method is called but does when I try to use the result set. (This seems to be a lazy loading behaviour so I tried adding the .ToList() to force eager loading - no difference) I'm using unity/IOC to wire it all up but I believe that's irrelevant to the issue I'm having NB: Relationships between entities are being configured properly and if I turn on proxies/lazy loading/etc... this all just works. I'm intentionally leaving all that turned off as some calls to the BL will be from a website but some will be via WCF - So I want the simplest possible objects. Also, I don't want a change in an object passed to the UI to be committed to the DB if another BL method calls Commit() Can someone please either point out how to make this work or explain why it's not possible? All I want to do is make sure the lambda I pass in is performed against the DB before the results are returned Many thanks. In case it matters, the container is being populated with everything as shown below: Container.AddNewExtension(Of EFRepositoryExtension)() Container.Configure(Of IEFRepositoryExtension)(). WithConnection(ConnectionString). WithContextLifetime(New HttpContextLifetimeManager(Of IObjectContext)()). ConfigureEntity(New CategoryConfig(), "Categories"). ConfigureEntity(New ItemConfig()). ... )

    Read the article

  • Resgen al.exe generated resources do not work within .net library

    - by Raj G
    Hi, I am currently working on a library in .Net and I planned to make the strings that are used within the library into culture specific resource files. I made Resources.resx, Resources.en-US.resx and Resources.ja-JP.resx file. I also deleted the Resources.designer.cs file autogenerated by visual studio 2008. I am loading Resources through my custom ResourceManager object [using GetString method]. The problem that I am facing is that when I compile the library within visual studio and set the culture from the calling application, everything is working fine. But if I manually go to the directory and change a string for a culture and regenerate the satellite assembly with resgen and al.exe, the string displayed, falls back to the invariant culture. I have attached the ildasm view of both the dlls en-US generated from within visual studio //Metadata version: v2.0.50727 .assembly extern mscorlib { .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. .hash = (71 05 4D 54 C4 8D C2 90 7D 8B CF 57 2E B5 98 22 // q.MT....}..W..." F5 5B 2E 06 ) // .[.. .ver 2:0:0:0 } .assembly EmailEngine.resources { .custom instance void [mscorlib]System.Reflection.AssemblyTitleAttribute::.ctor(string) = ( 01 00 0B 45 6D 61 69 6C 45 6E 67 69 6E 65 00 00 ) // ...EmailEngine.. .custom instance void [mscorlib]System.Reflection.AssemblyDescriptionAttribute::.ctor(string) = ( 01 00 FF 00 00 ) .custom instance void [mscorlib]System.Reflection.AssemblyCompanyAttribute::.ctor(string) = ( 01 00 FF 00 00 ) .custom instance void [mscorlib]System.Reflection.AssemblyProductAttribute::.ctor(string) = ( 01 00 0B 45 6D 61 69 6C 45 6E 67 69 6E 65 00 00 ) // ...EmailEngine.. .custom instance void [mscorlib]System.Reflection.AssemblyCopyrightAttribute::.ctor(string) = ( 01 00 12 43 6F 70 79 72 69 67 68 74 20 C2 A9 20 // ...Copyright .. 20 32 30 30 38 00 00 ) // 2008.. .custom instance void [mscorlib]System.Reflection.AssemblyTrademarkAttribute::.ctor(string) = ( 01 00 FF 00 00 ) .custom instance void [mscorlib]System.Reflection.AssemblyFileVersionAttribute::.ctor(string) = ( 01 00 07 31 2E 30 2E 30 2E 30 00 00 ) // ...1.0.0.0.. .hash algorithm 0x00008004 .ver 1:0:0:0 .locale = (65 00 6E 00 2D 00 55 00 53 00 00 00 ) // e.n.-.U.S... } .mresource public 'EmailEngine.Properties.Resources.en-US.resources' { // Offset: 0x00000000 Length: 0x00000111 } .module EmailEngine.resources.dll // MVID: {D030D620-4E59-46F4-94F4-5EA0F9554E67} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY // Image base: 0x008B0000 ja-JP generated by me using resgen and al.exe // Metadata version: v2.0.50727 .assembly EmailEngine.resources { .hash algorithm 0x00008004 .ver 0:0:0:0 .locale = (6A 00 61 00 00 00 ) // j.a... } .mresource public 'EmailEngine.Properties.Resources.ja-JP.resources' { // Offset: 0x00000000 Length: 0x0000012F } .module EmailEngine.resources.dll // MVID: {0F470BCD-C36D-4B9F-A8ED-205A0E5A9F6F} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY // Image base: 0x007F0000 Can anyone help me as to why these two files are different and what is going on here? Why would the same Japanese resource file work when generated from within visual studio and not when generated using tools. TIA Raj

    Read the article

  • Finding edge and corner values of an image in matlab

    - by James
    Hi, this problem links to two other questions i've asked on here. I am tracing the outline of an image and plotting this to a dxf file. I would like to use the bwboundaries function to find the coordinates of the edges of the image, find the corner coordinates using the cornermetric function and then remove any edge coordinates that are not a corner. The important thing I need to be able to do is keep the order of the corner elements obtained from bwboundaries, so that the section traces properly. The dxf function I have that draws from the coordinates draws lines between coordinates that are next to each other, so the line has to be drawn "around" the section rather than straight between the corner points. The reason I am doing this is because there are less coordinates obtained this way, so it is easier to amend the dxf file (as there are less points to manipulate). The code I have so far is: %# Shape to be traced bw = zeros(200); bw(20:40,20:180) = 1; bw(20:180,90:110) = 1; bw(140:180,20:185) = 1; %# Boundary Finding Section [Boundary] = bwboundaries(bw); %Traces the boundary of each section figure, imshow(bw); hold on; colors=['b' 'g' 'r' 'c' 'm' 'y']; for k=1:length(Boundary) perim = Boundary{k}; %Obtains perimeter coordinates (as a 2D matrix) from the cell array cidx = mod(k,length(colors))+1;% Obtains colours for the plot plot(perim(:,2), perim(:,1),... colors(cidx),'LineWidth',2); end Coordmat = cell2mat(Boundary) %Converts the traced regions to a matrix X = Coordmat(:,1) Y = Coordmat(:,2) % This gives the edge coordinates in matrix form %% Corner Finding Section (from Jonas' answer to a previous question %# get corners cornerProbability = cornermetric(bw); cornerIdx = find(cornerProbability==max(cornerProbability(:))); %# Label the image. bwlabel puts 1 for the first feature, 2 for the second, etc. %# Since concave corners are placed just outside the feature, grow the features %# a little before labeling bw2 = imdilate(bw,ones(3)); labeledImage = bwlabel(bw2); %# read the feature number associated with the corner cornerLabels = labeledImage(cornerIdx); %# find all corners that are associated with feature 1 corners_1 = cornerIdx(cornerLabels==1) [Xcorners, Ycorners] = ind2sub(200,corners_1) % Convert subscripts The code I have is, to give a matrix Xfin for the final x coordinates (which are on the edge AND at a corner. Xfin = zeros(length(X),1) for i = Xcorners XFin(i) = Xcorners if i~= Xcorners XFin(i) = [] end end However, this does not work correctly, because the values in the solution are sorted into order, and only one of each value remains. As I said, I would like the corner elements to be in the same order as obtained from bwboundaries, to allow the image to trace properly. Thanks

    Read the article

  • Connecting to Active Directory Application Mode from Perl

    - by Khurram Aziz
    I am trying to connect to Active Directory Application Mode instance. The instance is conenctable from third party LDAP clients like Softerra LDAP Browser. But I am getting the following error when connecting from Perl Net::LDAP=HASH(0x876d8e4) sending: Net::LDAP=HASH(0x876d8e4) received: 30 84 00 00 00 A7 02 01 02 65 84 00 00 00 9E 0A 0........e...... 01 01 04 00 04 84 00 00 00 93 30 30 30 30 30 34 ..........000004 44 43 3A 20 4C 64 61 70 45 72 72 3A 20 44 53 49 DC: LdapErr: DSI 44 2D 30 43 30 39 30 36 32 42 2C 20 63 6F 6D 6D D-0C09062B, comm 65 6E 74 3A 20 49 6E 20 6F 72 64 65 72 20 74 6F ent: In order to 20 70 65 72 66 6F 72 6D 20 74 68 69 73 20 6F 70 perform this op 65 72 61 74 69 6F 6E 20 61 20 73 75 63 63 65 73 eration a succes 73 66 75 6C 20 62 69 6E 64 20 6D 75 73 74 20 62 sful bind must b 65 20 63 6F 6D 70 6C 65 74 65 64 20 6F 6E 20 74 e completed on t 68 65 20 63 6F 6E 6E 65 63 74 69 6F 6E 2E 2C 20 he connection., 64 61 74 61 20 30 2C 20 76 65 63 65 00 __ __ __ data 0, vece.` My directory structure is Partition: CN=Apps,DC=MyCo,DC=COM User exists as CN=myuser,CN=Apps,DC=MyCo,DC=COM I have couple of other entries of the custom class which I am interested to browse; those instances appear fine in ADSI Edit, Softerra LDAP Browser etc. I am new to Perl....My perl code is #!/usr/bin/perl use Net::LDAP; $ldap = Net::LDAP->new("127.0.0.1", debug => 2, user => "CN=myuser,CN=Apps,DC=MyCo,DC=COM", password => "secret" ) or die "$@"; $ldap->bind(version => 3) or die "$@"; print "Connected to ldap\n"; $mesg = $ldap->search( filter => "(objectClass=*)" ) or die ("Failed on search.$!"); my $max = $mesg->count; print "$max records found!\n"; for( my $index = 0 ; $index < $max ; $index++) { my $entry = $mesg->entry($index); my $dn = $entry->dn; @attrs = $entry->attributes; foreach my $var (@attrs) { $attr = $entry->get_value( $var, asref => 1 ); if ( defined($attr) ) { foreach my $value ( @$attr ) { print "$var: $value\n"; } } } } $ldap->unbind();

    Read the article

  • Best practice to handle Parent Form Child Form relation using Presentation Model

    - by Rajarshi
    According to Presentation Model notes by Martin Fowler and also on MSDN documentation about Presentation Model, it is explained that the Presentation Model Class should be unaware of the UI class and similarly Business Model Class should be unaware of the Presentation Model class. The UI should databind extensively to the Presentation Model, the Presentation Model in turn will co-ordinate with one or more Domain/Business Model objects to get the job done. The Presentation Model basically presents the Domain Model data in a way to facilitate maximum data binding in UI, allowing the UI take as less decisions as possible and thus increase testability of Presentation behaviours. This also makes the presentation model class generic, i.e. agnostic of any particular UI technology. Now, consider there is a List form (say CustomerList) and there is another Root form (say Customer) and there is a Use Case of allowing to Edit a Customer from the CustomerList form on a button click. For simplicity of discussion, consider that some actions took place when Customer List is opened from menu (i.e. Customer menu clicked) and the Customer List has been shown from the Menu click event. Now as per the above Use Case, I need to open the Customer Root UI (single Customer) from the Customer List. How do I do that? Build necessary objects (BusinessModel, PresentationModel, UI) in click event of Edit button and call CustomerEdit UI from there? Build the CustomerEdit UI from Presentation Model Class and show UI from presentation model? this can be done in any of the two ways below - a. Create objects in the following sequence DomainModel-PresentationModel-UIForm b. Use Unity.Resolve(); Either ways, Presentation Model is violated as the P model now has to the refer the concrete UI assembly, where CustomerEdit is located. Also the P Model has to refer and use a WinForm directly making it less UI technology agnostic. Even though the violations are in theory and can be ignored, I would still seek the community's opinion about whether I am going wrong direction. Please suggest if there's a better way to call the Child Form from the List (Parent) Form. Rajarshi

    Read the article

  • Find out CRC or CHECKSUM of RS232 data

    - by Carlos Alloatti
    I need to communicate with a RS232 device, I have no specs or information available. I send a 16 byte command and get a 16 byte result back. The last byte looks like some kind of crc or checksum, I have tried using this http://miscel.dk/MiscEl/miscelCRCandChecksum.html with no luck. Anyone can reverse engineer the crc/checksum algorithm? here is some data captured with an RS-232 monitor program: 01 80 42 00 00 00 00 00 00 00 00 00 00 00 01 B3 01 80 42 00 00 00 00 00 00 00 00 00 00 00 02 51 01 80 42 00 00 00 00 00 00 00 00 00 00 00 03 0F 01 80 42 00 00 00 00 00 00 00 00 00 00 00 04 8C 01 80 42 00 00 00 00 00 00 00 00 00 00 00 05 D2 01 80 42 00 00 00 00 00 00 00 00 00 00 00 06 30 01 80 42 00 00 00 00 00 00 00 00 00 00 00 07 6E 01 80 42 00 00 00 00 00 00 00 00 00 00 00 08 2F 01 80 42 00 00 00 00 00 00 00 00 00 00 00 09 71 01 80 42 00 00 00 00 00 00 00 00 00 00 00 0A 93 01 80 42 00 00 00 00 00 00 00 00 00 00 00 0B CD 01 80 42 00 00 00 00 00 00 00 00 00 00 00 0C 4E 01 80 42 00 00 00 00 00 00 00 00 00 00 00 0D 10 01 80 42 00 00 00 00 00 00 00 00 00 00 00 0E F2 01 80 42 00 00 00 00 00 00 00 00 00 00 00 0F AC 01 80 42 00 00 00 00 00 00 00 00 00 00 00 10 70 01 80 42 00 00 00 00 00 00 00 00 00 00 00 11 2E 01 80 42 00 00 00 00 00 00 00 00 00 00 00 12 CC 01 80 42 00 00 00 00 00 00 00 00 00 00 00 13 92 01 80 42 00 00 00 00 00 00 00 00 00 00 00 14 11 01 80 42 00 00 00 00 00 00 00 00 00 00 00 15 4F 01 80 42 00 00 00 00 00 00 00 00 00 00 00 16 AD 01 80 42 00 00 00 00 00 00 00 00 00 00 00 17 F3 01 80 42 00 00 00 00 00 00 00 00 00 00 00 18 B2 01 80 42 00 00 00 00 00 00 00 00 00 00 00 19 EC 01 80 42 00 00 00 00 00 00 00 00 00 00 00 1A 0E 01 80 42 00 00 00 00 00 00 00 00 00 00 00 1B 50 01 80 42 00 00 00 00 00 00 00 00 00 00 00 1C D3 01 80 42 00 00 00 00 00 00 00 00 00 00 00 1D 8D 01 80 42 00 00 00 00 00 00 00 00 00 00 00 1E 6F 01 80 42 00 00 00 00 00 00 00 00 00 00 00 1F 31 01 80 42 00 00 00 00 00 00 00 00 00 00 00 20 CE 01 80 42 00 00 00 00 00 00 00 00 00 00 00 21 90 01 80 42 00 00 00 00 00 00 00 00 00 00 00 22 72 01 80 42 00 00 00 00 00 00 00 00 00 00 00 23 2C 01 80 42 00 00 00 00 00 00 00 00 00 00 00 24 AF 01 80 42 00 00 00 00 00 00 00 00 00 00 00 25 F1 01 80 42 00 00 00 00 00 00 00 00 00 00 00 26 13 01 80 42 00 00 00 00 00 00 00 00 00 00 00 27 4D 01 80 42 00 00 00 00 00 00 00 00 00 00 00 28 0C 01 80 42 00 00 00 00 00 00 00 00 00 00 00 29 52 01 80 42 00 00 00 00 00 00 00 00 00 00 00 2A B0 01 80 42 00 00 00 00 00 00 00 00 00 00 00 2B EE 01 80 42 00 00 00 00 00 00 00 00 00 00 00 2C 6D 01 80 42 00 00 00 00 00 00 00 00 00 00 00 2D 33 01 80 42 00 00 00 00 00 00 00 00 00 00 00 2E D1 01 80 42 00 00 00 00 00 00 00 00 00 00 00 2F 8F 01 80 42 00 00 00 00 00 00 00 00 00 00 00 30 53 01 80 42 00 00 00 00 00 00 00 00 00 00 00 31 0D 01 80 42 00 00 00 00 00 00 00 00 00 00 00 32 EF 01 80 42 00 00 00 00 00 00 00 00 00 00 00 33 B1 01 80 42 00 00 00 00 00 00 00 00 00 00 00 34 32 01 80 42 00 00 00 00 00 00 00 00 00 00 00 35 6C 01 80 42 00 00 00 00 00 00 00 00 00 00 00 36 8E 01 80 42 00 00 00 00 00 00 00 00 00 00 00 37 D0 01 80 42 00 00 00 00 00 00 00 00 00 00 00 38 91 01 80 42 00 00 00 00 00 00 00 00 00 00 00 39 CF 01 80 42 00 00 00 00 00 00 00 00 00 00 00 3A 2D 01 80 42 00 00 00 00 00 00 00 00 00 00 00 3B 73 01 80 42 00 00 00 00 00 00 00 00 00 00 00 3C F0 01 80 42 00 00 00 00 00 00 00 00 00 00 00 3D AE 01 80 42 00 00 00 00 00 00 00 00 00 00 00 3E 4C 01 80 42 00 00 00 00 00 00 00 00 00 00 00 3F 12 01 80 42 00 00 00 00 00 00 00 00 00 00 00 40 AB 01 80 42 00 00 00 00 00 00 00 00 00 00 00 41 F5 01 80 42 00 00 00 00 00 00 00 00 00 00 00 42 17 01 80 42 00 00 00 00 00 00 00 00 00 00 00 43 49 01 80 42 00 00 00 00 00 00 00 00 00 00 00 44 CA 01 80 42 00 00 00 00 00 00 00 00 00 00 00 45 94 01 80 42 00 00 00 00 00 00 00 00 00 00 00 46 76 01 80 42 00 00 00 00 00 00 00 00 00 00 00 47 28 01 80 42 00 00 00 00 00 00 00 00 00 00 00 48 69 01 80 42 00 00 00 00 00 00 00 00 00 00 00 49 37 01 80 42 00 00 00 00 00 00 00 00 00 00 00 4A D5 01 80 42 00 00 00 00 00 00 00 00 00 00 00 4B 8B 01 80 42 00 00 00 00 00 00 00 00 00 00 00 4C 08 01 80 42 00 00 00 00 00 00 00 00 00 00 00 4D 56 01 80 42 00 00 00 00 00 00 00 00 00 00 00 4E B4 01 80 42 00 00 00 00 00 00 00 00 00 00 00 4F EA 01 80 42 00 00 00 00 00 00 00 00 00 00 00 50 36 01 80 42 00 00 00 00 00 00 00 00 00 00 00 51 68 01 80 42 00 00 00 00 00 00 00 00 00 00 00 52 8A 01 80 42 00 00 00 00 00 00 00 00 00 00 00 53 D4 01 80 42 00 00 00 00 00 00 00 00 00 00 00 54 57 01 80 42 00 00 00 00 00 00 00 00 00 00 00 55 09 01 80 42 00 00 00 00 00 00 00 00 00 00 00 56 EB 01 80 42 00 00 00 00 00 00 00 00 00 00 00 57 B5 01 80 42 00 00 00 00 00 00 00 00 00 00 00 58 F4 01 80 42 00 00 00 00 00 00 00 00 00 00 00 59 AA 01 80 42 00 00 00 00 00 00 00 00 00 00 00 5A 48 01 80 42 00 00 00 00 00 00 00 00 00 00 00 5B 16 01 80 42 00 00 00 00 00 00 00 00 00 00 00 5C 95 01 80 42 00 00 00 00 00 00 00 00 00 00 00 5D CB 01 80 42 00 00 00 00 00 00 00 00 00 00 00 5E 29 01 80 42 00 00 00 00 00 00 00 00 00 00 00 5F 77 01 80 42 00 00 00 00 00 00 00 00 00 00 00 60 88 01 80 42 00 00 00 00 00 00 00 00 00 00 00 61 D6 01 80 42 00 00 00 00 00 00 00 00 00 00 00 62 34 01 80 42 00 00 00 00 00 00 00 00 00 00 00 63 6A 01 80 42 00 00 00 00 00 00 00 00 00 00 00 64 E9 01 80 42 00 00 00 00 00 00 00 00 00 00 00 65 B7 01 80 42 00 00 00 00 00 00 00 00 00 00 00 66 55 01 80 42 00 00 00 00 00 00 00 00 00 00 00 67 0B 01 80 42 00 00 00 00 00 00 00 00 00 00 00 68 4A 01 80 42 00 00 00 00 00 00 00 00 00 00 00 69 14 01 80 42 00 00 00 00 00 00 00 00 00 00 00 6A F6 01 80 42 00 00 00 00 00 00 00 00 00 00 00 6B A8 01 80 42 00 00 00 00 00 00 00 00 00 00 00 6C 2B 01 80 42 00 00 00 00 00 00 00 00 00 00 00 6D 75 01 80 42 00 00 00 00 00 00 00 00 00 00 00 6E 97 01 80 42 00 00 00 00 00 00 00 00 00 00 00 6F C9 01 80 42 00 00 00 00 00 00 00 00 00 00 00 70 15 01 80 42 00 00 00 00 00 00 00 00 00 00 00 71 4B 01 80 42 00 00 00 00 00 00 00 00 00 00 00 72 A9 01 80 42 00 00 00 00 00 00 00 00 00 00 00 73 F7 01 80 42 00 00 00 00 00 00 00 00 00 00 00 74 74 01 80 42 00 00 00 00 00 00 00 00 00 00 00 75 2A 01 80 42 00 00 00 00 00 00 00 00 00 00 00 76 C8 01 80 42 00 00 00 00 00 00 00 00 00 00 00 77 96 01 80 42 00 00 00 00 00 00 00 00 00 00 00 78 D7 01 80 42 00 00 00 00 00 00 00 00 00 00 00 79 89 01 80 42 00 00 00 00 00 00 00 00 00 00 00 7A 6B 01 80 42 00 00 00 00 00 00 00 00 00 00 00 7B 35 01 80 42 00 00 00 00 00 00 00 00 00 00 00 7C B6 01 80 42 00 00 00 00 00 00 00 00 00 00 00 7D E8 01 80 42 00 00 00 00 00 00 00 00 00 00 00 7E 0A 01 80 42 00 00 00 00 00 00 00 00 00 00 00 7F 54 01 80 42 00 00 00 00 00 00 00 00 00 00 00 80 61 01 80 42 00 00 00 00 00 00 00 00 00 00 00 81 3F 01 80 42 00 00 00 00 00 00 00 00 00 00 00 82 DD 01 80 42 00 00 00 00 00 00 00 00 00 00 00 83 83 01 80 42 00 00 00 00 00 00 00 00 00 00 00 84 00 01 80 42 00 00 00 00 00 00 00 00 00 00 00 85 5E 01 80 42 00 00 00 00 00 00 00 00 00 00 00 86 BC 01 80 42 00 00 00 00 00 00 00 00 00 00 00 87 E2 01 80 42 00 00 00 00 00 00 00 00 00 00 00 88 A3 01 80 42 00 00 00 00 00 00 00 00 00 00 00 89 FD 01 80 42 00 00 00 00 00 00 00 00 00 00 00 8A 1F 01 80 42 00 00 00 00 00 00 00 00 00 00 00 8B 41 01 80 42 00 00 00 00 00 00 00 00 00 00 00 8C C2 01 80 42 00 00 00 00 00 00 00 00 00 00 00 8D 9C 01 80 42 00 00 00 00 00 00 00 00 00 00 00 8E 7E 01 80 42 00 00 00 00 00 00 00 00 00 00 00 8F 20 01 80 42 00 00 00 00 00 00 00 00 00 00 00 90 FC 01 80 42 00 00 00 00 00 00 00 00 00 00 00 91 A2 01 80 42 00 00 00 00 00 00 00 00 00 00 00 92 40 01 80 42 00 00 00 00 00 00 00 00 00 00 00 93 1E 01 80 42 00 00 00 00 00 00 00 00 00 00 00 94 9D 01 80 42 00 00 00 00 00 00 00 00 00 00 00 95 C3 01 80 42 00 00 00 00 00 00 00 00 00 00 00 96 21 01 80 42 00 00 00 00 00 00 00 00 00 00 00 97 7F 01 80 42 00 00 00 00 00 00 00 00 00 00 00 98 3E 01 80 42 00 00 00 00 00 00 00 00 00 00 00 99 60 01 80 42 00 00 00 00 00 00 00 00 00 00 00 9A 82 01 80 42 00 00 00 00 00 00 00 00 00 00 00 9B DC 01 80 42 00 00 00 00 00 00 00 00 00 00 00 9C 5F 01 80 42 00 00 00 00 00 00 00 00 00 00 00 9D 01 01 80 42 00 00 00 00 00 00 00 00 00 00 00 9E E3 01 80 42 00 00 00 00 00 00 00 00 00 00 00 9F BD 01 80 42 00 00 00 00 00 00 00 00 00 00 00 A0 42 01 80 42 00 00 00 00 00 00 00 00 00 00 00 A1 1C 01 80 42 00 00 00 00 00 00 00 00 00 00 00 A2 FE 01 80 42 00 00 00 00 00 00 00 00 00 00 00 A3 A0 01 80 42 00 00 00 00 00 00 00 00 00 00 00 A4 23 01 80 42 00 00 00 00 00 00 00 00 00 00 00 A5 7D 01 80 42 00 00 00 00 00 00 00 00 00 00 00 A6 9F 01 80 42 00 00 00 00 00 00 00 00 00 00 00 A7 C1 01 80 42 00 00 00 00 00 00 00 00 00 00 00 A8 80 01 80 42 00 00 00 00 00 00 00 00 00 00 00 A9 DE 01 80 42 00 00 00 00 00 00 00 00 00 00 00 AA 3C 01 80 42 00 00 00 00 00 00 00 00 00 00 00 AB 62 01 80 42 00 00 00 00 00 00 00 00 00 00 00 AC E1 01 80 42 00 00 00 00 00 00 00 00 00 00 00 AD BF 01 80 42 00 00 00 00 00 00 00 00 00 00 00 AE 5D 01 80 42 00 00 00 00 00 00 00 00 00 00 00 AF 03 01 80 42 00 00 00 00 00 00 00 00 00 00 00 B0 DF 01 80 42 00 00 00 00 00 00 00 00 00 00 00 B1 81 01 80 42 00 00 00 00 00 00 00 00 00 00 00 B2 63 01 80 42 00 00 00 00 00 00 00 00 00 00 00 B3 3D 01 80 42 00 00 00 00 00 00 00 00 00 00 00 B4 BE 01 80 42 00 00 00 00 00 00 00 00 00 00 00 B5 E0 01 80 42 00 00 00 00 00 00 00 00 00 00 00 B6 02 01 80 42 00 00 00 00 00 00 00 00 00 00 00 B7 5C 01 80 42 00 00 00 00 00 00 00 00 00 00 00 B8 1D 01 80 42 00 00 00 00 00 00 00 00 00 00 00 B9 43 01 80 42 00 00 00 00 00 00 00 00 00 00 00 BA A1 01 80 42 00 00 00 00 00 00 00 00 00 00 00 BB FF 01 80 42 00 00 00 00 00 00 00 00 00 00 00 BC 7C 01 80 42 00 00 00 00 00 00 00 00 00 00 00 BD 22 01 80 42 00 00 00 00 00 00 00 00 00 00 00 BE C0 01 80 42 00 00 00 00 00 00 00 00 00 00 00 BF 9E 01 80 42 00 00 00 00 00 00 00 00 00 00 00 C0 27 01 80 42 00 00 00 00 00 00 00 00 00 00 00 C1 79 01 80 42 00 00 00 00 00 00 00 00 00 00 00 C2 9B 01 80 42 00 00 00 00 00 00 00 00 00 00 00 C3 C5 01 80 42 00 00 00 00 00 00 00 00 00 00 00 C4 46 01 80 42 00 00 00 00 00 00 00 00 00 00 00 C5 18 01 80 42 00 00 00 00 00 00 00 00 00 00 00 C6 FA 01 80 42 00 00 00 00 00 00 00 00 00 00 00 C7 A4 01 80 42 00 00 00 00 00 00 00 00 00 00 00 C8 E5 01 80 42 00 00 00 00 00 00 00 00 00 00 00 C9 BB 01 80 42 00 00 00 00 00 00 00 00 00 00 00 CA 59 01 80 42 00 00 00 00 00 00 00 00 00 00 00 CB 07 01 80 42 00 00 00 00 00 00 00 00 00 00 00 CC 84 01 80 42 00 00 00 00 00 00 00 00 00 00 00 CD DA 01 80 42 00 00 00 00 00 00 00 00 00 00 00 CE 38 01 80 42 00 00 00 00 00 00 00 00 00 00 00 CF 66 01 80 42 00 00 00 00 00 00 00 00 00 00 00 D0 BA 01 80 42 00 00 00 00 00 00 00 00 00 00 00 D1 E4 01 80 42 00 00 00 00 00 00 00 00 00 00 00 D2 06 01 80 42 00 00 00 00 00 00 00 00 00 00 00 D3 58 01 80 42 00 00 00 00 00 00 00 00 00 00 00 D4 DB 01 80 42 00 00 00 00 00 00 00 00 00 00 00 D5 85 01 80 42 00 00 00 00 00 00 00 00 00 00 00 D6 67 01 80 42 00 00 00 00 00 00 00 00 00 00 00 D7 39 01 80 42 00 00 00 00 00 00 00 00 00 00 00 D8 78 01 80 42 00 00 00 00 00 00 00 00 00 00 00 D9 26 01 80 42 00 00 00 00 00 00 00 00 00 00 00 DA C4 01 80 42 00 00 00 00 00 00 00 00 00 00 00 DB 9A 01 80 42 00 00 00 00 00 00 00 00 00 00 00 DC 19 01 80 42 00 00 00 00 00 00 00 00 00 00 00 DD 47 01 80 42 00 00 00 00 00 00 00 00 00 00 00 DE A5 01 80 42 00 00 00 00 00 00 00 00 00 00 00 DF FB 01 80 42 00 00 00 00 00 00 00 00 00 00 00 E0 04 01 80 42 00 00 00 00 00 00 00 00 00 00 00 E1 5A 01 80 42 00 00 00 00 00 00 00 00 00 00 00 E2 B8 01 80 42 00 00 00 00 00 00 00 00 00 00 00 E3 E6 01 80 42 00 00 00 00 00 00 00 00 00 00 00 E4 65 01 80 42 00 00 00 00 00 00 00 00 00 00 00 E5 3B 01 80 42 00 00 00 00 00 00 00 00 00 00 00 E6 D9 01 80 42 00 00 00 00 00 00 00 00 00 00 00 E7 87 01 80 42 00 00 00 00 00 00 00 00 00 00 00 E8 C6 01 80 42 00 00 00 00 00 00 00 00 00 00 00 E9 98 01 80 42 00 00 00 00 00 00 00 00 00 00 00 EA 7A 01 80 42 00 00 00 00 00 00 00 00 00 00 00 EB 24 01 80 42 00 00 00 00 00 00 00 00 00 00 00 EC A7 01 80 42 00 00 00 00 00 00 00 00 00 00 00 ED F9 01 80 42 00 00 00 00 00 00 00 00 00 00 00 EE 1B 01 80 42 00 00 00 00 00 00 00 00 00 00 00 EF 45 01 80 42 00 00 00 00 00 00 00 00 00 00 00 F0 99 01 80 42 00 00 00 00 00 00 00 00 00 00 00 F1 C7 01 80 42 00 00 00 00 00 00 00 00 00 00 00 F2 25 01 80 42 00 00 00 00 00 00 00 00 00 00 00 F3 7B 01 80 42 00 00 00 00 00 00 00 00 00 00 00 F4 F8 01 80 42 00 00 00 00 00 00 00 00 00 00 00 F5 A6 01 80 42 00 00 00 00 00 00 00 00 00 00 00 F6 44 01 80 42 00 00 00 00 00 00 00 00 00 00 00 F7 1A 01 80 42 00 00 00 00 00 00 00 00 00 00 00 F8 5B 01 80 42 00 00 00 00 00 00 00 00 00 00 00 F9 05 01 80 42 00 00 00 00 00 00 00 00 00 00 00 FA E7 01 80 42 00 00 00 00 00 00 00 00 00 00 00 FB B9 01 80 42 00 00 00 00 00 00 00 00 00 00 00 FC 3A 01 80 42 00 00 00 00 00 00 00 00 00 00 00 FD 64 01 80 42 00 00 00 00 00 00 00 00 00 00 00 FE 86 01 80 42 00 00 00 00 00 00 00 00 00 00 00 FF D8 The second to last byte seems to be a sequential number that starts over at 00 when it reaches FF. I have included the whole range from 00 to FF to make it easier to guess the crc/checksum method.

    Read the article

  • Help finding longest non-repeating path through connected nodes - Python

    - by Jordan Magnuson
    I've been working on this for a couple of days now without success. Basically, I have a bunch of nodes arranged in a 2D matrix. Every node has four neighbors, except for the nodes on the sides and corners of the matrix, which have 3 and 2 neighbors, respectively. Imagine a bunch of square cards laid out side by side in a rectangular area--the project is actually simulating a sort of card/board game. Each node may or may not be connected to the nodes around it. Each node has a function (get_connections()), that returns the nodes immediately around it that it is connected to (so anywhere from 0 to 4 nodes are returned). Each node also has an "index" property, that contains it's position on the board matrix (eg '1, 4' - row 1, col 4). What I am trying to do is find the longest non-repeating path of connected nodes given a particular "start" node. I've uploaded a couple of images that should give a good idea of what I'm trying to do: In both images, the highlighted red cards are supposedly the longest path of connected cards containing the most upper-left card. However, you can see in both images that a couple of cards that should be in the path have been left out (Romania and Maldova in the first image, Greece and Turkey in the second) Here's the recursive function that I am using currently to find the longest path, given a starting node/card: def get_longest_trip(self, board, processed_connections = list(), processed_countries = list()): #Append this country to the processed countries list, #so we don't re-double over it processed_countries.append(self) possible_trips = dict() if self.get_connections(board): for i, card in enumerate(self.get_connections(board)): if card not in processed_countries: processed_connections.append((self, card)) possible_trips[i] = card.get_longest_trip(board, processed_connections, processed_countries) if possible_trips: longest_trip = [] for i, trip in possible_trips.iteritems(): trip_length = len(trip) if trip_length > len(longest_trip): longest_trip = trip longest_trip.append(self) return longest_trip else: print card_list = [] card_list.append(self) return card_list else: #If no connections from start_card, just return the start card #as the longest trip card_list = [] card_list.append(board.start_card) return card_list The problem here has to do with the processed_countries list: if you look at my first screenshot, you can see that what has happened is that when Ukraine came around, it looked at its two possible choices for longest path (Maldova-Romania, or Turkey, Bulgaria), saw that they were both equal, and chose one indiscriminantly. Now when Hungary comes around, it can't attempt to make a path through Romania (where the longest path would actually be), because Romania has been added to the processed_countries list by Ukraine. Any help on this is EXTREMELY appreciated. If you can find me a solution to this, recursive or not, I'd be happy to donate some $$ to you. I've uploaded my full source code (Python 2.6, Pygame 1.9 required) to: http://www.necessarygames.com/junk/planes_trains.zip The relevant code is in src/main.py, which is all set to run.

    Read the article

  • Fixed point math in c#?

    - by x4000
    Hi there, I was wondering if anyone here knows of any good resources for fixed point math in c#? I've seen things like this (http://2ddev.72dpiarmy.com/viewtopic.php?id=156) and this (http://stackoverflow.com/questions/79677/whats-the-best-way-to-do-fixed-point-math), and a number of discussions about whether decimal is really fixed point or actually floating point (update: responders have confirmed that it's definitely floating point), but I haven't seen a solid C# library for things like calculating cosine and sine. My needs are simple -- I need the basic operators, plus cosine, sine, arctan2, PI... I think that's about it. Maybe sqrt. I'm programming a 2D RTS game, which I have largely working, but the unit movement when using floating-point math (doubles) has very small inaccuracies over time (10-30 minutes) across multiple machines, leading to desyncs. This is presently only between a 32 bit OS and a 64 bit OS, all the 32 bit machines seem to stay in sync without issue, which is what makes me think this is a floating point issue. I was aware from this as a possible issue from the outset, and so have limited my use of non-integer position math as much as possible, but for smooth diagonal movement at varying speeds I'm calculating the angle between points in radians, then getting the x and y components of movement with sin and cos. That's the main issue. I'm also doing some calculations for line segment intersections, line-circle intersections, circle-rect intersections, etc, that also probably need to move from floating-point to fixed-point to avoid cross-machine issues. If there's something open source in Java or VB or another comparable language, I could probably convert the code for my uses. The main priority for me is accuracy, although I'd like as little speed loss over present performance as possible. This whole fixed point math thing is very new to me, and I'm surprised by how little practical information on it there is on google -- most stuff seems to be either theory or dense C++ header files. Anything you could do to point me in the right direction is much appreciated; if I can get this working, I plan to open-source the math functions I put together so that there will be a resource for other C# programmers out there. UPDATE: I could definitely make a cosine/sine lookup table work for my purposes, but I don't think that would work for arctan2, since I'd need to generate a table with about 64,000x64,000 entries (yikes). If you know any programmatic explanations of efficient ways to calculate things like arctan2, that would be awesome. My math background is all right, but the advanced formulas and traditional math notation are very difficult for me to translate into code.

    Read the article

  • Most efficient method to query a Young Tableau

    - by Matthieu M.
    A Young Tableau is a 2D matrix A of dimensions M*N such that: i,j in [0,M)x[0,N): for each p in (i,M), A[i,j] <= A[p,j] for each q in (j,N), A[i,j] <= A[i,q] That is, it's sorted row-wise and column-wise. Since it may contain less than M*N numbers, the bottom-right values might be represented either as missing or using (in algorithm theory) infinity to denote their absence. Now the (elementary) question: how to check if a given number is contained in the Young Tableau ? Well, it's trivial to produce an algorithm in O(M*N) time of course, but what's interesting is that it is very easy to provide an algorithm in O(M+N) time: Bottom-Left search: Let x be the number we look for, initialize i,j as M-1, 0 (bottom left corner) If x == A[i,j], return true If x < A[i,j], then if i is 0, return false else decrement i and go to 2. Else, if j is N-1, return false else increment j This algorithm does not make more than M+N moves. The correctness is left as an exercise. It is possible though to obtain a better asymptotic runtime. Pivot Search: Let x be the number we look for, initialize i,j as floor(M/2), floor(N/2) If x == A[i,j], return true If x < A[i,j], search (recursively) in A[0:i-1, 0:j-1], A[i:M-1, 0:j-1] and A[0:i-1, j:N-1] Else search (recursively) in A[i+1:M-1, 0:j], A[i+1:M-1, j+1:N-1] and A[0:i, j+1:N-1] This algorithm proceed by discarding one of the 4 quadrants at each iteration and running recursively on the 3 left (divide and conquer), the master theorem yields a complexity of O((N+M)**(log 3 / log 4)) which is better asymptotically. However, this is only a big-O estimation... So, here are the questions: Do you know (or can think of) an algorithm with a better asymptotical runtime ? Like introsort prove, sometimes it's worth switching algorithms depending on the input size or input topology... do you think it would be possible here ? For 2., I am notably thinking that for small size inputs, the bottom-left search should be faster because of its O(1) space requirement / lower constant term.

    Read the article

  • HLSL tex2d sampler seemingly returning incorrect values; why?

    - by BlueNovember
    Hello all, I have code that needs to render regions of my object differently depending on their location. I am trying to use a colour map to define these regions, then get a value (0-14) representing this region by sampling the texture. The problem is when I sample from my colour map, I get collisions. Ie, two regions with different colours in the colourmap get the same value returned from the sampler. I've tried various formats of my colour map. I set the colours for each region to be "5" apart in each case; Indexed colour RGB, RGBA: region 1 will have RGB 5,5,5. region 2 will have RGB 10,10,10 and so on. HSV Greyscale: region 1 will have HSV 0,0,5. region 2 will have HSV 0,0,10 and so on. The tex2D sampler returns a value [0..1]. To get the "region number" I multiply this by 100 and divide by 5, expecting a number [0..20]. (But currently only using 0-14) I am using Shader Model 2 and FX Composer. //Colour map texture gColourmapTexture < string ResourceName = "Globe_Colourmap_Regions_Greyscale.png"; string ResourceType = "2D"; >; sampler2D gColourmapSampler : register(s1) = sampler_state { Texture = <gColourmapTexture>; #if DIRECT3D_VERSION >= 0xa00 Filter = MIN_MAG_MIP_LINEAR; #else /* DIRECT3D_VERSION < 0xa00 */ MinFilter = Linear; MipFilter = Linear; MagFilter = Linear; #endif /* DIRECT3D_VERSION */ AddressU = Clamp; AddressV = Clamp; }; ... //Then later, in a method float region = tex2D(gColourmapSampler,In.UV).x; //at this point I do not think it matters which of xyz components I pick; even in HSV they're all the same for my image. region *= 100; //Now in range [0..100] region /= 5; //Now in range [0..20] float3 levels[21]; //*Code populating "levels" array with what is essentially colour information * levels[1] = ... levels[2] = ... //Chose which level this region has, by looking up its region number float3 Level = levels[region];

    Read the article

  • physics game programming box2d - orientating a turret-like object using torques

    - by egarcia
    This is a problem I hit when trying to implement a game using the LÖVE engine, which covers box2d with Lua scripting. The objective is simple: A turret-like object (seen from the top, on a 2D environment) needs to orientate itself so it points to a target. The turret is on the x,y coordinates, and the target is on tx, ty. We can consider that x,y are fixed, but tx, ty tend to vary from one instant to the other (i.e. they would be the mouse cursor). The turret has a rotor that can apply a rotational force (torque) on any given moment, clockwise or counter-clockwise. The magnitude of that force has an upper limit called maxTorque. The turret also has certain rotational inertia, which acts for angular movement the same way mass acts for linear movement. There's no friction of any kind, so the turret will keep spinning if it has an angular velocity. The turret has a small AI function that re-evaluates its orientation to verify that it points to the right direction, and activates the rotator. This happens every dt (~60 times per second). It looks like this right now: function Turret:update(dt) local x,y = self:getPositon() local tx,ty = self:getTarget() local maxTorque = self:getMaxTorque() -- max force of the turret rotor local inertia = self:getInertia() -- the rotational inertia local w = self:getAngularVelocity() -- current angular velocity of the turret local angle = self:getAngle() -- the angle the turret is facing currently -- the angle of the like that links the turret center with the target local targetAngle = math.atan2(oy-y,ox-x) local differenceAngle = _normalizeAngle(targetAngle - angle) if(differenceAngle <= math.pi) then -- counter-clockwise is the shortest path self:applyTorque(maxTorque) else -- clockwise is the shortest path self:applyTorque(-maxTorque) end end ... it fails. Let me explain with two illustrative situations: The turret "oscillates" around the targetAngle. If the target is "right behind the turret, just a little clock-wise", the turret will start applying clockwise torques, and keep applying them until the instant in which it surpasses the target angle. At that moment it will start applying torques on the opposite direction. But it will have gained a significant angular velocity, so it will keep going clockwise for some time... until the target will be "just behind, but a bit counter-clockwise". And it will start again. So the turret will oscillate or even go in round circles. I think that my turret should start applying torques in the "opposite direction of the shortest path" before it reaches the target angle (like a car braking before stopping). Intuitively, I think the turret should "start applying torques on the opposite direction of the shortest path when it is about half-way to the target objective". My intuition tells me that it has something to do with the angular velocity. And then there's the fact that the target is mobile - I don't know if I should take that into account somehow or just ignore it. How do I calculate when the turret must "start braking"?

    Read the article

  • Tools to help with analysing log files

    - by peter
    I am developing a C# .NET application. In the app.config file I add trace logging as shown, <?xml version="1.0" encoding="UTF-8" ?> <configuration> <system.diagnostics> <trace autoflush="true" /> <sources> <source name="System.Net.Sockets" maxdatasize="1024"> <listeners> <add name="MyTraceFile"/> </listeners> </source> </sources> <sharedListeners> <add name="MyTraceFile" type="System.Diagnostics.TextWriterTraceListener" initializeData="System.Net.trace.log" /> </sharedListeners> <switches> <add name="System.Net" value="Verbose" /> </switches> </system.diagnostics> </configuration> Are there any good tools around to analyse the log file that is output? The output looks like this, System.Net.Sockets Verbose: 0 : [5900] Data from Socket#8764489::Send DateTime=2010-04-07T03:22:40.1067012Z System.Net.Sockets Verbose: 0 : [5900] 00000000 : 4D 49 4D 45 2D 56 65 72-73 69 6F 6E 3A 20 31 2E : MIME-Version: 1. DateTime=2010-04-07T03:22:40.1067012Z System.Net.Sockets Verbose: 0 : [5900] 00000060 : 65 3A 20 37 20 41 70 72-20 32 30 31 30 20 31 35 : e: 7 Apr 2010 15 DateTime=2010-04-07T03:22:40.1067012Z System.Net.Sockets Verbose: 0 : [5900] 00000070 : 3A 32 32 3A 34 30 20 2B-31 32 30 30 0D 0A 53 75 : :22:40 +1200..Su DateTime=2010-04-07T03:22:40.1067012Z System.Net.Sockets Verbose: 0 : [5900] 00000080 : 62 6A 65 63 74 3A 20 5B-45 72 72 6F 72 5D 20 45 : bject: [Error] E DateTime=2010-04-07T03:22:40.1067012Z System.Net.Sockets Verbose: 0 : [5900] 00000090 : 78 63 65 70 74 69 6F 6E-20 69 6E 20 53 79 6E 63 : xception in Sync DateTime=2010-04-07T03:22:40.1067012Z System.Net.Sockets Verbose: 0 : [5900] 000000A0 : 53 65 72 76 69 63 65 20-28 32 30 30 38 2E 30 2E : Service (2008.0. DateTime=2010-04-07T03:22:40.1067012Z System.Net.Sockets Verbose: 0 : [5900] 000000B0 : 33 30 34 2E 31 32 33 34-32 29 0D 0A 43 6F 6E 74 : 304.12342)..Cont DateTime=2010-04-07T03:22:40.1067012Z Is there anything that can take the output shown above (my output is a text file 100mb in size), group together packets, and help out with finding particular issues I would like to hear about it. Thanks.

    Read the article

  • bug/error in basis set path algorithm i can't figure out

    - by Roy McAvoy
    The following looks through a 2d array to find basis set paths. It is supposed to print out the individual paths but not repeat any and end when all paths are found. It however doesn't stop at the last path and has a bug in it somewhere in which the following happens: It goes halfway through the path and then goes to zero and ends the path for some reason. For example the table is filled with the following: all 0s, except for [1][2], [1][3], [2][4], [2][5], [3][5], [4][6], [5][6], [6][0] which all have a 1 in them. The desired paths are P1: 1 2 4 6 0 P2: 1 3 5 6 0 P3: 1 2 5 6 0. The output I get when i run the program is 12460 13560 1250 124 Any and all help on this is much appreciated, this is just the function that scans through the array looking for paths, I can add the entire program if that would be helpful. Thanks.. void find_path(int map[][MAX], int x){ int path =0; int m=1; int blah=0; bool path_found = false; do { for(int n=0;n<(x+1);n++){ if(map[m][n]==-1){ blah=(n+1); if(blah<(x+1)){ for(blah;blah<(x+1);blah++){ if(map[m][blah]==1){ map[m][blah]=-1; path=m; path_found = true; cout<<path; m=blah; n=0; } } } else{ path=m; path_found=false; cout<<path; m=n; if(m==0){ path=0; cout<<path<<endl; m=1; path_found=false; } } } else if(map[m][n]==1){ map[m][n]=-1; path=m; path_found = true; cout<<path; m=n; if(m==0){ path=0; cout<<path<<endl; m=1; path_found=false; } } } } while(m<(x+1) && path_found); }

    Read the article

  • For loop from assembly to C

    - by FranXh
    I have a bomb project where I need to defuse certain phases by finding "pas phrases" that will defuse the bomb. Right now I have been working with phase_2, for which the assembly code is shown below. Phase_2 requires as an input 6 numbers, which I need to find in order to defuse this phase. I analyzed this assembly, and I came up with the C code below, that covers lines from 40101c to 401044. It is basically a for loop that makes sure that elements t[0]==t[3], t[1]==t[4] and t[2]==t[5] that the user inputs, are equal. According to my logic, the user can input any 6 numbers as long as the above condition is satisfied. Say 1, 2, 3, 1, 2, 3 would be a valid "pas phrase". However this solution does not convince me for some reason. Am I doing something wrong? 0000000000400ffc <phase_2>: 400ffc: 48 89 5c 24 e0 mov %rbx,-0x20(%rsp) 401001: 48 89 6c 24 e8 mov %rbp,-0x18(%rsp) 401006: 4c 89 64 24 f0 mov %r12,-0x10(%rsp) 40100b: 4c 89 6c 24 f8 mov %r13,-0x8(%rsp) 401010: 48 83 ec 48 sub $0x48,%rsp 401014: 48 89 e6 mov %rsp,%rsi 401017: e8 65 0a 00 00 callq 401a81 <read_six_numbers> 40101c: 48 89 e5 mov %rsp,%rbp 40101f: 4c 8d 6c 24 0c lea 0xc(%rsp),%r13 401024: 41 bc 00 00 00 00 mov $0x0,%r12d 40102a: 48 89 eb mov %rbp,%rbx 40102d: 8b 45 0c mov 0xc(%rbp),%eax 401030: 39 45 00 cmp %eax,0x0(%rbp) 401033: 74 05 je 40103a <phase_2+0x3e> 401035: e8 2d 09 00 00 callq 401967 <_GLOBAL_RESET_> 40103a: 44 03 23 add (%rbx),%r12d 40103d: 48 83 c5 04 add $0x4,%rbp 401041: 4c 39 ed cmp %r13,%rbp 401044: 75 e4 jne 40102a <phase_2+0x2e> 401046: 45 85 e4 test %r12d,%r12d 401049: 75 05 jne 401050 <phase_2+0x54> 40104b: e8 17 09 00 00 callq 401967 <_GLOBAL_RESET_> 401050: 48 8b 5c 24 28 mov 0x28(%rsp),%rbx 401055: 48 8b 6c 24 30 mov 0x30(%rsp),%rbp 40105a: 4c 8b 64 24 38 mov 0x38(%rsp),%r12 40105f: 4c 8b 6c 24 40 mov 0x40(%rsp),%r13 401064: 48 83 c4 48 add $0x48,%rsp 401068: c3 for (int i=0; i<3; i++){ if(t[i] != t[i+3]){ explode(); } }

    Read the article

  • What are the basics of dealing with user input events in Android?

    - by user279112
    Hello. I thought I had understood this question, but something is quite wrong here. When the user (me, so far) tries to press keys, nothing really happens, and I am having a lot of trouble understanding what it is that I've missed. Consider this before I present some code to help clarify my problem: I am using Android's Lunar Lander example to make my first "real" Android program. In that example, of course, there exist a class LunarView, and class nested therein LunarThread. In my code the equivalents of these classes are Graphics and GraphicsThread, respectively. Also I can make sprite animations in 2D just fine on Android. I have a Player class, and let's say GraphicsThread has a Player member referred to as "player". This class has four coordinates - x1, y1, x2, and y2 - and they define a rectangle in which the sprite is to be drawn. I've worked it out so that I can handle that perfectly. Whenever the doDraw(Canvas canvas) method is invoked, it'll just look at the values of those coordinates and draw the sprite accordingly. Now let's say - and this isn't really what I'm trying to do with the program - I'm trying to make the program where all it does is display the Player sprite at one location of the screen UNTIL the FIRST time the user presses the Dpad's left button. Then the location will be changed to another set position on the screen, and the sprite will be drawn at that position for the rest of the program invariably. Also note that the GraphicsThread member in Graphics is called "thread", and that the SurfaceHolder member in GraphicsThread is called "mSurfaceHolder". So consider this method in class Graphics: @Override public boolean onKeyDown(int keyCode, KeyEvent msg) { return thread.keyDownHandler(keyCode, msg); } Also please consider this method in class GraphicsThread: boolean keyDownHandler(int keyCode, KeyEvent msg) { synchronized (mSurfaceHolder) { if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) { player.x1 = 100; player.y1 = 100; player.x2 = 120; player.y2 = 150; } } return true; } Now then assuming that player's coordinates start off as (200, 200, 220, 250), why won't he do anything different when I press Dpad: Left? Thanks!

    Read the article

  • wrong operator() overload called

    - by user313202
    okay, I am writing a matrix class and have overloaded the function call operator twice. The core of the matrix is a 2D double array. I am using the MinGW GCC compiler called from a windows console. the first overload is meant to return a double from the array (for viewing an element). the second overload is meant to return a reference to a location in the array (for changing the data in that location. double operator()(int row, int col) const ; //allows view of element double &operator()(int row, int col); //allows assignment of element I am writing a testing routine and have discovered that the "viewing" overload never gets called. for some reason the compiler "defaults" to calling the overload that returns a reference when the following printf() statement is used. fprintf(outp, "%6.2f\t", testMatD(i,j)); I understand that I'm insulting the gods by writing my own matrix class without using vectors and testing with C I/O functions. I will be punished thoroughly in the afterlife, no need to do it here. Ultimately I'd like to know what is going on here and how to fix it. I'd prefer to use the cleaner looking operator overloads rather than member functions. Any ideas? -Cal the matrix class: irrelevant code omitted class Matrix { public: double getElement(int row, int col)const; //returns the element at row,col //operator overloads double operator()(int row, int col) const ; //allows view of element double &operator()(int row, int col); //allows assignment of element private: //data members double **array; //pointer to data array }; double Matrix::getElement(int row, int col)const{ //transform indices into true coordinates (from sorted coordinates //only row needs to be transformed (user can only sort by row) row = sortedArray[row]; result = array[usrZeroRow+row][usrZeroCol+col]; return result; } //operator overloads double Matrix::operator()(int row, int col) const { //this overload is used when viewing an element return getElement(row,col); } double &Matrix::operator()(int row, int col){ //this overload is used when placing an element return array[row+usrZeroRow][col+usrZeroCol]; } The testing program: irrelevant code omitted int main(void){ FILE *outp; outp = fopen("test_output.txt", "w+"); Matrix testMatD(5,7); //construct 5x7 matrix //some initializations omitted fprintf(outp, "%6.2f\t", testMatD(i,j)); //calls the wrong overload }

    Read the article

  • How to find relation between change in latitudes at centre of map and top/bottom

    - by Imran
    Hi, Im having little trouble finding a relation between the movement at centre and edge of a circle, Im doing for panning world map,my map extent is 180,89:-180,-89, my map pans by adding change(dx,dY) to its extents and not its centre. Now a situation has arrrised where I have to move the map to a specific centre, to calculate the change in longitudes is very easy and simple, but its the change in lattitudes that has caused problem. It seems the change in centreY of map is more than the change at edge of the mapY, or simply if I have to move the map centre from 0long,0lat to 73long,33lat, for dX I simply get 73, but for dY apparently it looks 33 but if i add 33 to top of map that is 89 , it will be 122 which is incorrect since Latitudes are between 90 and -90 . It seems a case a projection of a circle on 2D plane where the edge of circle since is moving backward due to angle expereinces less change and the centre expereinces more change, now is there a relation between these two factors? I tried converting the difference between OriginY and destinationY into radians and then add to Top and Bottom of Map, but it did'nt really work for me. Please note that the map is project on a virtual canvas whose width starts from 256 and increases by 256*2^z , z=0 is default and whole world is visible at that extent of canvas code: public void moveMapTo(double destinationLongitude,double destinationLattitude) // moves map to the new centre { double dXLong=destinationLongitude-centreLongitude; double atanhsinO = atanh(Math.sin(destinationLattitude * Math.PI / 180.00)); double atanhsinD = atanh(Math.sin(centreLatitude * Math.PI / 180.00)); double atanhCentre = (atanhsinD + atanhsinO) / 2; double latitudeSpan =destinationLattitude - centreLatitude; double radianOfCentreLatitude = Math.atan(Math.sinh(atanhCentre)); double dXLat=latitudeSpan / Math.cos(radianOfCentreLatitude); dXLat*=getLattitudeSpan()*(Math.PI/180); <--- HERE IS THE PORBLEM System.out.println("dxLong:"+dXLong+"_dxLat:"+dXLat); mapLeft+=dXLong; mapRight+=dXLong; mapTop+=dXLat; mapBottom+=dXLat; } ////latitude span function private double getLattitudeSpan() { double latitudeSpan = mapTop - mapBottom; latitudeSpan = latitudeSpan / Math.cos(radianOfCentreLatitude); return Math.abs(latitudeSpan); } //ht

    Read the article

  • GCC: Simple inheritance test fails

    - by knight666
    I'm building an open source 2D game engine called YoghurtGum. Right now I'm working on the Android port, using the NDK provided by Google. I was going mad because of the errors I was getting in my application, so I made a simple test program: class Base { public: Base() { } virtual ~Base() { } }; // class Base class Vehicle : virtual public Base { public: Vehicle() : Base() { } ~Vehicle() { } }; // class Vehicle class Car : public Vehicle { public: Car() : Base(), Vehicle() { } ~Car() { } }; // class Car int main(int a_Data, char** argv) { Car* stupid = new Car(); return 0; } Seems easy enough, right? Here's how I compile it, which is the same way I compile the rest of my code: /home/oem/android-ndk-r3/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin/arm-eabi-g++ -g -std=c99 -Wall -Werror -O2 -w -shared -fshort-enums -I ../../YoghurtGum/src/GLES -I ../../YoghurtGum/src -I /home/oem/android-ndk-r3/build/platforms/android-5/arch-arm/usr/include -c src/Inheritance.cpp -o intermediate/Inheritance.o (Line breaks are added for clarity). This compiles fine. But then we get to the linker: /home/oem/android-ndk-r3/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin/arm-eabi-gcc -lstdc++ -Wl, --entry=main, -rpath-link=/system/lib, -rpath-link=/home/oem/android-ndk-r3/build/platforms/android-5/arch-arm/usr/lib, -dynamic-linker=/system/bin/linker, -L/home/oem/android-ndk-r3/build/prebuilt/linux-x86/arm-eabi-4.4.0/lib/gcc/arm-eabi/4.4.0, -L/home/oem/android-ndk-r3/build/platforms/android-5/arch-arm/usr/lib, -rpath=../../YoghurtGum/lib/GLES -nostdlib -lm -lc -lGLESv1_CM -z /home/oem/android-ndk-r3/build/platforms/android-5/arch-arm/usr/lib/crtbegin_dynamic.o /home/oem/android-ndk-r3/build/platforms/android-5/arch-arm/usr/lib/crtend_android.o intermediate/Inheritance.o ../../YoghurtGum/bin/YoghurtGum.a -o bin/Galaxians.android As you can probably tell, there's a lot of cruft in there that isn't really needed. That's because it doesn't work. It fails with the following errors: intermediate/Inheritance.o:(.rodata._ZTI3Car[typeinfo for Car]+0x0): undefined reference to `vtable for __cxxabiv1::__si_class_type_info' intermediate/Inheritance.o:(.rodata._ZTI7Vehicle[typeinfo for Vehicle]+0x0): undefined reference to `vtable for __cxxabiv1::__vmi_class_type_info' intermediate/Inheritance.o:(.rodata._ZTI4Base[typeinfo for Base]+0x0): undefined reference to `vtable for __cxxabiv1::__class_type_info' collect2: ld returned 1 exit status make: *** [bin/Galaxians.android] Fout 1 These are the same errors I get from my actual application. If someone could explain to me where I went wrong in my test or what option or I forgot in my linker, I would be very, extremely grateful. Thanks in advance. UPDATE: When I make my destructors non-inlined, I get new and more exciting link errors: intermediate/Inheritance.o:(.rodata+0x78): undefined reference to `vtable for __cxxabiv1::__si_class_type_info' intermediate/Inheritance.o:(.rodata+0x90): undefined reference to `vtable for __cxxabiv1::__vmi_class_type_info' intermediate/Inheritance.o:(.rodata+0xb0): undefined reference to `vtable for __cxxabiv1::__class_type_info' collect2: ld returned 1 exit status make: *** [bin/Galaxians.android] Fout 1

    Read the article

  • Restoring multiple database backups in a transaction

    - by Raghu Dodda
    I wrote a stored procedure that restores as set of the database backups. It takes two parameters - a source directory and a restore directory. The procedure looks for all .bak files in the source directory (recursively) and restores all the databases. The stored procedure works as expected, but it has one issue - if I uncomment the try-catch statements, the procedure terminates with the following error: error_number = 3013 error_severity = 16 error_state = 1 error_message = DATABASE is terminating abnormally. The weird part is sometimes (it is not consistent) the restore is done even if the error occurs. The procedure: create proc usp_restore_databases ( @source_directory varchar(1000), @restore_directory varchar(1000) ) as begin declare @number_of_backup_files int -- begin transaction -- begin try -- step 0: Initial validation if(right(@source_directory, 1) <> '\') set @source_directory = @source_directory + '\' if(right(@restore_directory, 1) <> '\') set @restore_directory = @restore_directory + '\' -- step 1: Put all the backup files in the specified directory in a table -- declare @backup_files table ( file_path varchar(1000)) declare @dos_command varchar(1000) set @dos_command = 'dir ' + '"' + @source_directory + '*.bak" /s/b' /* DEBUG */ print @dos_command insert into @backup_files(file_path) exec xp_cmdshell @dos_command delete from @backup_files where file_path IS NULL select @number_of_backup_files = count(1) from @backup_files /* DEBUG */ select * from @backup_files /* DEBUG */ print @number_of_backup_files -- step 2: restore each backup file -- declare backup_file_cursor cursor for select file_path from @backup_files open backup_file_cursor declare @index int; set @index = 0 while(@index < @number_of_backup_files) begin declare @backup_file_path varchar(1000) fetch next from backup_file_cursor into @backup_file_path /* DEBUG */ print @backup_file_path -- step 2a: parse the full backup file name to get the DB file name. declare @db_name varchar(100) set @db_name = right(@backup_file_path, charindex('\', reverse(@backup_file_path)) -1) -- still has the .bak extension /* DEBUG */ print @db_name set @db_name = left(@db_name, charindex('.', @db_name) -1) /* DEBUG */ print @db_name set @db_name = lower(@db_name) /* DEBUG */ print @db_name -- step 2b: find out the logical names of the mdf and ldf files declare @mdf_logical_name varchar(100), @ldf_logical_name varchar(100) declare @backup_file_contents table ( LogicalName nvarchar(128), PhysicalName nvarchar(260), [Type] char(1), FileGroupName nvarchar(128), [Size] numeric(20,0), [MaxSize] numeric(20,0), FileID bigint, CreateLSN numeric(25,0), DropLSN numeric(25,0) NULL, UniqueID uniqueidentifier, ReadOnlyLSN numeric(25,0) NULL, ReadWriteLSN numeric(25,0) NULL, BackupSizeInBytes bigint, SourceBlockSize int, FileGroupID int, LogGroupGUID uniqueidentifier NULL, DifferentialBaseLSN numeric(25,0) NULL, DifferentialBaseGUID uniqueidentifier, IsReadOnly bit, IsPresent bit ) insert into @backup_file_contents exec ('restore filelistonly from disk=' + '''' + @backup_file_path + '''') select @mdf_logical_name = LogicalName from @backup_file_contents where [Type] = 'D' select @ldf_logical_name = LogicalName from @backup_file_contents where [Type] = 'L' /* DEBUG */ print @mdf_logical_name + ', ' + @ldf_logical_name -- step 2c: restore declare @mdf_file_name varchar(1000), @ldf_file_name varchar(1000) set @mdf_file_name = @restore_directory + @db_name + '.mdf' set @ldf_file_name = @restore_directory + @db_name + '.ldf' /* DEBUG */ print 'mdf_logical_name = ' + @mdf_logical_name + '|' + 'ldf_logical_name = ' + @ldf_logical_name + '|' + 'db_name = ' + @db_name + '|' + 'backup_file_path = ' + @backup_file_path + '|' + 'restore_directory = ' + @restore_directory + '|' + 'mdf_file_name = ' + @mdf_file_name + '|' + 'ldf_file_name = ' + @ldf_file_name restore database @db_name from disk = @backup_file_path with move @mdf_logical_name to @mdf_file_name, move @ldf_logical_name to @ldf_file_name -- step 2d: iterate set @index = @index + 1 end close backup_file_cursor deallocate backup_file_cursor -- end try -- begin catch -- print error_message() -- rollback transaction -- return -- end catch -- -- commit transaction end Does anybody have any ideas why this might be happening? Another question: is the transaction code useful ? i.e., if there are 2 databases to be restored, will SQL Server undo the restore of one database if the second restore fails?

    Read the article

  • Extracting Certain XML Elements with PHP SimpleXML

    - by Peter
    I am having some problems parsing this piece of XML using SimpleXML. There is always only one Series element, and a variable number of Episode elements beneath. I want to parse XML so I can store the Series data in one table, and all the Episode data in another table. XML: <Data> <Series> <id>80348</id> <Genre>|Action and Adventure|Comedy|Drama|</Genre> <IMDB_ID>tt0934814</IMDB_ID> <SeriesID>68724</SeriesID> <SeriesName>Chuck</SeriesName> <banner>graphical/80348-g.jpg</banner> </Series> <Episode> <id>935481</id> <Director>Robert Duncan McNeill</Director> <EpisodeName>Chuck Versus the Third Dimension 2D</EpisodeName> <EpisodeNumber>1</EpisodeNumber> <seasonid>27984</seasonid> <seriesid>80348</seriesid> </Episode> <Episode> <id>935483</id> <Director>Robert Duncan McNeill</Director> <EpisodeName>Buy More #15: Employee Health</EpisodeName> <EpisodeNumber>2</EpisodeNumber> <seasonid>27984</seasonid> <seriesid>80348</seriesid> </Episode> </Data> When I attempt to access just the first Series element and child nodes, or iterate through the Episode elements only it does not work. I have also tried to use DOMDocument with SimpleXML, but could not get that to work at all. PHP Code: <?php if(file_exists('en.xml')) { $data = simplexml_load_file('en.xml'); foreach($data as $series) { echo 'id: <br />' . $series->id; echo 'imdb: <br />' . $series->IMDB_ID; } } ?> Output: id:80348 imdb:tt0934814 id:935481 imdb: id:1534641 imdb: Any help would be greatly appreciated.

    Read the article

  • Drawing text to <canvas> with @font-face does not work at the first time

    - by lemonedo
    Hi all, First try the test case please: http://lemon-factory.net/test/font-face-and-canvas.html I'm not good at English, so I made the test case to be self-explanatory. On the first click to the DRAW button, it will not draw text, or will draw with an incorrect typeface instead of the specified "PressStart", according to your browser. After then it works as expected. At the first time the text does not appear correctly in all browsers I've tested (Firefox, Google Chrome, Safari, Opera). Is it the standard behavior or something? Thank you. PS: Following is the code of the test case <!DOCTYPE html> <html> <head> <meta http-equiv=Content-Type content="text/html;charset=utf-8"> <title>@font-face and canvas</title> <style> @font-face { font-family: 'PressStart'; src: url('http://lemon-factory.net/css/fonts/prstart.ttf'); } canvas, pre { border: 1px solid #666; } pre { float: left; margin: .5em; padding: .5em; } </style> </head> <body> <div> <canvas id=canvas width=250 height=250> Your browser does not support the CANVAS element. Try the latest Firefox, Google Chrome, Safari or Opera. </canvas> <button>DRAW</button> </div> <pre id=style></pre> <pre id=script></pre> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> <script> var canvas = document.getElementById('canvas') var ctx = canvas.getContext('2d') var x = 30 var y = 10 function draw() { ctx.font = '12px PressStart' ctx.fillStyle = '#000' ctx.fillText('Hello, world!', x, y += 20) ctx.fillRect(x - 20, y - 10, 10, 10) } $('button').click(draw) $('pre#style').text($('style').text()) $('pre#script').text($('script').text()) </script> </body> </html>

    Read the article

< Previous Page | 185 186 187 188 189 190 191 192 193 194 195 196  | Next Page >