mvc open pdf in browser : Convert pdf file to jpg file application Library utility html asp.net windows visual studio Expert_.NET_Delivery_Using_NAnt_and_CruiseControl_.NET_200533-part1082

All that is missing is the batch file to start up the CCNet server. Once the server is started,
the CCNet dashboard will include the project, as shown in Figure 9-6. This of course means we
can perform builds and deployments with the generated files.
Figure 9-6.The CCNet dashboard now includes our project.
Setting up the templates required some time to put the initial constructs in place, but
making changes from this point on is easy. Subsequent regeneration is not so time consum-
ing—it takes about one second.
We have one final trick to consider.
Managing Generation Automatically
CodeSmith can be executed from the command line. As it happens, this means we can auto-
mate CodeSmith through NAnt or CCNet, or even both. Running CodeSmith from the
command line requires the following call:
"D:\Program Files\CodeSmith\v2.6\CodeSmithConsole" ➥
/template:"D:\dotNetDelivery\Chapter9\CodeGen\CI2\master.cst" ➥
/properties:"D:\dotNetDelivery\Chapter9\ProjectSet.xml"
CHAPTER 9 ■ CODE GENERATION
313
Convert pdf file to jpg file - Convert PDF to JPEG images in C#.net, ASP.NET MVC, WinForms, WPF project
How to convert PDF to JPEG using C#.NET PDF to JPEG conversion / converter library control SDK
convert multiple pdf to jpg; change from pdf to jpg
Convert pdf file to jpg file - VB.NET PDF Convert to Jpeg SDK: Convert PDF to JPEG images in vb.net, ASP.NET MVC, WinForms, WPF project
Online Tutorial for PDF to JPEG (JPG) Conversion in VB.NET Image Application
convert pdf image to jpg online; convert pdf to jpg batch
The CodeSmith console utility applies the specified properties file against the specified
template file, which seems like an obvious action. The properties file differs from the test data
we were using in that we need to embed the serializable ProjectSettype inside the regular
XML definition for a collection of properties for CodeSmith. You can see that in the following
code, where I have highlighted in bold the additional OutputDirectoryproperty and the other
wrapping elements:
<?xml version="1.0" encoding="utf-8"?>
<codeSmith>
<propertySet>
<property name="OutputDirectory">D:\dotNetDelivery\Chapter9</property>
<property name="ProjectSet">
<ProjectSet xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://www.etomic.co.uk">
<Settings 
CompanyName="Etomic"
CcnetUrl="http://localhost/ccnet"
VssFolder="D:\dotNetDelivery\VSS"
VssUsername="builder"
VssPassword="builder"
EnvironmentMain="D:\dotNetDelivery\BuildAreaCI"
EnvironmentTempDeploy="D:\dotNetDelivery\TempDeploy"
/>
<Projects>
<Project Name="Library.Transformer" HasDatabase="false" ➥
ProjectType="Library">
<OutputAssemblies>
<OutputAssembly AssemblyType="dll" Name="Engine" ➥
ShouldDocument="true" ShouldTest="false" />
<OutputAssembly AssemblyType="dll" Name="Tests" ➥
ShouldDocument="false" ShouldTest="true" />
</OutputAssemblies>
</Project>
</Projects>
</ProjectSet>
</property>
</propertySet>
</codeSmith>
Running the command with this input file produces the output shown in Figure 9-7.
CHAPTER 9 ■ CODE GENERATION
314
Online Convert Jpeg to PDF file. Best free online export Jpg image
Convert a JPG to PDF. You can drag and drop your JPG file in the box, and then start immediately to sort the files, try out some settings and then create the
convert pdf to jpg for online; convert pdf to jpg for
Online Convert PDF to Jpeg images. Best free online PDF JPEG
Online PDF to JPEG Converter. Download Free Trial. Convert a PDF File to JPG. Drag and drop your PDF in the box above and we'll convert the files for you.
change file from pdf to jpg; convert pdf into jpg online
Figure 9-7.Running CodeSmith at the command line
This now opens the door to using CCNet to provide the generation on demand.
A New CruiseControl Instance
We can set up a new CCNet instance by passing through a different set of parameters on start-
up. We will call this the CodeSmithinstance:
"D:/dotNetDelivery/Tools/CCNet/0.8/Server/CCnet.exe" -remoting:off ➥
-config:ccnet.codesmith.config
As the command suggests, we will not implement remoting on this instance—it is not
needed. We will point the instance to a separate configuration file called ccnetadmin.config,
which looks like this:
<?xml version="1.0" encoding="utf-8" ?>
<cruisecontrol>
<project name="CodeGeneration">
<modificationDelaySeconds>10</modificationDelaySeconds>
<triggers>
<intervalTrigger />
</triggers>
<sourcecontrol type="filesystem">
<repositoryRoot>D:\dotNetDelivery\Chapter9\Data</repositoryRoot>
</sourcecontrol>
<build type="nant">
<baseDirectory>D:\dotNetDelivery\Chapter9\</baseDirectory>
<buildFile>Builder.CodeSmith.xml</buildFile>
<buildTimeoutSeconds>300</buildTimeoutSeconds>
</build>
CHAPTER 9 ■ CODE GENERATION
315
VB.NET PDF File Merge Library: Merge, append PDF files in vb.net
VB.NET Components to combine various scanned images to PDF, such as tiff, jpg, png, gif, bmp, etc. Append one PDF file to the end of another one in VB.NET.
best way to convert pdf to jpg; convert pdf file into jpg
C# PDF File Merge Library: Merge, append PDF files in C#.net, ASP.
scanned images to PDF, such as tiff, jpg, png, gif, bmp, etc. Merge Microsoft Office Word, Excel and PowerPoint data to PDF form. Append one PDF file to the end
bulk pdf to jpg converter; changing pdf to jpg on
<publishers>
<xmllogger />
</publishers>
</project>
</cruisecontrol>
This is a very minimalist implementation for CCNet, but that is all we need to ensure that
the delivery scripts are generated whenever a change is made to the ProjectSets.xmldata file.
The main change here is that we drop the ProjectSet.xmlfile into its own folder so that it can
be monitored by CCNet’s filesystem source control provider in isolation.
Builder.CodeSmith.xmlis a simple NAnt script that runs the command-line version of
CodeSmith:
<?xml version="1.0"?>
<project>
<exec program="D:\Program Files\CodeSmith\v2.6\CodeSmithConsole">
<arg 
</exec>
</project>
When the CCNetServer-CodeSmith.batfile is run, the output shown in Figure 9-8 is gener-
ated as this new CCNet instance begins monitoring and generating the files for the regular
instance of CCNet. 
Figure 9-8.The CCNet admin instance
Now the CCNet server is responsive almost immediately to any changes to the ProjectSet
file—changes such as environment settings, or the addition of new projects. 
CHAPTER 9 ■ CODE GENERATION
316
C# Create PDF from images Library to convert Jpeg, png images to
C# Create PDF from Raster Images, .NET Graphics and REImage File with XDoc Batch convert PDF documents from multiple image formats, including Jpg, Png, Bmp
batch pdf to jpg converter; change pdf to jpg format
C# Image Convert: How to Convert Adobe PDF to Jpeg, Png, Bmp, &
C# sample code for PDF to jpg image conversion. This demo code convert PDF file all pages to jpg images. // Define input and output files path.
conversion of pdf to jpg; convert pdf into jpg format
We can do the same thing with the XSLT framework we created earlier. Because we already
have the XSLT-based transformation framework running under NAnt, we can reuse that code
to form Builder.XSLT.xml, the equivalent of Builder.CodeSmith.xml.
We can create a batch file specifically to create a different CCNet server instance (though
this will actually perform the same job as the CodeSmith version). We have to make only one
change to the ccnet.CodeSmith.configfile (which is now called ccnet.xslt.config) to make
itwork with the XSLT framework:
<build type="nant">
<baseDirectory>D:\dotNetDelivery\Chapter9\</baseDirectory>
<buildFile>Builder.XSLT.xml</buildFile>
<buildTimeoutSeconds>300</buildTimeoutSeconds>
</build>
The result of either version is the same. The advantage of the XSLT version is that only
.NET, NAnt, and CCNet are involved, whereas the CodeSmith harness is required otherwise.
On the other hand, the XSLT version is a custom piece of work without any control to the
harness.
With our efforts successful at this point, we can add a new project (such as NAntExtensions)
to the project set so that it too is included in the code-generation process:
<?xml version="1.0" encoding="utf-8"?>
<codeSmith>
<propertySet>
<property name="OutputDirectory">D:\dotNetDelivery\Chapter9</property>
<property name="ProjectSet">
<ProjectSet xmlns:xsd="http://www.w3.org/2001/XMLSchema" ➥
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ➥
xmlns="http://www.etomic.co.uk">
<Settings 
CompanyName="Etomic"
CcnetUrl="http://localhost/ccnet"
VssFolder="D:\dotNetDelivery\VSS"
VssUsername="builder"
VssPassword="builder"
EnvironmentMain="D:\dotNetDelivery\BuildAreaCI"
EnvironmentTempDeploy="D:\dotNetDelivery\TempDeploy"
/>
<Projects>
<Project Name="Library.Transformer" HasDatabase="false" ➥
ProjectType="Library">
<OutputAssemblies>
<OutputAssembly AssemblyType="dll" Name="Engine" ➥
ShouldDocument="true" ShouldTest="false" />
<OutputAssembly AssemblyType="dll" Name="Tests" ➥
ShouldDocument="false" ShouldTest="true" />
</OutputAssemblies>
</Project>
CHAPTER 9 ■ CODE GENERATION
317
C# Image Convert: How to Convert Dicom Image File to Raster Images
RasterEdge.XDoc.Office.Inner.Office03.dll. RasterEdge.XDoc.PDF.dll. This demo code convert dicom file all pages to jpg images.
bulk pdf to jpg converter online; change pdf file to jpg online
VB.NET PDF Convert to Images SDK: Convert PDF to png, gif images
Convert PDF documents to multiple image formats, including Jpg, Png, Bmp, Gif, Tiff, Bitmap, .NET Graphics, and REImage. Turn multipage PDF file into image
convert pdf to jpg c#; convert pdf to jpg 100 dpi
<Project Name="NAntExtensions" HasDatabase="false" 
ProjectType="Library">
<OutputAssemblies>
<OutputAssembly AssemblyType="dll" Name="GeneralTasks" 
ShouldDocument="false" ShouldTest="false" />
</OutputAssemblies>
</Project>
</Projects>
</ProjectSet>
</property>
</propertySet>
</codeSmith>
As soon as the admin instance of CCNet detects these changes, it performs the code gen-
eration. As we saw in Figure 9-8, the files for the new project are duly generated and utilized
by the regular CCNet server, which loads the new ccnet.configfile.
Summary
We have investigated what code generation or transformation can offer to the overall process.
We have seen that there are a couple of possibilities for generation, and we have implemented
a solution using CodeSmith and XSLT as the code-generation tools. We followed the same little-
by-little process to complete a simple scenario to provide a basis for more extensive and
involved work. Finally, we automated the code generation itself using a new instance of
CruiseControl.NET.
I hope you agree that code generation is a technique that offers several benefits to the
standardization and operational processes of delivery. We have only started to scratch the sur-
face of the flexibility of a tool like CodeSmith and a framework like XSLT, and once again we
have come close to an overwhelming set of options for decision making and script prepara-
tion and execution.
In the final chapter, we recap the efforts made throughout this book, and I offer a few
final thoughts on the delivery processes that we have defined.
Further Reading
More and more resources on code generation are appearing these days. For a holistic view of
the topic, see Code Generation in Microsoft .NET by Kathleen Dollard (Apress, 2004).
Kathleen’s book contains a fantastic, concise tutorial on XML, XPath, XSLT, and similar
topics, but if you need further information, a good book is XSLT by Doug Tidwell (O’Reilly,
2001).
CHAPTER 9 ■ CODE GENERATION
318
Closing Thoughts
W
e have now covered a significant amount of material and seen how solid delivery
processes can be introduced across multiple systems in .NET. When situations become more
complex, or more open to interpretation and specific circumstances, our ability to provide
efficient processes diminishes.
In this final chapter, I would like to summarize the content thus far, considering the ques-
tions we raised once again. In addition to identifying our original goals and thinking about the
future of delivery processes, I will examine some new issues as well. 
What Have We Done?
First, let us look at what we have accomplished. We will begin with the problem that we
defined as the reason for the introduction of delivery processes.
The Problem
Way back in Chapter 1 we spent a considerable amount of time thinking about why we need
sound delivery processes.
In a nutshell, we must provide consistent, measurable delivery processes across dozens of
systems to accomplish these goals:
• To reduce the number of routine tasks for the development team
• To assign responsibility for specific processes to members of the development team
• To remove the reliance on individuals so there are no single points of failure in the
delivery processes
We need to do this to improve our service to customers at a time when the software devel-
opment life cycle is most obvious to them (and therefore failure is more obvious) and to reduce
cost, risk, and effort in providing this service.
We discussed these issues in depth, and it is worth reviewing the objectives with your
development team from time to time.
319
CHAPTER 10
■ ■ ■
CHAPTER 10 ■ CLOSING THOUGHTS
320
The Solution Proposal:Design to Deliver
To tackle the problem, we defined a pattern-based solution we dubbed Design to Deliver.
Thisproposal describes an approach to solving the problem and explains the significance of
success to the various stakeholders: the developers, customers, and management. Let us take
another look at Design to Deliver.
Context 
Improving the delivery of a software system by ensuring successful build and deployment
features is a focus from the beginning of the coding phase, as is automating these features
throughout the system life cycle.
Motivation
For any successful development team involved in medium-sized projects of several months’
development, the number of systems to manage will eventually become cumbersome.
Failing to address delivery as a specific, controlled activity leads to a degradation in the
delivery processes (whatever form they take) and also increases the risk of failure for a system
at a crucial point in its implementation. 
Through the implementation of a framework for delivery and the automation of that
framework, enabling an efficient, consistent delivery process has the potential to 
• Improve software quality through increased value to supporting activities such as unit
testing
• Improve customer satisfaction through increased levels of delivery success
• Reduce overhead in administration of delivery
Mechanics
The steps involved in implementing Design to Deliver include the following:
Decide on the desired delivery process for build and deployment.Many things can be
included as part of an automated delivery solution. Listing the initial priorities provides a
focus for the first attempt. At this point, the automation does not necessarily have to pro-
duce a richly developed process. Aiming too high initially does not aid the exploration
activities.
Identify the tools to achieve the processes.Providing a list of initial tools ensures that,
ina world of limitless possibilities, a constrained approach is followed to ensure the con-
tinued focus and simplicity of the delivery process.
Identify an initial candidate for automation.An ideal candidate is a system that is stand-
alone and that does not have too many areas of complexity, such as a database. A good
candidate is a console utility or a shared assembly.
Prototype the process with the candidate.The candidate system should then be auto-
mated following the steps defined in the initial process. At this point, as more steps are
identified, they can be added to the overall process or held over for verification.
Identify more candidates for automation.Following a successful implementation, more
candidates can be included in the process. Once more, it is useful to group similar sys-
tems to better achieve automation.
Utilize and refactor the initial automation to provide standard scripts.The new candi-
dates should reuse the scripts from the first prototype, but the emphasis should be on
refactoring, the reduction of duplicated effort, and the identification of complexity where
each project has specific needs not present in the others. Refactoring should also occur in
the systems themselves to provide a standard environment and system structure to facili-
tate the automation; that is, not only should the scripts adapt to the system, but also the
system should fall into line with the stated requirements.
Publish standards for the up-front implementation of automation.Scripted solutions
for problems should be maintained in a library of solutions. Where systems have been
amended to facilitate the automation, these amendments and standard requirements
should be published and enforced by the development team at large.
All systems need to be brought into line with delivery standards.Now outside the realm
of research and development, the published standards should be introduced as a require-
ment of all new systems, and incorporated into existing systems when maintenance
cycles allow. It is critical to assign responsibility for implementation of standards to the
development team at a finely balanced point in time, since implementing any new refactor-
ings and standards across multiple systems will slow progress. At this point, an assessment
is needed to determine whether a full-time role is called for to handle the ongoing mainte-
nance of this and other configuration management (CM) activities. In my opinion, this role
will be necessary.
New systems should adhere to delivery standards.All new developments must adhere
toset delivery processes. Development teams should begin viewing the constructs for
delivery as something that must be treated as a project in itself, to be maintained and
developed accordingly.
Consequences
Design to Deliver has several consequences:
(+) Speed of delivery is improved.Naturally, if the task is automated it will undoubtedly
be a lot faster. Significantly, the measurement of time taken could represent a useful
metric for success of the initiative: delivery measured in terms of seconds and minutes
rather than hours.
(+) Confidence in delivery is improved.The ability to repeat efficient delivery constantly
and on demand is a significant boon to the development and operations teams. New
doors are opened in terms of team capability, such as daily system releases to customers
or project teams.
(+) Scope of manual delivery activities is reduced.This is another obvious consequence
of automating the process. It becomes more likely that some of the supporting processes
that do not form a critical path but that are still important—such as the distribution of
documentation or the notification of support teams—are guaranteed to occur. The
process cannot degrade, and must occur in the same way every time.
CHAPTER 10 CLOSING THOUGHTS
321
(+) Mundane tasks are automated.Similarly, these kinds of tasks may be considered
mundane in the first place, and thus the effort required in this area is not valued. Here it
isremoved.
(+) Quality of the software improves.A system must conform to the process, forcing the
developer to consider and implement delivery features up front, forcing delivery higher
up the quality agenda.
(+) Understanding of delivery improves.Because there is a framework and stated bene-
fits to the automation of delivery, the reasons for implementing successful delivery on a
conceptual basis become clear to the development team. On a practical basis, the actual
implementation requirements for a system are detailed.
(+/–) Options are limited.It may not be appropriate to use a solution that would ordi-
narily be appropriate because of difficulty in implementing the standard process. For
example, a useful third-party component may not be easy to deploy and thus hampers
automation efforts. We need to decide what is a more critical system feature: a useful user
interface (UI) widget or successful delivery. On the other hand, limiting these options
may be a good idea with more “innovative” developers.
(–) 100% success is not guaranteed.Despite every effort, it is doubtful that all systems
and system features can be fully automated for delivery. Therefore, Design to Deliver does
not represent a panacea for delivery, but a road map for improvements to the delivery
process with some significant successes expected along the way.
Resulting Context
We are able to confidently deliver software using a standard process. The length of time and
the planning required for delivery are known and can be predicted. There is no need for rigid
development environments to host our software because we are able to quickly build and
deploy a required solution. The complexity and risk of delivery is reduced.
The advantages to the implementation of Design to Deliver are as follows:
Developers.The developers have a clear strategy for the delivery of products and a set of
defined standards to work within. They understand what is expected of them and how the
process operates. They can consider the delivery of a product—how and when it will be
done—at the outset of the project rather than toward the point of delivery. Product deliv-
ery can, and does, occur at any point in the project, which is a boon to project managers
as well. They are freed up to handle true development, which is what they want to do
rather than handle mundane tasks. Removing responsibility for routine tasks from reluc-
tant developers improves morale.
Management.To management, the delivery processes are transparent. Risk is reduced
since all systems follow the same overall processes. Standards, and therefore monitoring,
are available for the management team. The delivery process encompasses part of an
overall configuration management strategy for information technology (IT) and can work
within the confines of an existing process quite easily; it is a practical solution without its
CHAPTER 10 ■ CLOSING THOUGHTS
322
Documents you may be interested
Documents you may be interested