当前位置:文档之家› ZLIB示例教程

ZLIB示例教程

ZLIB示例教程
ZLIB示例教程

Usage Example

We often get questions about how the deflate() and inflate() functions should be used. Users wonder when they should provide more input, when they should use more output, what to do with a Z_BUF_ERROR, how to make sure the process terminates properly, and so on. So for those who have read zlib.h (a few times), and would like further edification, below is an annotated example in C of simple routines to compress and decompress from an input file to an output file using deflate() and inflate() respectively. The annotations are interspersed between lines of the code. So please read between the lines. We hope this helps explain some of the intricacies of zlib.

人们经常疑惑如何使用 deflate 函数和 inflate 函数,用户们不知道什么时候应该提供更大的输入缓存,或者什么时候提供更大的输出缓存,以及如何处理

Z_BUF_ERROR 错误,如何确保处理进程被正确终结掉,等等。

Without further adieu, here is the program zpipe.c:

/* zpipe.c: example of proper use of zlib's inflate() and deflate() Not copyrighted -- provided to the public domain

Version 1.4 11 December 2005 Mark Adler */

/* Version history:

1.0 30 Oct 2004 First version

1.1 8 Nov 2004 Add void casting for unused return values

Use switch statement for inflate() return values 1.2 9 Nov 2004 Add assertions to document zlib guarantees

1.3 6 Apr 2005 Remove incorrect assertion in inf()

1.4 11 Dec 2005 Add hack to avoid MSDOS end-of-line conversions Avoid some compiler warnings for input and output buffers

*/

We now include the header files for the required definitions. From stdio.h we use fopen(), fread(), fwrite(), feof(), ferror(), and fclose() for file i/o, and fputs() for error messages. From string.h we use strcmp() for command line argument processing. From assert.h we use the assert() macro. From zlib.h we use the basic compression functions deflateInit(), deflate(), and deflateEnd(), and the basic decompression functions inflateInit(), inflate(), and inflateEnd().

#include

#include

#include

#include "zlib.h"

This is an ugly hack required to avoid corruption of the input and output data on Windows/MS-DOS systems. Without this, those systems would assume that the input and output files are text, and try to convert the

end-of-line characters from one standard to another. That would corrupt binary data, and in particular would render the compressed data unusable. This sets the input and output to binary which suppresses the end-of-line conversions. SET_BINARY_MODE() will be used later on stdin and stdout, at the beginning of main().

这段代码是为了防止在WIN/MS-DOS系统上出现输入输出的问题。如果没有这段代码,上述操作系统会将输入、输出文件视为文本,将zlib文件中可能存在的EOF字符转换为它们自己的标准。这会破坏二进制数据,尤其会使压缩数据不可用。这段代码将输入输出均设置为二进制模式,消除了EOF转换的问题,将会在main函数里用到。

#if defined(MSDOS) || defined(OS2) || defined(WIN32) ||

defined(__CYGWIN__)

# include

# include

# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY)

#else

# define SET_BINARY_MODE(file)

#endif

CHUNK is simply the buffer size for feeding data to and pulling data from the zlib routines. Larger buffer sizes would be more efficient, especially for inflate(). If the memory is available, buffers sizes on the order of 128K or 256K bytes should be used.

CHUNK是向zlib流程输入数据及提取数据的缓冲区大小。缓冲区越大,压缩、解压效率越高,尤其是解压。如果内存足够,尽量使用128K、256K之类的大小。#define CHUNK 16384

The def() routine compresses data from an input file to an output file. The output data will be in the zlib format, which is different from the gzip or zip formats. The zlib format has a very small header of only two bytes to identify it as a zlib stream and to provide decoding information, and a four-byte trailer with a fast check value to verify the integrity of the uncompressed data after decoding.

def()函数从输入文件压缩数据,写入输出文件。输出文件是zlib格式(与gzip 和zip不同)的。Zlib格式有一个2字节的头部,标识这是一个zlib流,并提供解压信息;还有一个4字节的尾部,是用来在解压后校验数据完整性的。

/* Compress from file source to file dest until EOF on source.

def() returns Z_OK on success, Z_MEM_ERROR if memory could not be allocated for processing, Z_STREAM_ERROR if an invalid compression level is supplied, Z_VERSION_ERROR if the version of zlib.h and the version of the library linked do not match, or Z_ERRNO if there is

an error reading or writing the files. */

int def(FILE *source, FILE *dest, int level)

{

Here are the local variables for def(). ret will be used for zlib return codes. flush will keep track of the current flushing state for deflate(), which is either no flushing, or flush to completion after the end of the input file is reached. have is the amount of data returned from deflate(). The strm structure is used to pass information to and from the zlib routines, and to maintain the deflate() state. in and out are the input and output buffers for deflate().

ret保存zlib函数的返回值

flush跟踪deflate()的flushing状态,要么是无flushing,要么在读到输入

文件底后全部flush

have是deflate()返回的数据数量

strm是核心结构

in和out是deflate()的输入输出缓冲区

int ret, flush;

unsigned have;

z_stream strm;

unsigned char in[CHUNK];

unsigned char out[CHUNK];

The first thing we do is to initialize the zlib state for compression using deflateInit(). This must be done before the first use of deflate(). The zalloc, zfree, and opaque fields in the strm structure must be initialized before calling deflateInit(). Here they are set to the zlib constant

Z_NULL to request that zlib use the default memory allocation routines. An application may also choose to provide custom memory allocation routines here. deflateInit() will allocate on the order of 256K bytes for the internal state. (See zlib Technical Details.)

首先我们要用deflateInit()初始化zlib状态。Strm结构中的zalloc, zfree, opaque必须在调用deflateInit()之前初始化。本例中都设为了Z_NULL,要求zlib使用默认的内存分配策略。应用程序也可以在这里使用定制的内存分配策略。deflateInit()会为内部状态分配256K字节之类大小的内存。

deflateInit() is called with a pointer to the structure to be initialized and the compression level, which is an integer in the range of -1 to 9. Lower compression levels result in faster execution, but less compression. Higher levels result in greater compression, but slower execution. The zlib constant Z_DEFAULT_COMPRESSION, equal to -1, provides a good compromise between compression and speed and is equivalent to level 6. Level 0 actually does no compression at all, and in fact expands the data slightly to produce the zlib format (it is not a byte-for-byte copy of the input). More advanced applications of zlib may use deflateInit2() here instead. Such an application may want to reduce how much memory will be

used, at some price in compression. Or it may need to request a gzip header and trailer instead of a zlib header and trailer, or raw encoding with no header or trailer at all.

deflateInit()有两个参数,一个是要初始化的结构的指针(strm),一个是压缩的等级(level)。level的值在-1~9之间。压缩等级越低,执行速度越快,压缩率越低。常量Z_DEFAULT_COMPRESSION(等于-1)表示在压缩率和速度方面寻求平衡,实际上和等级6一样。等级0实际上不做任何压缩,只对输入数据做略微改变以形成zlib格式(并不是简单的一字节一字节的拷贝)。高级程序可以在这里使用deflateInit2()以:降低内存消耗,但是同时要付出压缩率的代价;或者使用gzip头部和尾部来代替zlib;或者不要头尾部的原始编码。

We must check the return value of deflateInit() against the zlib constant Z_OK to make sure that it was able to allocate memory for the internal state, and that the provided arguments were valid. deflateInit() will also check that the version of zlib that the zlib.h file came from matches the version of zlib actually linked with the program. This is especially important for environments in which zlib is a shared library.

我们必须检查deflateInit()的返回值,如果为Z_OK,则说明内存分配成功,参数合法。deflateInit()还会检查zlib.h头文件所使用的zlib库版本和链接器使用的zlib库版本是否一致,这对于共享zlib库的环境尤为重要。

Note that an application can initialize multiple, independent zlib streams, which can operate in parallel. The state information maintained in the structure allows the zlib routines to be reentrant.

注意,应用程序可以初始化多个相互独立的zlib流,它们可以并行执行。

z_stream结构中保存的状态信息可以让zlib方法可重入。

/* allocate deflate state */

strm.zalloc = Z_NULL;

strm.zfree = Z_NULL;

strm.opaque = Z_NULL;

ret = deflateInit(&strm, level);

if (ret != Z_OK)

return ret;

With the pleasantries out of the way, now we can get down to business. The outer do-loop reads all of the input file and exits at the bottom of the loop once end-of-file is reached. This loop contains the only call of deflate(). So we must make sure that all of the input data has been processed and that all of the output data has been generated and consumed before we fall out of the loop at the bottom.

外层的do-while循环读入所有的输入数据,如果读到了文件结尾则结束循环。这个循环里面只调用了函数deflate()。我们必须确保所有的输入数据都被处理而且所有的输出数据都被输出了(此例中是写入输出文件),然后才可以退出循环。

/* compress until end of file */

do {

We start off by reading data from the input file. The number of bytes read is put directly into avail_in, and a pointer to those bytes is put into next_in. We also check to see if end-of-file on the input has been reached using feof(). If we are at the end of file, then flush is set to the zlib constant Z_FINISH, which is later passed to deflate() to indicate that this is the last chunk of input data to compress. If we are not yet at the end of the input, then the zlib constant Z_NO_FLUSH will be passed to deflate to indicate that we are still in the middle of the uncompressed data.

从输入文件读入数据,读取的字节数被赋给avail_in,指向这些数据的指针被

赋给next_in。用feof检查是否读到了输入文件的文件尾,如果读到了文件尾,那么flush被置为Z_FINISH,flush变量稍后会传递给deflate(),表明这是最后一段要被压缩的输入数据了。如果还没到文件尾,flush被置为Z_NO_FLUSH,表明我们还有未压缩的数据。

If there is an error in reading from the input file, the process is aborted with deflateEnd() being called to free the allocated zlib state before returning the error. We wouldn't want a memory leak, now would we? deflateEnd() can be called at any time after the state has been initialized. Once that's done, deflateInit() (or deflateInit2()) would have to be called to start a new compression process. There is no point here in checking the deflateEnd() return code. The deallocation can't fail.

如果在读输入文件中遇到错误,结束进程。在结束之前,要调用deflateEnd()

释放zlib的状态。deflateEnd()不会出错,不必检查返回值。

strm.avail_in = fread(in, 1, CHUNK, source);

if (ferror(source)) {

(void)deflateEnd(&strm);

return Z_ERRNO;

}

flush = feof(source) ? Z_FINISH : Z_NO_FLUSH;

strm.next_in = in;

The inner do-loop passes our chunk of input data to deflate(), and then keeps calling deflate() until it is done producing output. Once there is no more new output, deflate() is guaranteed to have consumed all of the input, i.e., avail_in will be zero.

内层do-while循环将我们读到的一段输入数据传递给deflate(),然后不停调

用deflate()直到输出产生完毕。一旦没有新的输出,也就意味着deflate()已经处理掉了所有的输入,avail_in的值已经变为0

/* run deflate() on input until output buffer not full, finish

compression if all of source has been read in */

do {

Output space is provided to deflate() by setting avail_out to the number of available output bytes and next_out to a pointer to that space.

输出缓冲区的设置:设置avail_out为可用输出缓冲字节数,next_out为指向

缓冲区的指针。

strm.avail_out = CHUNK;

strm.next_out = out;

Now we call the compression engine itself, deflate(). It takes as many of the avail_in bytes at next_in as it can process, and writes as many as avail_out bytes to next_out. Those counters and pointers are then updated past the input data consumed and the output data written. It is the amount of output space available that may limit how much input is consumed. Hence the inner loop to make sure that all of the input is consumed by providing more output space each time. Since avail_in and next_in are updated by deflate(), we don't have to mess with those between deflate() calls until it's all used up.

现在调用压缩引擎deflate()。它尽可能多地使用next_in指向的长度为

avail_in的输入缓冲区中的数据,向next_out指向的输出缓冲区中写入长度为next_out的数据。上述计数器和指针随之更新,跳过已经消耗掉的输入数据和

已经写出的输出数据。输出缓冲区的大小可能会限制能消耗多少输入数据。因

此内层循环通过每次增加输出缓冲区来确保所有的输入数据都被处理了。因为avail_in和next_in都是由deflate()更新的,在输入缓冲区内的数据被消耗

完之前我们不必管它们。(但是因为每次deflate()都输出avail_out的数据,将输出缓冲区填满,所以next_out和avail_outout必须由应用程序自己更新)

The parameters to deflate() are a pointer to the strm structure containing the input and output information and the internal compression engine state, and a parameter indicating whether and how to flush data to the output. Normally deflate will consume several K bytes of input data before producing any output (except for the header), in order to accumulate statistics on the data for optimum compression. It will then put out a burst of compressed data, and proceed to consume more input before the next burst. Eventually, deflate() must be told to terminate the stream, complete the compression with provided input data, and write out the trailer check value. deflate() will continue to compress normally as long as the flush parameter is Z_NO_FLUSH. Once the Z_FINISH parameter is provided, deflate() will begin to complete the compressed output stream. However depending on how much output space is provided, deflate() may have to be called several times until it has provided the complete compressed stream, even after it has consumed all of the input. The flush parameter must continue to be Z_FINISH for those subsequent calls.

deflate()有两个参数:z_stream结构的参数保存了输入输出信息和内部压缩引擎的状态;int类型的flush参数指明了是否以及如何将数据flush到输出缓冲区。通常,为了加速压缩,deflate会处理K字节的输入数据,然后才产生输出(头部除外)。Deflate会突然输出一段压缩后的数据,然后再获取更多输入,然后再突然输出。最后,必须告知deflate()停止读取新的数据,将已读取的输入数据进行压缩,输出,并加上最后的尾部的校验。只要flush参数是

Z_NO_FLUSH ,deflate()会一直进行压缩。一旦flush参数变为Z_FINISH,deflate()会开始结束压缩过程。但是,取决于输出缓冲区的大小,即使已经读取完所有输入,仍可能要多次调用deflate()才能使其完成全部压缩输出。在这些连续调用过程中,flush参数必须保持为Z_FINISH。

There are other values of the flush parameter that are used in more advanced applications. You can force deflate() to produce a burst of output that encodes all of the input data provided so far, even if it wouldn't have otherwise, for example to control data latency on a link with compressed data. You can also ask that deflate() do that as well as erase any history up to that point so that what follows can be decompressed independently, for example for random access applications. Both requests will degrade compression by an amount depending on how often such requests are made.

在高级程序中,flush参数还可以有其他值。

deflate() has a return value that can indicate errors, yet we do not check it here. Why not? Well, it turns out that deflate() can do no wrong here. Let's go through deflate()'s return values and dispense with them one by one. The possible values are Z_OK, Z_STREAM_END, Z_STREAM_ERROR, or

Z_BUF_ERROR. Z_OK is, well, ok. Z_STREAM_END is also ok and will be returned for the last call of deflate(). This is already guaranteed by calling deflate() with Z_FINISH until it has no more output.

Z_STREAM_ERROR is only possible if the stream is not initialized properly, but we did initialize it properly. There is no harm in checking for

Z_STREAM_ERROR here, for example to check for the possibility that some other part of the application inadvertently clobbered the memory containing the zlib state. Z_BUF_ERROR will be explained further below, but suffice it to say that this is simply an indication that deflate() could not consume more input or produce more output. deflate() can be called again with more output space or more available input, which it will be in this code.

deflate()有返回值来告知错误,但是这个例子中我们并不需要检查返回值。为什么?让我们逐一来看deflate()可能的返回值。Z_OK,没有错误。

Z_STREAM_END,说明读到输入文件尾部了,但并没有关系,我们的代码连续调用deflate()直到不再产生输出。(产生输入已读完,而仍需要调用deflate()进行压缩的原因是输出缓冲区的大小的限制)。Z_STREAM_ERROR只会在流未被

正确初始化的情况下出现,但是我们确实正确初始化了。当然,检查一下

Z_STREAM_ERROR也没有坏处,因为有可能程序的其他部分不经意地改变了zlib 的内存。Z_BUF_ERROR表明deflate()不能再读取更多输入或者产生任何输出了,这种情况下可以通过给予更多输入或者分配更多输出缓冲来再次调用

deflate(),下面还会提到Z_BUF_ERROR。

ret = deflate(&strm, flush); /* no bad return value */ assert(ret != Z_STREAM_ERROR); /* state not clobbered */ Now we compute how much output deflate() provided on the last call, which is the difference between how much space was provided before the call, and how much output space is still available after the call. Then that data, if any, is written to the output file. We can then reuse the output buffer for the next call of deflate(). Again if there is a file i/o error, we call deflateEnd() before returning to avoid a memory leak.

我们现在计算上一次调用deflate()时产生了多少输出,即是调用前分配的输出缓冲区大小减去调用后还剩下的输出缓冲区大小。然后将输出缓冲区的数据写

入输出文件。然后下次调用deflate()时又可以重新使用这片输出缓冲区了。如果有文件I/O错误,我们先调用deflateEnd()然后再返回,以免内存泄露。

have = CHUNK - strm.avail_out;

if (fwrite(out, 1, have, dest) != have || ferror(dest)) { (void)deflateEnd(&strm);

return Z_ERRNO;

}

The inner do-loop is repeated until the last deflate() call fails to fill the provided output buffer. Then we know that deflate() has done as much as it can with the provided input, and that all of that input has been consumed. We can then fall out of this loop and reuse the input buffer. 内层do-while循环直到deflate()不能填满给定的输出缓冲区为止(前面提到了,每次deflate()尽可能多地消耗输入数据,但是一次“突然”burst产生的输出数据大小都和输出缓冲区大小一样,除非最后一次产生的输出填不满输出

缓冲区)。此时我们知道deflate()已经消耗完了输入缓冲区内的数据,我们可以退出内层循环,然后重新利用这片输入缓冲区。

The way we tell that deflate() has no more output is by seeing that it did not fill the output buffer, leaving avail_out greater than zero. However suppose that deflate() has no more output, but just so happened to exactly fill the output buffer! avail_out is zero, and we can't tell that deflate() has done all it can. As far as we know, deflate() has more output for us. So we call it again. But now deflate() produces no output at all, and avail_out remains unchanged as CHUNK. That deflate() call wasn't able to do anything, either consume input or produce output, and so it returns Z_BUF_ERROR. (See, I told you I'd cover this later.) However this is not a problem at all. Now we finally have the desired indication

that deflate() is really done, and so we drop out of the inner loop to provide more input to deflate().

我们通过看deflate()是否填满了输出缓冲区来判断其是否还有更多的输出没做,如果avail_out大于0,说明输出已经做完了。但是假设这样一种巧合,最后一次的deflate()产生的输出刚好填满了输出缓冲区,avail_out为0,但是deflate()确实已经处理完了所有输入,所有输出也已经做了。这种情况其实没关系,我们再调用一次deflate(),此时会返回Z_BUF_ERROR。

With flush set to Z_FINISH, this final set of deflate() calls will complete the output stream. Once that is done, subsequent calls of deflate() would return Z_STREAM_ERROR if the flush parameter is not Z_FINISH, and do no more processing until the state is reinitialized.

如果flush参数设成Z_FINISH,最后的几次deflate()调用会完成输出流工作。一旦这个做完了,之后的deflate()调用如果flush参数不为Z_FINISH,则会返回Z_STREAM_ERROR,并且不进行任何操作,直到重新初始化z_stream状态。

Some applications of zlib have two loops that call deflate() instead of the single inner loop we have here. The first loop would call without flushing and feed all of the data to deflate(). The second loop would call deflate() with no more data and the Z_FINISH parameter to complete the process. As you can see from this example, that can be avoided by simply keeping track of the current flush state.

有些程序用两层循环来代替我们这里的内层循环。第一层循环flush设为

Z_NO_FLUSH,将所有输入都读进去,第二层循环将flush设置为Z_FINISH,不再输入,让deflate()完成输出。我们的代码里避免了这样做,因为保持追踪flush的状态更方便。(代码中对应flush = feof(source) ? Z_FINISH :

Z_NO_FLUSH;)

} while (strm.avail_out == 0);

assert(strm.avail_in == 0); /* all input will be used */ Now we check to see if we have already processed all of the input file. That information was saved in the flush variable, so we see if that was set to Z_FINISH. If so, then we're done and we fall out of the outer loop. We're guaranteed to get Z_STREAM_END from the last deflate() call, since we ran it until the last chunk of input was consumed and all of the output was generated.

我们通过检查flush是否为Z_FINISH(因为flush = feof(source) ? Z_FINISH : Z_NO_FLUSH;)来判断是否还有输入文件未被读取。最后一次调用deflate()的返回值必然是Z_STREAM_END,因为所有的输入都已经读完,所有的输出也都产生。

/* done when last data in file processed */

} while (flush != Z_FINISH);

assert(ret == Z_STREAM_END); /* stream will be complete */ The process is complete, but we still need to deallocate the state to avoid a memory leak (or rather more like a memory hemorrhage if you didn't do this). Then finally we can return with a happy return value.

整个def()就要结束了,调用deflateEnd防止内存泄露。

/* clean up and return */

(void)deflateEnd(&strm);

return Z_OK;

}

Now we do the same thing for decompression in the inf() routine. inf() decompresses what is hopefully a valid zlib stream from the input file and writes the uncompressed data to the output file. Much of the discussion above for def() applies to inf() as well, so the discussion here will focus on the differences between the two.

下面的inf()是解压。输入数据应该是从输入文件读到的合法的zlib流,将解压后的数据写入输出文件。大部分和def()类似。下面主要讲不一样的地方。

/* Decompress from file source to file dest until stream ends or EOF. inf() returns Z_OK on success, Z_MEM_ERROR if memory could not be allocated for processing, Z_DATA_ERROR if the deflate data is

invalid or incomplete, Z_VERSION_ERROR if the version of zlib.h and the version of the library linked do not match, or Z_ERRNO if there is an error reading or writing the files. */

int inf(FILE *source, FILE *dest)

{

The local variables have the same functionality as they do for def(). The only difference is that there is no flush variable, since inflate() can tell from the zlib stream itself when the stream is complete.

int ret;

unsigned have;

z_stream strm;

unsigned char in[CHUNK];

unsigned char out[CHUNK];

The initialization of the state is the same, except that there is no compression level, of course, and two more elements of the structure are initialized. avail_in and next_in must be initialized before calling inflateInit(). This is because the application has the option to provide the start of the zlib stream in order for inflateInit() to have access to information about the compression method to aid in memory allocation. In the current implementation of zlib (up through versions 1.2.x), the method-dependent memory allocations are deferred to the first call of inflate() anyway. However those fields must be initialized since later versions of zlib that provide more compression methods may take advantage of this interface. In any case, no decompression is performed by

inflateInit(), so the avail_out and next_out fields do not need to be initialized before calling.

状态的初始化是一样的,除了没有level这个参数(当然了,这个得从输入的zlib 数据里获取)。Z_stream除了要初始化zalloc, zfree , opaque外,还要初始化next_in, avail_in。

Here avail_in is set to zero and next_in is set to Z_NULL to indicate that no input data is being provided.

这里avail_in设为0,next_in设为Z_NULL,表示没有提供输入数据。

/* allocate inflate state */

strm.zalloc = Z_NULL;

strm.zfree = Z_NULL;

strm.opaque = Z_NULL;

strm.avail_in = 0;

strm.next_in = Z_NULL;

ret = inflateInit(&strm);

if (ret != Z_OK)

return ret;

The outer do-loop decompresses input until inflate() indicates that it has reached the end of the compressed data and has produced all of the uncompressed output. This is in contrast to def() which processes all of the input file. If end-of-file is reached before the compressed data self-terminates, then the compressed data is incomplete and an error is returned.

外层循环以inflate()是否返回Z_STREAM_END作为循环终止条件。因为如果inflate()返回Z_STREAM_END,说明输入已读完,而且所有输出都产生了(这里和deflate()不同,和flush参数是否为Z_FINISH无关。deflate()返回

Z_STREAM_END说明输入已读完,而且如果设置了Z_FINISH的话,所有输出都会产生)。这个和def()相反,def()是判断输入是否已经读完,inf()是判断输出是否已经全部做了。如果在读到压缩数据尾部之前就读到了文件尾,那么说明压缩数据不完整,返回错误。

/* decompress until deflate stream ends or end of file */

do {

We read input data and set the strm structure accordingly. If we've reached the end of the input file, then we leave the outer loop and report an error, since the compressed data is incomplete. Note that we may read more data than is eventually consumed by inflate(), if the input file continues past the zlib stream. For applications where zlib streams are embedded in other data, this routine would need to be modified to return the unused data, or at least indicate how much of the input data was not used, so the application would know where to pick up after the zlib stream.

如果在读到压缩文件尾之前读到文件尾,说明压缩数据不完整,结束外部循环,报错。注意读到的数据可能比inflate()最终消耗的数据要多。在这样的程序中,要注意返回未用到的数据,至少也要指明还有多少输入数据没有被inflate()

使用,使得程序可以知道从哪里获取zlib数据之后非zlib数据。

strm.avail_in = fread(in, 1, CHUNK, source);

if (ferror(source)) {

(void)inflateEnd(&strm);

return Z_ERRNO;

}

if (strm.avail_in == 0)

break;

strm.next_in = in;

The inner do-loop has the same function it did in def(), which is to keep calling inflate() until has generated all of the output it can with the provided input.

内层循环和def()类似,不断调用inflate()直到给定输入被处理完,产生的所有输出都做了。

/* run inflate() on input until output buffer not full */

do {

Just like in def(), the same output space is provided for each call of inflate().

和def()中一样,每次调用inflate()都提供输出缓冲区

strm.avail_out = CHUNK;

strm.next_out = out;

Now we run the decompression engine itself. There is no need to adjust the flush parameter, since the zlib format is self-terminating. The main difference here is that there are return values that we need to pay attention to. Z_DATA_ERROR indicates that inflate() detected an error in the zlib compressed data format, which means that either the data is not a zlib stream to begin with, or that the data was corrupted somewhere along the way since it was compressed. The other error to be processed is

Z_MEM_ERROR, which can occur since memory allocation is deferred until inflate() needs it, unlike deflate(), whose memory is allocated at the start by deflateInit().

下面可以跑解压引擎了。不需要设置flush参数,因为zlib格式是自终结的(这里不明白)。主要的不同在于,需要注意inflate()的返回值。Z_DATA_ERROR

说明读取的数据有错,有么不是zlib格式的,要么某个地方数据有错误。

Z_MEM_ERROR说明内存不足。deflate()里的内存在deflateInit()中就被分配好了,而inflate()的内存是有“延迟”的,inflate()需要才分配。

Advanced applications may use deflateSetDictionary() to prime deflate() with a set of likely data to improve the first 32K or so of compression. This is noted in the zlib header, so inflate() requests that that

dictionary be provided before it can start to decompress. Without the dictionary, correct decompression is not possible. For this routine, we have no idea what the dictionary is, so the Z_NEED_DICT indication is converted to a Z_DATA_ERROR.

高级程序中deflate()可能使用了字典(用deflateSetDictionary()设置

)进行压缩,那么inflate()就需要使用同样的字典进行解压。如果没有,返回Z_NEED_DICT。

inflate() can also return Z_STREAM_ERROR, which should not be possible here, but could be checked for as noted above for def(). Z_BUF_ERROR does not need to be checked for here, for the same reasons noted for def(). Z_STREAM_END will be checked for later.

和def()中一样,Z_STREAM_ERROR不可能出现。Z_BUF_ERROR也不必特别处理,和上面的def()一样。

ret = inflate(&strm, Z_NO_FLUSH);

assert(ret != Z_STREAM_ERROR); /* state not clobbered */ switch (ret) {

case Z_NEED_DICT:

ret = Z_DATA_ERROR; /* and fall through */

case Z_DATA_ERROR:

case Z_MEM_ERROR:

(void)inflateEnd(&strm);

return ret;

}

The output of inflate() is handled identically to that of deflate().

have = CHUNK - strm.avail_out;

if (fwrite(out, 1, have, dest) != have || ferror(dest)) { (void)inflateEnd(&strm);

return Z_ERRNO;

}

The inner do-loop ends when inflate() has no more output as indicated by not filling the output buffer, just as for deflate(). In this case, we cannot assert that strm.avail_in will be zero, since the deflate stream may end before the file does.

当inflate()没有更多输出的时候,内层循环结束。同样通过看输出缓冲区是否大于0来判断。

} while (strm.avail_out == 0);

The outer do-loop ends when inflate() reports that it has reached the end of the input zlib stream, has completed the decompression and integrity

check, and has provided all of the output. This is indicated by the inflate() return value Z_STREAM_END. The inner loop is guaranteed to leave ret equal to Z_STREAM_END if the last chunk of the input file read contained the end of the zlib stream. So if the return value is not

Z_STREAM_END, the loop continues to read more input.

如果inflate()返回Z_STREAM_END(说明它读到了输入zlib流的尾部,完成了解压和完整性校验,所有的输出已经做了),外层循环结束。内层循环汇中的inflate(),在读到输入文件里有zlib流的尾部时,返回Z_STREAM_END,外层

循环因此终结。如果不为Z_STREAM_END,继续进行外层循环,读输入文件。

/* done when inflate() says it's done */

} while (ret != Z_STREAM_END);

At this point, decompression successfully completed, or we broke out of the loop due to no more data being available from the input file. If the last inflate() return value is not Z_STREAM_END, then the zlib stream was incomplete and a data error is returned. Otherwise, we return with a happy return value. Of course, inflateEnd() is called first to avoid a memory leak.

解压完成,如果外层循环是因为Z_STREAM_END结束的,happy ending,否则就是碰到了Z_DATA_ERROR或者Z_MEM_ERROR。

/* clean up and return */

(void)inflateEnd(&strm);

return ret == Z_STREAM_END ? Z_OK : Z_DATA_ERROR;

}

That ends the routines that directly use zlib. The following routines make this a command-line program by running data through the above routines from stdin to stdout, and handling any errors reported by def() or inf().

zerr() is used to interpret the possible error codes from def() and inf(), as detailed in their comments above, and print out an error message. Note that these are only a subset of the possible return values from deflate() and inflate().

/* report a zlib or i/o error */

void zerr(int ret)

{

fputs("zpipe: ", stderr);

switch (ret) {

case Z_ERRNO:

if (ferror(stdin))

fputs("error reading stdin\n", stderr);

if (ferror(stdout))

fputs("error writing stdout\n", stderr);

break;

case Z_STREAM_ERROR:

fputs("invalid compression level\n", stderr);

break;

case Z_DATA_ERROR:

fputs("invalid or incomplete deflate data\n", stderr);

break;

case Z_MEM_ERROR:

fputs("out of memory\n", stderr);

break;

case Z_VERSION_ERROR:

fputs("zlib version mismatch!\n", stderr);

}

}

Here is the main() routine used to test def() and inf(). The zpipe command is simply a compression pipe from stdin to stdout, if no arguments are given, or it is a decompression pipe if zpipe -d is used. If any other arguments are provided, no compression or decompression is performed. Instead a usage message is displayed. Examples are zpipe < foo.txt > foo.txt.z to compress, and zpipe -d < foo.txt.z > foo.txt to decompress.

/* compress or decompress from stdin to stdout */

int main(int argc, char **argv)

{

int ret;

/* avoid end-of-line conversions */

SET_BINARY_MODE(stdin);

SET_BINARY_MODE(stdout);

/* do compression if no arguments */

if (argc == 1) {

ret = def(stdin, stdout, Z_DEFAULT_COMPRESSION);

if (ret != Z_OK)

zerr(ret);

return ret;

}

/* do decompression if -d specified */

else if (argc == 2 && strcmp(argv[1], "-d") == 0) {

ret = inf(stdin, stdout);

if (ret != Z_OK)

zerr(ret);

return ret;

}

/* otherwise, report usage */

else {

fputs("zpipe usage: zpipe [-d] < source > dest\n", stderr); return 1;

}

}

研学手册(修订版)

精品文档 探国防奥秘 展少年风采 ———走进凤翔滩研学旅行方案指导课 指导教师:XXX 学校:海阳市XXX 研学基本信息 亲爱的同学们,我们“最美的课堂在路上”研学之旅即将起

研学注意事项 1.认真阅读本手册,了解研学基地,做好行前准备。 2.独立准备个人衣服装备、学习资料等,并科学分类装包。 3.自己定时叫醒,在家长的帮助下到达指定集合地点。 4.从集合入队开始,全程严格遵守研学团纪律,听从研学导师及辅导员的管理。 5.旅程及学习过程中不大声電哗,不擅自脱离队伍,养成良好的文明旅游素养。 6.研学活动中,自主探究,善于合作分享,积极参与体验并做好活动记录。 7.讲文明礼仪,按时作息,文明就餐,休息时保管好私人物品。 8.积极参与研学导师设计的行中课程。 9.研学中善于观察、思考,留好过程性影像资料。 10.研学结束,按要求完成研学评价及研学总结。 研学基地简介 凤翔滩研学旅行营地位于海阳旅游度假区金沙滩,东邻万米海水浴场,西邻国际沙雕艺术公园,东西海岸线长达约700米,占地150余亩,隶属于胶东少年军校,同时还是青少年国防教育基地。营地建有现代化水上乐园区、游泳培训区、室内射击场、蒙古包群、高智尔球馆、露天食堂、沙滩露营区、沙滩运动园区,这里有专业的训练团队,开设感恩教育课程、国防教育课程、军旅生活体验课程、军事科目训练课程、军事拓展训练课程、灾难自救训练等课程,他们秉承寓教于乐的教学理念,让孩子在玩乐中强身健体,科普国防教育知识,养成团结友爱的合作意识,提升青少年爱党、爱国、爱人民情怀。 开设主要课程: ※感恩教育课程※国防教育课程※军旅生活体验课程※军事科目训练课程※军事拓展训练课程※野外生存训练课程※灾难自救训练课程 精品文档

家庭教育指导原则、内容和方法(一) 课程简介

《家庭教育指导的原则、内容与方法》 课程简介 家庭教育指导是一门科学,必须坚持一定的原则,充实相应的内容,讲究科学的方法。本课程着力从这三个方面进行解读。 家庭教育指导的原则:家庭教育指导应注重科学性、针对性和实用性(有实际效果,好用),需坚持孩子为本、家长主体、多向互动三条具体指导原则。坚持“孩子为本”原则,主要是要促进孩子的自然发展、全面发展、充分发展;坚持“家长主体”原则,就是要确立为家长服务观念,了解家长需求,尊重家长愿望,调动家长的参与积极性;坚持“多向互动”原则,就是要在指导者与家长、孩子,家长与家长,家校之间展开互动,形成相互学习、相互尊重、相互促进的环境与条件。 家庭教育指导的内容:主要包含“1+5”共六个方面,即:更新家庭教育观念以及家庭德育、家庭智育、家庭体育、家庭美育、家庭劳育的内容。在家庭教育观念上,需要正确定位家庭教育观念,确立起“家长是一门职业,需培训上岗”、“家庭教育与生俱来,应从‘自发’走向

‘自觉’”、“家庭教育既是‘家事’,又是‘国事’、“家庭是孩子的第一课堂、终身课堂,父母是孩子的第一任教师、终身老师”等观念。家庭德育、智育、体育、美育、劳育等,必须与学校教育全面衔接,遵循学生成长与发展的规律,开展相应的教育活动。 指导正确的家教方法:首先,要走出“讲清道理,孩子即能照做”、“只重视孩子学习”、“忽视培养孩子品格”、“打骂式教育”、“孩子会自主感恩”等区。其次,要掌握“爱”“敬”“夸”“责”的四字诀。爱,要做到“无条件+有策略”;敬,要做到“平等+尊重+信任”;夸,要做到不吝啬对孩子的表扬和鼓励;责,要做到用好“批评”这根戒尺。

阅读课教案课程

阅读课教案课程 集团标准化工作小组 #Q8QGGQT-GX8G08Q8-GNQGJ8-MHHGN#

《小飞侠彼得潘》阅读交流课教学设计 教学目标: 1.在游戏、交流、讨论中分享读书的收获与快乐,分享童年的梦幻和向 往,感受童年的珍贵和美好。 2.通过对人物形象的讨论,感受不同人物的性格特点。 3.在阅读中真诚地与文本对话,与书中人物同悲同喜,畅谈情感体验。 4.赏析书中精彩片段,体会并学习作者抓住人物神态、动作、语言、心理 活动细致刻画,通过环境描写、场面描写进行烘托等塑造人物形象的表现手法。 教学流程: 一、导入 师:在无边的大海上,有一个小岛叫“永无岛”。一个永远长不大的男孩子住在那里,他叫“彼得潘”。岛上还有海盗和印第安人,有野兽、美人鱼和小精灵,有跟随着彼得的被父母丢弃、遗忘的男孩们。这些孩子在这样一个神奇的岛上,发生了很多稀奇有趣又感人的事情。这就是《彼得潘》告诉我们的故事。PPT(《彼得潘》的封面图片) 二、介绍作者和他的《彼得潘》在欧美各国的轰动效应 PPT展示简介。请两个学生分别读前言中的第二、四自然段。 三、读书收获 (一)概括故事内容 师:这本书陪我们度过了一个月美好的读书时光。让我们一起来回顾,在老师的提示下用自己的话概括故事的内容。(指名一人填一句)

PPT:一个晚上,来到了小姑娘的家,教和她的两个弟弟在空中,并把他们带到了。他们一到这里,惊险的事情就接连不断。他们遇到了印第安人、和美人鱼。由于邪恶的海盗头子作恶多端,战争不断爆发,海岛无宁静之日。尽管不幸事件一个接着一个,而彼得潘总能大显身手,想出巧妙的办法把小伙伴。 孩子们,现在我们来做个游戏,叫“猜猜他是谁”。请你们认真听老师的描述,在心里猜猜他是谁,不能出声,我请到哪个小组,那个小组就一起告诉大家。 (二)猜猜他是谁(一个小组猜一个,齐回答) 1.“她是一位招人喜欢的女士,脑子里有很多浪漫的想法,还有一张甜甜的、爱逗弄人的嘴,嘴角边永远挂着一个让人无法得到的吻。”她是 2.“所有的孩子都要长大,只有这个孩子例外。他的鼻子向上翘,身旁有一团美丽的光。”他是 3.“她是个特别可爱的小女孩,最喜欢讲彼得潘的故事,总是梦想着和彼得潘见上一面。”她是 4.“他很小,还没有你的巴掌大,身上穿的裙子是树叶做的,上面的仙尘闪闪发亮。”她是 5.“他是孩子们中最胆小的一个,又是最倒霉的一个。他性格很温和,一点也不暴躁,所以他也是所有孩子中最谦虚的一个。他是 6.“她的皮肤黝黑,非常漂亮。她时而卖弄风情,时而冷若冰霜;时而含情脉脉,时而热情似火。她不惧怕海盗,哪怕是死。”她是

《我的研学我做主》优质教案、教学设计

《我的研学我做主》 课程分析:研学旅行是由学校根据区域特色、学生年龄特点和各学科教学内容需要,组织学生通过集体旅行、集中食宿的方式走出校园,在与平常不同的生活中拓展视野、丰富知识,加深与自然和文化的亲近感,增加对集体生活方式和社会公共道德的体验。 2016 年 12 月教育部等 11 个部门印发了《关于推进中小学生研学旅行的意见》,要求各地将研学旅行纳入学校教学,推动其健康快速发展。 我校自 2016 年开展研学项目,至今已经两个年头,研学地点涉及国内的北京、西安、上海及苏杭地区、国外涉及英国、加拿大、韩国、澳大利亚、美国等重要城市和国家。前期的研学项目主要是学校和研学机构参与设计、规划,学生在前期参与度较少。鉴于此我设计、开设了《我的研学》这门综合实践课程。通过引导学生学习研学旅行的规划、设计相关知识,提升学生的团队合作能力、创新精神和实践能力。 本节课是《我的研学我做主》课程的第一课,主要引导学生了解研学旅行的主要内容,通过小组合作、共同探究的方法,学会安排基本的研学行程。 学习目标: 1、知识与技能:了解研学的基本内容,掌握设计基本研学路线 和细化研学目的的方法。

2、过程与方法:通过小组合作的形式,学会发挥集体智慧,集思广益,掌握设计基本研学路线的方法。通过分析、搜集资料掌握对信息的综合处理方法。 3、情感态度与价值观:培养学生的团体分工、协作能力,创新精神。加深学生对家乡的了解和热爱。 重点与难点: 1、重点:了解研学、激发对研学的兴趣,并乐于动手规划、设计研 学路线和细化研学目的。 2、难点:掌握设计基本研学路线的方法、步骤。 教学过程: 一、激发兴趣、导入新课 1、通过实验初中研学旅行开展情况的介绍,导入新课。帮助学生了 解研学的概况以及孩子们的收获,激发学生参与兴趣。 2、引入“研学”的概念,明确区分与单纯“旅游”的区别。 二、自主探究合作交流 1、研学计划主要内容 ①、提问学生“完成一次研学,需从哪些方面着手?”研什么? 去哪研?带什么研?研到了什么?老师总结即“研学目的, 研学地点,研学路线,研学准备,研学总结”四个方面。 ②、按照研学前,研学中,研学后分类明确流程。 2、研学资源分类 1、由研学目的确定研学地点进一步规划研学路线 2、明确研学资源的分类自然资源人文资源

研学-手册

研学-手册

小组名称: 小组成员: 我们的研学宣言:

我的研学课程目标: 一、我能够自我服务 1.我能照顾好自己,自己的事情自己做,能自己洗自己的衣物 2.我有良好的整理习惯,能整理自己的住宿房间、行李箱,能自己叠被子 二、我懂得自我保护 1.我知道并能记住自己父母和研学老师的电话号码 2.在研学期间,我不跟陌生人搭话,不跟陌生人走,有事情及时请示研学教师 三、我具有耐挫力 在研学过程中,我具有坚强的意志力,能完成研学的每一项课程,决不放弃 四、我能学会合作互助 我们四人组成一个合作共同体小组,在研学过程中,小组成员互相帮助,互相合作完成每一项课程内容 五、我能讲求文明礼仪 1.我能遵守公共场所礼仪,在参观或观赏时,做文明观众,会喝彩

2.我懂得基本餐饮礼仪,有良好的餐饮习惯,就餐时不挑不捡,能安静就餐 3.我能遵守公共场所文明秩序,在公共场所不喧哗,会耐心等待 六、我能够遵守规则 我能遵守交通规则,遵守研学中的一切规则 七、我能够保护环境 1.在研学过程中,我能保护环境,不乱扔纸屑,能讲自己的垃圾放进自己准备的垃圾袋里 2.我能保护公共财物,不破坏公共财物,不在建筑物和文明古迹涂抹、刻画

第天研学旅行我的评价表姓名:目标 今天我能照顾好自己,自己的事情自己做,能自己洗自己的衣物 今天我能整理自己的住宿房间、行李箱,能自己叠被子 今天我不跟陌生人搭话,不跟陌生人走,有事情及时请示研学教师 今天我有坚强的意志品质,胜利完成今天的研学课程 今天就餐时我能做到不挑不捡,能安静就餐 今天在公共场所,我能安静进行今天的课程,会耐心等待 今天我的规则意识很强,能遵守一切规则 今天我没有乱扔纸屑,我能将自己的垃圾放进自己准备的垃圾袋里

《现代教育学》课程简介

《教育学》 课程简介 1、课程教学目标:本课程是师范院校师范小学教育专业学生必修的专业基础课,也是师范类专业的公共基础课。本课程是研究探索学校教育的各种现象与问题,揭示教育普遍规律的一门社会学科。它对小学教育专业师范学生基本教育理念的形成和初步教育技能的掌握起着奠基作用。 本课程着重教给学生理论、原则和培养思维能力,强调理论性和基础性;也教给学生一定的规范、技巧和具体操作方法,但其实用性和操作性有一定的局限。它主要通过对教育实践的现实反思获得对教育规律的理解与认识。 通过教学,让学生掌握教育学的基本概念、基础知识和基本理论,帮助学生初步形成素质教育的思想,培养其热爱教育事业的情感,并使学生初步掌握教育科学研究的方法。 2、课程结构:主要分为三大部分:教育是什么(教育的本质和目的,教师和学生);如何进行教育(课程与教学、德育);怎样保障教育顺利进行(教育管理、制度和评价、研究)等。 3、考核方式: 实行百分制,其中:课堂笔记、课堂表现、平时作业(2-3次)、学科结业论文(1次)和出勤作为平时成绩占30%;闭卷考试成绩占70%。 作业要求认真、及时、独立完成。不交作业者以不及格论处。期末考试为闭卷笔试,采用多种不同的题型,考核学生对小学教育学的基本概念和基本知识掌握情况,着重评价学生分析和解决小学教育实际问题的能力。 4、教学方法: 自学、讲授、研讨相结合。以讲授为主,自学安排在课外,研讨除安排1次专题外,其他在讲授中穿插进行。 5、教学内容、要点及学时安排: 总学时数:36学时其分配是:讲授32学时,(习题)研讨2学时,复习2学时 本课程所用教材:靳玉乐、李森主编:《现代教育学》,四川教育出版社2005年版,共12章。 绪论教育学的发展2学时 第一章现代教育本质4学时 第一节社会与教育(2学时) 第二节人的发展与教育(2学时) 第二章教育现代化2学时 第一节教育现代化的涵义和特征 第二节我国教育现代化的目标和发展战略 第三节教育现代化模式 第三章现代教育目的2学时 第一节教育目的及我国的教育目的 第二节“个人全面发展”与全面发展教育 第四章现代教育主体-教师与学生2学时 第一节教师 第二节学生 第三节师生关系

英语阅读课程教学大纲

“英语阅读”课程教学大纲 英文名称:Extensive Reading 课程编号:71120205~71120208 学时数:192 学分数:12 适用专业:外国语学院英语语言文学专业一、二年级学生 一、课程的性质、目的和任务 “英语泛读”是供高等学校英语专业一、二年级使用的基础课程,泛读课的特征体现在“泛”与“读”两个方面,就“泛”而言,泛读课所选的语言材料的内容呈百科知识性,包括社会生活各个方面;同时语言材料的文体呈多样性,既有文学作品,又有记叙文、说明文、议论文、新闻、广告等语言风格不同的各类文章;就“读”而言,泛读课的重要任务是指导学生掌握各种阅读方法,从而提高理解的准确性,加快阅读速度。 “英语泛读”课的目的在于培养学生的英语阅读能力和提高学生的阅读速度;培养学生细致观察语言的能力以及假设判断、分析归纳、推理检验等逻辑思维能力;提高学生的阅读技能,包括略读、寻读、细读、评读等能力;并通过阅读训练帮助学生扩大词汇量,增强语感,不断积累各种语言知识,加深文化沉淀。 二、课程教学内容的基本要求、重点和难点 本课程的重要任务是指导学生掌握各种阅读方法,从而提高理解的准确性,加快阅读速度,帮助生活在信息爆炸时代的学生学会通过阅读,快速、准确地获取并处理信息。因此,培养阅读习惯、加快阅读速度、提高理解的准确性,在阅读课程教学中同等重要。 教学要求:Section A 要求在课堂上处理,学生不要预习。 Section B供课外阅读,课堂上进行检查。 Section C 主要用于快速阅读训练,要求严格在规定时间内完成。 课堂教学主要是通过学生按要求在不预习前提下完成Section A(20---25分钟)来培养良好阅读习惯;通过对Section A中词汇练习及阅读思考题的讲解,教授有关阅读方法。如:根据上下文判断生词的词义,熟悉英语句子结构,了解内容题材与中心思想的区别;把握文本中心思想;阅读速度和逻辑推导;对文本的批评鉴赏能力等。 课外要求学生熟练领会教材出现过的词汇,掌握所学阅读方法,并能在实际阅读过程中自觉熟练运用。课外通过大量阅读(建议至少课内阅读量的5---10倍以上),巩固所学阅读方法,扩大词汇量,提高阅读能力。 第一册 本册目的与要求: 第一册首先指导学生根据上下文判断生词的词义,熟悉英语句子结构,了解内容题材与中心思想的区别。 Section 1:Unit1—Unit 4 重点和难点: Context Clue to Word Meaning I (以讲解为主,附以阅读练习) 内容: 1. Unit 1 University Student Life:Text On being a Student 2. Unit 2 Culture Shock:Text Making a Culture Change 3. Unit 3 Movies:Text How Do the Movies Do It 4. Unit 4 Food:Text A Food Tour of the United States

清明上河园研学课程教案

《步入历史画卷——梦回千年大宋》 研学课程教案 授课对象:初一年级学生 授课人数:40 课程时间:6小时 一、背景分析 清明上河园是国家的一个标志,是以北宋画家张择端的《清明上河图》为蓝本,按照原比例建造的一个5A级景区。国家旅游局给清明上河园的定位是“步入画卷,梦回千年”;外籍游客评价说这儿是“古代迪士尼,宋装嘉年华”。2010年上海世博会中华艺术宫的镇馆之宝就是一个动态版的巨形清明上河图,由此可见这样的一个公园在中国的地位。在这儿不仅仅可以看到一个现代开封城的园林,更重要的是实实在在的游览了一幅立体的世界名画,走进了一座千年以前的世界第一大都市。在这里可以研究宋代建筑风格、风俗人情,可以观看大型实景演出,尤其是一些非物质文化遗产的展示。 二、学情分析 从学生的知识层面来说,在课本上学习了太多的宋代诗词,两宋的历史,对宋代的政治、经济、军事、文化以及社会生活各方面的情况已有初步认识。

从学生的年龄特征来说,初中一年级的学生对外面的世界充满了好奇,他们具有强烈的求知欲,学习兴趣浓厚,喜欢探究问题,表现自我,学习兴奋点集中在直观、趣味性强的历史知识上,学习情感外显。 三、教学目标 (一)教育目标(核心素养) 1.人文底蕴——人文积淀:岳飞枪挑小梁王的经历。 2.科学精神——勇于探究:曾经的世界第一城市是怎么没落的 3.科学精神——批判质疑:《清明上河图》的理解,描绘的是繁华喧嚣,还是带有忧患意识的“盛世危图”。 4.实践创新——技术应用:体验蹴鞠、推铁环,制作木板年画。 5.责任担当——国家认同:对比曾经的汴京和现在的开封,意识到只有祖国的繁荣昌盛才是人民幸福生活的保证。(二)课程目标 1.价值体认:通过参观清明上河园,了解宋代生活在政治经济文化中心的人民的生活状态,更深刻的了解中国传统民俗文化,增强民族自豪感。 2.责任担当:纵观开封城的兴衰交替,认识到国家对于人民的意义,更深刻的领会少年强则国强的道理。 3.问题解决:探究“东京城”由盛转衰的历程,寻找下一步

研学旅行工作手册模板

“美韵东平爱满家乡”研学旅行 工作手册 东平县第三实验小学 2018年6月 “美韵东平爱满家乡”研学课程实施方案 东平县第三实验小学 一、课程背景 根据《东平县推进中小学生研学旅行试点工作实施方案》的要求,紧紧围绕“让每一个孩子在爱的滋养下健康成长”的办学理念,让孩子们在学会享受爱的同时,更要学会付出爱,以培养“知爱感恩”美少年为目标,通过“美韵东平,爱满家乡”研学课程,让孩子们走进家乡、了解家乡、感受家乡厚重文化积淀的博大精深,从小立下热爱家乡、建设家乡的雄心壮志。 二、课程目标 通过对我县部分景点的研学参观,让学生进一步了解东平的历史和传统文化。结合所学知识,通过收集资料、探究分析、动手操作、总结分享,提高学生的学习能力,激发好奇心和求知欲。 三、课程主题:美韵东平爱满家乡 四、课程实施时间:2018年6月13日-15日

五、课程实施对象:四年级年级在校学生,分批组织实施,每次两个班级。 六、领导小组: 领导小组 组长: 成员: 工作小组 组长: 副组长: 成员: 具体工作小组: 6月13日 领队人员: 四年级一班: 研学讲师:1号车4座1号车5座 组长: 一队:1号车54座 二队:1号车2座 三队:1号车3座 四队:2号车2座 五队: 四年级二班: 研学讲师:3号车4座3号车5座

组长: 一队:3号车54座 二队:3号车2座 三队:3号车3座 四队:2号车3座 五队: 6月14日 领队人员: 四年级三班: 组长:研学讲师:1号车4座 一队:1号车54座 二队:1号车2座 三队:1号车3座 四队:2号车1座(占用导游座) 五队:1号车5座 四年级四班: 组长:研学讲师:3号车4座 一队:3号车54座 二队:3号车2座 三队:3号车3座 四队:2号车2座 五队:3号车5座

华师大学前教育专业课程简介

学前教育学专业课程简介 课程编号:S0109020401004 课程名称:儿童发展与教育 课程英文名称:Child Development and Education 学分: 3 周学时总学时:54 课程性质:硕士学位专业必修课适用专业:学前教育学 教学内容及基本要求: 教学内容 1 Human Development: Facts or Theory? 探讨儿童发展理论研究的重要性,理论与事实的关系、理论与研究的关系、研究与应用(尤其是教育)的关系。 2 Historical Roots of Human Development: Concepts and Theories 儿童发展关键性理论及概念,包括遗传决定和环境决定、连续性和阶段性、稳定性和可变性、主动性和被动性、规律性和差异性、情境性和普遍性的历史渊源及变迁。 3 Philosophical Models of Development 有关发展的几个主要哲学模型的介绍及有关讨论。 4 The Nature–Nurture Controversy: Implications of the Question How? 集中探讨有关儿童发展遗传决定和环境决定的争议、哲学基础、教育思想及影响等。 5 The Continuity–Discontinuity Issue 集中探讨儿童发展的连续性和非连续性、稳定性和可变性的有关争议。 6 Preformationism, Locke, and Rousseau/ Gesell’s Maturational Theory 洛克与卢梭早期学说里的胚胎中预存说以及格塞尔的成熟理论。 7 Ethological Theories: Darwin, Lorenz and Tinbergen, and Bowlby and Ainsworth 达尔文、洛伦兹、亭柏根、包尔比和安斯沃思的动物行为学理论。 8 Learning Theory: Pavlov, Watson, and Skinner/ Bandura’s Social Learning Theory 巴夫洛夫、华生与斯金纳的学习理论以及班杜拉的社会学习理论。 9 Nature Approaches to Human Development: Behavioral Genetics and Sociobiology 介绍行为基因学的有关思想背景及理论观点。通过社会生物学这一概念,介绍发展的遗传决定思想的近期发展。 10 Stage Theories of Development:Piaget’s Cognitive Development theory and Kohlberg’s Stages of Moral Development 发展的阶段理论及观点的介绍:皮亚杰的认知发展理论与柯尔伯格的道德发展阶段理论。 11 The Differential Approach and Erick son’s Eight Stages of Life 发展的差异理论及观点的介绍,艾里克森之生命八个周期。 12 Freud’s Psychoanalytic Theory and Jung’s Theory of Adulthood

阅读课程实施方案

王岘学区阅读课程实施方案 “读书,是孩子们净化灵魂的一个非常重要的途径。”古今中外的许多著名作家、科学家所取得的巨大成就往往也与他们的读书分不开的。为了使王岘学区学生读书阅读课程落到实处,特制定本活动方案。 一、实施要求: 语文课程标准在总目标中指出: 要使学生“具有独立阅读的能力,注重情感体验,有较丰富的积累,形成良好的语感。学会运用多种阅读方法。能初步理解、鉴赏文学作品,受到高尚情操与趣味的熏陶,发展个性,丰富自己的精神世界。能借助工具书阅读浅易文言文。九年课外阅读总量应在400 万字以上。”分解到小学阶段学生的课外阅读总量应不少于150 万字。我们制定这一方案就是要使学生的阅读、背诵量达到这一要求的底线。 另外通过这一活动的开展,激发学生的阅读兴趣,培养学生良好的阅读习惯,让每一个学生都热爱读书,学会读书并在读书的活动中陶冶情操、获取真知、树立理想。 二、实施目标: (一)通过课外阅读活动的开展,在班级甚至是学校形成热爱读书的良好风气。 (二)通过课外阅读活动的开展,使学生养成良好的读书习惯。 (三)通过课外阅读活动,使学生学会读书、学会学习,促进学生的知识更新,活跃学生的思维。 (四)通过开展阅读课程,使学生的读书落到实处,使阅读成为我校的特色,逐步形成独特的校园文化。 三、实施内容: (一)制定切实可行的阅读计划。 各学校各班级要根据学生的年龄特点、兴趣爱好制定符合本班学生实际的班级读书计划,按照新课标的要求,低年级的阅读量为5 万字,分解到各个学期每学期应达到1250 字; 中年级不少于40 万字,分解到每个学期应达到10 万字,也就是相当于两本语文书的字数。高年级课外阅读总量不少于100万字,即每学期应达到25 万字,相当于高年级的语文课本5 本书左右。各班级还可以让学生根据自己的实际制定个人读书计划,班主任要认真督促检查,确保计划得到落实。

小学研学教案

授课时间:年月日授课节次:节 陶瓷的研究 陶瓷是我国的骄傲,其它国家对我国的认识也是从陶瓷开始的,这一点从陶瓷和中国在英语里同名就可以看出。在今天,现代人的生活已经越来越离不开陶瓷了,看,陶瓷碗、陶瓷杯、陶瓷壶,甚至连神舟飞船上也装备了大批陶瓷瓦。它已不仅仅是器具,其中包含着隔热、耐磨、绝缘、艺术、欣赏等价值,对于生活中随处可见的陶瓷,学生们愿意去了解它,去探索它的秘密,并对时下流行的陶瓷情有独钟,所以我们展开了一系列的研究……中国是世界上几个历史悠久的文明古国之一,对人类社会的进步与发展做出了许多重大贡献。除了在世界上享有盛誉的四大发明以外,中国在陶瓷技术与艺术上所取得的成就,尤其具有特殊重要意义。可以说,中华民族发展史中的一个重要组成部分是陶瓷发展史。早在欧洲掌握制瓷技术之前一千多年,中国已能制造出相当精美的瓷器。在古代我国的制陶技术曾领先于世界,在现代我国的特种陶瓷技术却落后后来居上的发达国家,特种陶瓷凝聚了许多尖端技术,在现代社会广泛地运用在航空航天、国防军事、电子、医疗、工业、农业等领域。作为炎黄子孙,我们有责任、有义务做好这方面的研究。现在我国的神六飞船已经准备发射升空,上面运用了许多的特种陶瓷材料,这也是我们想研究这一课题的原因之一。 一、活动目标 (一)认知:1、知道一些有关陶瓷的常识,拓展自己的知识面。2、培养学生搜集处理信息的能力和集体协作的精神。 (二)情感:1、对陶瓷艺术的追求,培养学生的审美能力,感受到生活的美好。2、在活动过程中与同伴交流情感,分享成功的喜悦。 二、活动过程 (一)活动准备 1、出示研究课题《陶瓷的探究》,请同学们集思广益,想想它包括哪几方面的内容。 2、归纳整理学生的意见,大致可分为陶瓷的历史,陶瓷的作用,陶瓷的家族,制作陶瓷的过程等几方面来研究。

《健康教育》课程介绍

课程介绍 《健康教育》为学校的基础课程,纳入教学计划任选课,课时20学时,学分1分。学生的身心健康是推进学生素质教育,实现培养目标综合化的重要保障。健康的身心素质是大学生素质要求的重要方面,是他们正常生活、学习和工作的基本保证。在当前社会处于多变革、快节奏、高信息、强竞争的情况下,积极引导大学生提高身心素质,掌握心理调适方法,优化心理健康途径,预防心理疾病,纠正不良心理,促进身心健康,是学校教育的一个重要目标,也是大学生自我修养的重要内容。本课程旨在通过课堂教学普及心理生理健康知识,使学生能自我保健,强健身心。切实提高学生的身心健康水平。 本课程通过课堂教学,使学生了解健康是指人在生理心理及社会适应性的良好状态。帮助学生建立科学的健康观,能以科学的态度和方法来认识和处理健康问题。学会自我保健,自我调适,更好地认识自己促进自我身心健康的发展。 我院自2003年建院以来,学院就非常注视学生的身心健康工作,最初我们是通过办课外讲座的形式来开展健康教育课,同时通过“心理咨询室”,通过网络平台“健心俱乐部”来开展多种形式的教育活动,学生反映强烈,在此基础我们根据教育部、省教委的相关精神来开设了《健康教育》课,在学院领导的高度重视下成立了心理健康教研室,目前我们已拥有三名专职主讲理论老师,多名第二课堂辅导老师。每个班学生设立20个学时的理论教学。从生理心理、社会健康等多方面去讲授健康知识。通过这几年的努力,特别是对教学地大胆改革与探讨,我们将课堂教学、心理咨询、健康讲座,学生“心理协会”、“健心俱乐部”、“健心信箱”,大学生“5.25”健康活动周等多种形式融合起来,构建了更广泛的教育体系,受到了广大同学的欢迎。 《健康教育》课程的建设走出了一条逐步建立、完善与发展之路,并逐步在形成自己的特色,多渠道多角度地去显示该课程在学生健康成长中的重要作用。

小学课外阅读指导课程纲要

小学课外阅读指导课程纲要 课外阅读指导课程以培养学生阅读兴趣,有计划指导学生阅读方法和习惯,形成小学生阅读指导系列课程,通过研究已形成了具有纲要、教学设计以及课外阅读网络。 一、课外阅读课程的设计背景 语文是最重要的交际工具,是人类文化的重要组成部分。小学义务制教育阶段的语文课程,必须面向全体学生,使学生获得基本语文素质。其中阅读能力是语文的基本能力,是人的素质结构中的基本要素之一。学生学习语言,发展思维,陶冶情操,不仅要通过课堂阅读教学来进行,而且还必须通过课外阅读来进行。国家教育部最近制订颁发的《语文课程标准》(以下简称“标准”)中指出:“沟通课堂内外,充分利用学校、家庭和社区等教育资源,开展综合性的学习活动,拓宽学生的学习空间,增加学生语文实践机会”。然而,许多学校,尤其是农村小学的课外阅读,还存在着“想得多,做得少;号召多,务实少;形式多,效果少”的“三多三少”的现象。学生课外阅读究竟读什么,怎样读;教师指导究竟导什么,怎样导,见仁见智,诸说不同。 《标准》已向我们全体语文教师提出了确定宏观认识和微观实施的要求。我们怎样才能保证《标准》的要求不是停留在理想的境地,而是真正成为我们的行动指南,为此,我们在认真总结本市各校开展课外阅读经验和做法的基础上,编写了“江阴市小学语文课外阅读指导纲要”。 课外阅读在语文教育中的地位:课外阅读是最经常最重要的语文课外活动,《标准》中规定了各个阶段课外阅读的总量,突出了课外阅读的重要地位。由于课外阅读能促使学生“语文素养的形成和发展”,能启发学生的学习兴趣,开阔学生的视野,丰富学生的学习生活,陶冶思想情操,发展智力,培养能力,使学生在德、智、体、美诸方面生动活泼主动地发展,他能弥补课堂教学的不足,克服其弊端。因此,课内阅读和课外阅读好比车子的两个轮子,缺一不可。 课外阅读在语文教育中的作用:课外阅读与课内阅读相辅相承,是课内阅读的延伸,课外阅读与课内指导相结合,学生得法于课内,得益于课外。课外阅读在语文教育中的作用主要是: 1、课外阅读有利于人文素养和科学素养的培养。 “语文课程丰富的人文内涵对学生精神领域的影响是深广的,学生对语文材料的反映又往往是多元的。”学生只有通过大量的课外阅读,扩展自己的阅读面,拓展自己的视野,才能认识中华民族文化的丰厚博大,吸收民族文化智慧,培养爱国主义感情,社会主义感情,社会主义品德品质,逐步形成积极的人生态度和正确的价值观,提高文化和审美情趣。 2、课外阅读有利于语文课程资源的开发和利用。 语文课程资源包括课堂教学资源和课外学习资源。沟通课堂内外,充分利用学校、家庭和社区等教育资源。如学生利用图书、网络等信息渠道等进行探究性阅读。促进学生语文素养的整体提高。 3、课外阅读有利于学生阅读能力和良好阅读习惯的培养。

课程简介和教学大纲

课程简介和教学大纲 课程代码:061Q0008 课程名称:力学 (Mechanics) 学分: 4 周学时: 4 面向对象:求是科学班(物理)及部分对物理感兴趣的本科生 预修课程要求:高中物理课程 一、课程介绍(100-150字) (一)中文简介 力学是物理学专业的基础课,是基础之基础,也是本科生所接触到的第一门物理课程。物理学是研究物质世界最基本最普遍的运动规律的一门学科。本课程面向物理求是科学班,以及部分物理学专业和对物理学兴趣浓厚的理科类和工科类的本科生。本课程介绍经典力学即牛顿力学的基本概念和基本规律,阐明力学与其他学科的关系和在当前科技与生产和日常生活中的应用。主要内容包括质点运动学和动力学、机械能守恒、动量守恒及角动量守恒、万有引力,刚体力学、机械振动与波、狭义相对论以及流体力学基础。 (二)英文简介 Mechanics is the very first of a series of fundamental elementary courses for an undergraduate physics major.In general,physics is a subject on the most fundamental and most general laws of the Nature. This course is mainly for the Physics class of the Qiushi Science Program,which is also open for physics majors and those who have a strong interest in physics from other sciences and engineering departments or schools.It covers the basic concepts and fundamental laws of Newtonian mechanics.It will also briefly point out its relationship with other science subjects and show its applications in science and technology as well as our everyday life.To be more specific,Mechanics covers kinematics and dynamics of a point mass, conservation laws of mechanical energy,momentum and angular momentum, universal gravitation,mechanics of a rigid body,mechanical oscillations and waves,theory of special relativity,and fundamentals of fluid mechanics. 二、教学目标 (一)学习目标 力学是物理系基础课的基础,也是技术学科的基础。通过本课程的学习,使学生掌握经典

大阅读课程实施方案

“大阅读”课程实施方案 诸城市龙源学校王素美 一、课程背景 1、认真贯彻《基础教育课程改革纲要》的精神,确立现代教育观、课程观、质量观,利用课程分级管理的体制,优化学校课程结构,充分发挥学校教育资源的功能,促进学生的发展,努力创建学校的教育特色。 2、大阅读课程是根据学校教育教学实际,针对学生学习和思想实际,采用实践一评估一开发的课程开发模式,以满足学生之间客观存在的差异性,因而具有一定的适应性和参与性。 3、大阅读课程的开发旨在通过对学生的需求进行科学地评佔、以学校为基地,并与外部力量合作,充分利用学校内外的课程资源,开发出对学生、家长、学校都有积极促进作用的课程,大阅读课程集中体现“以学校为本”的理念,主要强调课程的开放性、民主性、参与性,强调交流与合作,尽可能地培养出有个性、有特色、学业有所长的未来人才。 二、课程目标 1、培养学生的读书兴趣、爱好,发展个性特长。 2、拓展学生的知识领域,开阔学生视野,培养学生创新精神和实践能力。 3、在开发加强学生的阅读理解能力和欣赏能力的基础上,提高学生的写作能力。 4、在学生记忆力发展迅速的阶段,通过背诵古典文化经典,开发起记忆潜能、陶冶其性情、健全其人格,培养聪明健康,知书明理,有着较高人文素养的下一代。 5、弘扬中华民族文化,增进下一代对中国悠久历史、文化等各方面的认识和了解,培养其强烈的民族自豪感。 6、发扬诚信、仁爱、正直宽容的中华民族精神,培养良好的学习、生活习惯,促成树立优良的社会责任感,以正风气,以提民心。 7、让学生在诵读高品位典范性的古今文学作品过程中,有机的展开科学的朗诵、演讲等基本技能训练,从而引导学生进行丰富的文化积累。同时教学手段多样化,采取民

中小学研学旅行主题课程教学设计示例

中小学研学旅行主题课程教学设计示例 2017-05-18 16:51:02 中国校外教育(下旬)2017年4期 剑光 摘要:我国中小学研学旅行活动普遍存在设计粗糙、容空泛、考虑学生特点不够等现象。参照学科课程严谨地规,基于多年从业经验和实际调研,按照核心素养培养目标,讨论了研学旅行活动课程设计应当遵循的原则,并据此设计了一些实例课程。 关键词:研学旅行主题课程教学设计素质教育中小学生 笔者在市十多年国际、国研学旅行产品设计的经历中,深感目前国研学旅行活动普遍存在容开发设计不足等问题。在考察了市外一些素质教育基地、中小学研学旅行(社会实践)以及各种可供研学旅行使用的容资源基础上,着重讨论研学旅行主题课程设计的工作容及实际设计示例。 一、研学旅行的主题课程教学设计的含义 2016年12月,教育部等11个部门再次发布“关于推进中小学研学旅行的意见”,希望强化研学旅行以培养“全面发展的人”。研学旅行是校外教育、落实核心素养培养的重要形式。研学旅行活动多在户外进行,在“没有墙的教室”中进行教学,涉及的教学资源、过程比比学校教室课堂复杂很多,客观上对教学设计的要求更高。而要实现研学活动的素质教学目标,就必须对研学旅行活动的进行符合教育规律和实际情况的教学设计,从而规教学过程。

研学旅行主题课程教学设计,就是参照学校学科课程的正规教学管理与实施,在符合教育思想、理论和规律的前提下,对旨在提升学生素养的研学容与活动进行规化、科学化的、系统化的细化设计,从而形成各主题课程的教学实施方案(教案)。 显而易见,作为有组织的中小学生校外素质教育活动,研学旅行不同于一般的成人旅游、不同于学校教室课堂学科课程的教学,也不同于一般的春游/秋游或者夏令营/冬令营。在设计研学旅行主题课程时,应当特别考虑其教育价值、体验与实践过程、趣味性、真实场景、学生认知能力、安全性等。 二、主题课程教学设计的工作容 1.候选资源的评估与梳理。即参照“六大核心素养”的总体培养目标,对一定区域一切可能用于研学旅行的各种资源、场景/条件进行广泛地考察,包括大自然、工业、农业、商业、各种服务业、文化历史、科学研究、艺术、社会活动、政府行为,等等。首先是本地及周边的资源,其次是其他省市以及国际视野的资源。考察的重点是评估这些资源对于素质教育的适用性、可用性以及接待条件。一般一个班的学生50人左右整体出行,对课程实施点的场地条件有一定要求。 2.确定主题。户外教育的容往往很难简单地归类于某一个类型或者只有单一的培养目标,而是具有综合性、多目标性。但每个主题课程应当所有侧重,不能为了很多教学目标而装太多的容与过程,必须做适当的取舍和提炼,形成相对完整的主题容和过程。一个主题课程时间长度以至少1个小时到一整天的6个小时左右为宜。

阅读校本课程

郑州航空港区实验小学校本课程简介 书,是孩子们生活中的最好的伴侣。它会伴随着孩子的童年,给他无穷无尽的想象和欢乐,使他常读常新,不断地感知和发现新的真理;阅读课程注重幼儿阅读兴趣的培养、阅读习惯的养成、阅读能力的提高。这为幼小衔接的顺利过渡创造条件,降低阅读障碍的发生率和由此引起的学业成绩不良。培养孩子阅读必须在他观察力、理解力、逻辑能力、质疑和反思等综合能力培养和提高的基础去教,让孩子在心理学的基础上去玩、去参与、在兴趣的指导下自然的提高各种能力。 我们培养孩子阅读有以下三个目标: ①培养孩子阅读的兴趣。 ②培养孩子阅读的习惯。 ③培养孩子阅读的策略和方法。 锻炼孩子的观察力,理解力、逻辑能力最后,让社会充满书香,让我们的校园充满书香,让我们的孩子成为爱阅读的孩子.

郑州航空港区实验小学阅读校本课程实施方案 一、实施依据 1.多年来学生因阅读量过少、阅读面过窄、阅读倾向不正确等原因造成学生阅读能力下降,写作水平降低的现状已经到了非常严重的程度。为改变这种状况,激发学生课外阅读的兴趣,提高学生阅读的质量,开阔学生的视野,培养学生高雅的审美情趣,发展学生的审美能力,从根本上解决学生写作中存在的“无源之水,无本之木”的问题,应有一个可行而有效的机制来给予保障。 2.过重的学习负担,使挣扎于茫茫题海的学生失去了原本可以用来阅读的宝贵时间和形成扎实的基础知识、积累丰富的社会经验的机会,久而久之,冷落了课外名著的阅读,忽视了阅读能力的培养,造成学生习作中套话连篇,空话泛滥,无任何生气。 二、活动目标 1.让学生能够“发展个性,健全人格”,获得高层次语言素材的熏陶。 2.让学生学会阅读,养成良好的阅读习惯和阅读品质,培养学生的创新精神。 3.激活学生的知识储备,综合运用所学知识,致力于学生语文素养的整体提高。重视积累、感悟和熏陶,重视语文运用能力和语感的培养。 三、实施步骤 1.准备工作 (1)对学生进行思想动员,指明开设阅读课的作用和意义及要达到的目标。

中小学研学旅行主题课程教学设计示例讲课讲稿

中小学研学旅行主题课程-教学设计示例

中小学研学旅行主题课程教学设计示例 2017-05-18 16:51:02 中国校外教育(下旬)2017年4期 张剑光 摘要:我国中小学研学旅行活动普遍存在设计粗糙、内容空泛、考虑学生特点不够等现象。参照学科课程严谨地规范,基于多年从业经验和实际调研,按照核心素养培养目标,讨论了研学旅行活动课程设计应当遵循的原则,并据此设计了一些实例课程。 关键词:研学旅行主题课程教学设计素质教育中小学生 笔者在重庆市十多年国际、国内研学旅行产品设计的经历中,深感目前国内研学旅行活动普遍存在内容开发设计不足等问题。在考察了重庆市内外一些素质教育基地、中小学研学旅行(社会实践)以及各种可供研学旅行使用的内容资源基础上,着重讨论研学旅行主题课程设计的工作内容及实际设计示例。 一、研学旅行的主题课程教学设计的含义 2016年12月,教育部等11个部门再次发布“关于推进中小学研学旅行的意见”,希望强化研学旅行以培养“全面发展的人”。研学旅行是校外教育、落实核心素养培养的重要形式。研学旅行活动多在户外进行,在“没有墙的教室”中进行教学,涉及的教学资源、过程比比学校教室课堂复杂很多,客观上对教学设计的要求更高。而要实现研学活动的素质教学目标,就必须对研学旅行活动的进行符合教育规律和实际情况的教学设计,从而规范教学过程。 研学旅行主题课程教学设计,就是参照学校学科课程的正规教学管理与实施,在符合教育思想、理论和规律的前提下,对旨在提升学生素养的研学内容与活动进行规范化、科学化的、系统化的细化设计,从而形成各主题课程的教学实施方案(教案)。

显而易见,作为有组织的中小学生校外素质教育活动,研学旅行不同于一般的成人旅游、不同于学校教室课堂学科课程的教学,也不同于一般的春游/秋游或者夏令营/冬令营。在设计研学旅行主题课程时,应当特别考虑其教育价值、体验与实践过程、趣味性、真实场景、学生认知能力、安全性等。 二、主题课程教学设计的工作内容 1.候选资源的评估与梳理。即参照“六大核心素养”的总体培养目标,对一定区域内一切可能用于研学旅行的各种资源、场景/条件进行广泛地考察,包括大自然、工业、农业、商业、各种服务业、文化历史、科学研究、艺术、社会活动、政府行为,等等。首先是本地及周边的资源,其次是其他省市以及国际视野的资源。考察的重点是评估这些资源对于素质教育的适用性、可用性以及接待条件。一般一个班的学生50人左右整体出行,对课程实施点的场地条件有一定要求。 2.确定主题。户外教育的内容往往很难简单地归类于某一个类型或者只有单一的培养目标,而是具有综合性、多目标性。但每个主题课程应当所有侧重,不能为了很多教学目标而装太多的内容与过程,必须做适当的取舍和提炼,形成相对完整的主题内容和过程。一个主题课程时间长度以至少1个小时到一整天的6个小时左右为宜。 3.明确教学条件要求。明确研学课程实施时需要的教具/设备、耗材/道具、场地条件、场景创设、辅助工作人员、资源方配合等,以及包括对课程教师的要求等。 4.设计教学内容与过程。这是研学旅行主题课程开发设计的关键任务,主要课程内容与过程的细化安排设计,包括做什么、怎么做、做多久。 5.提示安全及特别注意事项。学生户外活动的安全级别要求要高于一般成人活动,必须仔细地分析教学实施过程的所有细节,标注其中需要特别留意、提醒、监控的环节,做到防患于未然。同时对一些特别问题如儿童不宜、付费消费等要给予标注、处理办法等。

相关主题
文本预览
相关文档 最新文档